{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreigxnmuhlrowjzhuo5ar27wa7fjn2zzzyaprrrqmsj7v2hmerlavgu",
    "uri": "at://did:plc:nkxz2ojdvmieg2nhphvputvp/app.bsky.feed.post/3mmluxauuvoy2"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreidnhlfm7ajlpxivp7kgsk6jxu64o6hzm4xelteoojitttonumxxhe"
    },
    "mimeType": "image/png",
    "size": 1017116
  },
  "description": "FreeBSD 12 als IPsec/L2TP-Client gegen Windows RRAS konfiguriert: strongSwan + mpd5, IKEv1, 3DES-SHA1, MS-CHAPv2-Auth, MPPE-Encryption. Manuelle Route-Verwaltung. Windows-Enterprise-VPN erfordert Spezialwissen, aber machbar.",
  "path": "/2019/04/04/freebsd-als-ipsec-l2tp-client-an-einem-microsoft-windows-routing-und-ras-vpn-server/",
  "publishedAt": "2026-05-24T11:40:09.000Z",
  "site": "https://www.kernel-error.de",
  "tags": [
    "FreeBSD",
    "InfoSec",
    "IPsec",
    "L2TP",
    "Networking",
    "RRAS",
    "strongSwan",
    "Sysadmin",
    "VPN",
    "Windows",
    "mpd5",
    "Windows RRAS-Server mit sicheren Cipher Suites",
    "RRAS L2TP/IPsec VPN Cipher Suites",
    "Einfach melden."
  ],
  "textContent": "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.\n\n### Ausgangslage\n\nDer 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.\n\n### strongSwan: IPsec-Tunnel\n\n`/usr/local/etc/ipsec.conf`:\n\n\n    config setup\n\n    conn %default\n            ikelifetime=60m\n            keylife=20m\n            rekeymargin=3m\n            keyingtries=1\n            keyexchange=ikev1\n            authby=psk\n\n    conn vpnname\n            type=transport\n            leftfirewall=yes\n            right=vpnserver.domain.tld\n            rightid=%any\n            rightsubnet=0.0.0.0/0\n            auto=add\n            left=%defaultroute\n            leftprotoport=17/%any\n            rightprotoport=17/1701\n            ike=3des-sha1-modp1024!\n            esp=3des-sha1\n            modeconfig=push\n\nDer Pre-Shared Key in `/usr/local/etc/ipsec.secrets`:\n\n\n    vpnserver.domain.tld %any : PSK \"abcdefg1234567\"\n\nTunnel aufbauen:\n\n\n    root@errortest:~ # ipsec up vpnname\n    initiating Main Mode IKE_SA vpnname[20] to 88.88.88.88\n    [...]\n    IKE_SA vpnname[20] established between 192.168.10.57[192.168.10.57]...88.88.88.88[88.88.88.88]\n    CHILD_SA vpnname{38} established with SPIs c387d93f_i 4720cab6_o\n      and TS 192.168.10.57/32[udp] === 88.88.88.88/32[udp/l2f]\n    connection 'vpnname' established successfully\n\nStatus prüfen mit `ipsec statusall`. Wichtig ist die Zeile `ESTABLISHED` und dass die SPIs gesetzt sind.\n\n### mpd5: L2TP-Verbindung\n\n`/usr/local/etc/mpd5/mpd.conf`:\n\n\n    startup:\n        log +ALL +EVENTS -FRAME -ECHO\n\n    default:\n        load L2TP_client\n\n    L2TP_client:\n        create bundle static B1\n        set iface up-script /home/kernel/vpnname-up.sh\n        set iface down-script /home/kernel/vpnname-down.sh\n        set bundle enable crypt-reqd\n        set bundle enable compression\n        set bundle enable ipv6cp\n        set ccp yes mppc\n        set mppc no e40 e56\n        set mppc yes e128 stateless\n        set ipcp ranges 0.0.0.0/0 0.0.0.0/0\n        set ipcp enable req-pri-dns\n        set ipcp enable req-sec-dns\n        set iface route 172.16.0.0/12\n        set iface route 10.0.0.0/8\n        set iface enable tcpmssfix\n\n        create link static L1 l2tp\n        set link action bundle B1\n        set auth authname \"AD-USERNAME\"\n        set auth password \"AD-PASSWORD\"\n        set link max-redial 0\n        set link mtu 1400\n        set link keep-alive 20 75\n        set link accept chap-msv2\n        set link no pap eap\n\n        set l2tp peer vpnserver.domain.tld\n        open\n\nStarten mit `mpd5`. Wenn alles klappt, erscheint ein `ng0` Interface:\n\n\n    ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST>\n        inet 10.16.100.34 --> 10.16.100.13 netmask 0xffffffff\n\n### Hinweise zur mpd5-Konfiguration\n\n`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.\n\nDer 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`.\n\nIch starte IPsec und dann mpd5 von Hand, wenn ich die Verbindung brauche. Man kann beides auch als Dienst konfigurieren.\n\nWer seinen Windows RRAS-Server mit sicheren Cipher Suites absichern will: In dem Beitrag geht es um die TLS-Seite der gleichen Infrastruktur.\n\nSiehe auch: RRAS L2TP/IPsec VPN Cipher Suites\n\nFragen? Einfach melden.",
  "title": "FreeBSD als IPsec/L2TP-Client für Microsoft Windows Routing und RAS VPN"
}