Einen FreeBSD-Desktop an einen Microsoft Windows Routing und RAS VPN-Server anbinden, per IPsec/L2TP. Klingt nach Qual, ist aber erstaunlich einfach. Ich nutze strongSwan für den IPsec-Tunnel und mpd5 für L2TP.
Ausgangslage
Der FreeBSD-Desktop hat die IP 192.168.10.57. Der Windows RRAS-Server steht unter vpnserver.domain.tld (88.88.88.88). Tunneltyp ist IPsec/L2TP mit Pre-Shared Key für IPsec und Active Directory-Anmeldung über L2TP. Die Firmennetze 172.16.0.0/12 und 10.0.0.0/8 sollen über den Tunnel erreichbar sein.
strongSwan: IPsec-Tunnel
/usr/local/etc/ipsec.conf:
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev1
authby=psk
conn vpnname
type=transport
leftfirewall=yes
right=vpnserver.domain.tld
rightid=%any
rightsubnet=0.0.0.0/0
auto=add
left=%defaultroute
leftprotoport=17/%any
rightprotoport=17/1701
ike=3des-sha1-modp1024!
esp=3des-sha1
modeconfig=push
Der Pre-Shared Key in /usr/local/etc/ipsec.secrets:
vpnserver.domain.tld %any : PSK "abcdefg1234567"
Tunnel aufbauen:
root@errortest:~ # ipsec up vpnname
initiating Main Mode IKE_SA vpnname[20] to 88.88.88.88
[...]
IKE_SA vpnname[20] established between 192.168.10.57[192.168.10.57]...88.88.88.88[88.88.88.88]
CHILD_SA vpnname{38} established with SPIs c387d93f_i 4720cab6_o
and TS 192.168.10.57/32[udp] === 88.88.88.88/32[udp/l2f]
connection 'vpnname' established successfully
Status prüfen mit ipsec statusall. Wichtig ist die Zeile ESTABLISHED und dass die SPIs gesetzt sind.
mpd5: L2TP-Verbindung
/usr/local/etc/mpd5/mpd.conf:
startup:
log +ALL +EVENTS -FRAME -ECHO
default:
load L2TP_client
L2TP_client:
create bundle static B1
set iface up-script /home/kernel/vpnname-up.sh
set iface down-script /home/kernel/vpnname-down.sh
set bundle enable crypt-reqd
set bundle enable compression
set bundle enable ipv6cp
set ccp yes mppc
set mppc no e40 e56
set mppc yes e128 stateless
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
set ipcp enable req-pri-dns
set ipcp enable req-sec-dns
set iface route 172.16.0.0/12
set iface route 10.0.0.0/8
set iface enable tcpmssfix
create link static L1 l2tp
set link action bundle B1
set auth authname "AD-USERNAME"
set auth password "AD-PASSWORD"
set link max-redial 0
set link mtu 1400
set link keep-alive 20 75
set link accept chap-msv2
set link no pap eap
set l2tp peer vpnserver.domain.tld
open
Starten mit mpd5. Wenn alles klappt, erscheint ein ng0 Interface:
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST>
inet 10.16.100.34 --> 10.16.100.13 netmask 0xffffffff
Hinweise zur mpd5-Konfiguration
set ccp yes mppc aktiviert MPPC-Komprimierung und MPPE-Verschlüsselung. set mppc yes e128 stateless ist Pflicht für die Zusammenarbeit mit MS-CHAPv2 auf der Windows-Seite. Andere MPPE-Varianten (e40, e56) funktionieren mit MS-CHAPv2 nicht.
Der Windows VPN-Server übermittelt zwar Routen und DNS-Server, mpd5 übernimmt davon aber nicht alles automatisch. Deshalb die manuellen Routen mit set iface route. Die DNS-Server werden per IPCP abgefragt und an die Up/Down-Scripte übergeben. Da ich die DNS-Konfiguration kenne, kopiere ich in den Scripten einfach die passende /etc/resolv.conf.
Ich starte IPsec und dann mpd5 von Hand, wenn ich die Verbindung brauche. Man kann beides auch als Dienst konfigurieren.
Wer seinen Windows RRAS-Server mit sicheren Cipher Suites absichern will: In dem Beitrag geht es um die TLS-Seite der gleichen Infrastruktur.
Siehe auch: RRAS L2TP/IPsec VPN Cipher Suites
Fragen? Einfach melden.