As been the original author of undeadly.org article I can state that info in is stil partially valid, except npppd.conf part. So here it goes:
tunnel L2TP protocol l2tp { listen on 1.2.3.4 l2tp-hostname "vpn" l2tp-vendor-name "OpenBSD" l2tp-accept-dialin yes mru 1360 lcp-timeout 18 authentication-method mschapv2 tcp-mss-adjust yes pipex yes mppe no # ingress-filter yes } ipcp IPCP { pool-address "172.17.0.0/24" dns-servers 172.16.0.1 allow-user-selected-address no } interface tun0 address 172.17.0.1 ipcp IPCP authentication LOCAL type local { users-file "/etc/npppd/npppd-users" } authentication RADIUS type radius { authentication-server { address 172.16.0.231 secret “SECRETPASSWORD" } accounting-server { address 172.16.0.231 secret “SECRETPASSWORD" } } bind tunnel from L2TP authenticated by RADIUS to tun0 Below comes ipsec.conf. Woking with OSX and Win7(Win8) ike passive esp transport \ proto udp from 1.2.3.4 to any port 1701 \ main auth "hmac-sha1" enc "3des" group modp1024 \ quick auth "hmac-sha1" enc "aes" \ psk “P4SSWORD" \ tag rwarrior This setup is on 5.4-current //mxb On 22 jul 2014, at 13:05, chenghan tv <chenghan...@gmail.com> wrote: > OpenBSD L2TP/IPSec will work behind a Linux NAT port forwarding with > iptables, based on my previous experience. iOS and OSX VPN clients work > fine, but not working for Windows. FYI. > > Gordon Turner <tur...@ftn.net> wrote: > >> On 2014-07-22 05:33, Daniel Polak wrote: >> >>> I'll give it a go with what I found but if anyone who has it working >>> with local authentication can post their ipsec.conf and npppd.conf, I >>> would appreciate it! >>> >> >> Here are my notes, granted I am in the middle of getting things sorted >> out, so these are not validated. >> >> >> NOTE: My current issue is that I am trying to run this behind a router / >> firewall, which is likely the source of my problems. >> >> >> I am getting an old laptop setup to test the configuration with OpenBSD as >> the router / firewall. >> >> In the notes below the ipsec.conf, `public_ip` should be the public ip on >> the internet, if you place the OpenBSD box as the router / firewall. >> >> >> - References: >> http://www.slideshare.net/GiovanniBechis/npppd-easy-vpn-with-openbsd >> http://undeadly.org/cgi?action=article&sid=20120427125048 >> http://comments.gmane.org/gmane.os.openbsd.misc/209636 >> http://stackoverflow.com/questions/14967962/openbsd- >> ipsec-vpn-not-routing-traffic >> http://www.packetmischief.ca/openbsd-ipsec-tunnel-guide/ >> >> - Claims to have it working, on internet facing machine: >> https://www.mail-archive.com/misc@openbsd.org/msg125930.html >> >> - Reference for supported protocols and authentication methods for iOS: >> http://support.apple.com/kb/HT1288 >> >> >> --- >> >> >> Requirements >> ----------- >> - Using OpenBSD 5.5 as an VPN end point for iOS 7.0 and OSX 10.9 clients. >> - Support for iOS, preferably native VPN client >> - Support for OSX, preferably native VPN client >> >> - VPN endpoint running on an internal server. >> - Forwarding appropriate ports from a router. >> >> >> Description >> ----------- >> - Use npppd, IPsec and Packet Filter (pf). >> - Configuration files `/etc/npppd/npppd.conf`, `/etc/npppd/npppd-users`, >> `/etc/ipsec.conf` and `/etc/pf.conf`. >> >> >> npppd Setup >> ----------- >> - npppd is a Point-to-Point Protocol (PPP) and tunneling daemon capable of >> L2TP, PPTP, and PPPoE. >> >> - Reference: http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/ >> man8/npppd.8?&manpath=OpenBSD-current&sec=8&query=npppd >> http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/ >> man5/npppd.conf.5?&manpath=OpenBSD-current&sec=5&query=npppd.conf >> >> >> - Example of L2TP and authenticates using a local file. >> - Example npppd.conf file, `/etc/npppd/npppd.conf`: >> ``` >> authentication LOCAL type local { >> users-file "/etc/npppd/npppd-users" >> } >> >> tunnel L2TP_ipv4 protocol l2tp { >> listen on 0.0.0.0 >> } >> >> ipcp IPCP { >> pool-address 192.168.2.150-192.168.2.199 >> dns-servers 8.8.8.8 >> } >> >> interface pppx0 address 192.168.2.1 ipcp IPCP >> bind tunnel from L2TP_ipv4 authenticated by LOCAL to pppx0 >> ``` >> - NOTE: `pool-address` valus should be a block of addresses in the same >> subnet of the internal network. >> - NOTE: `dns-servers 8.8.8.8` is Google's public dns, local local DNS >> servers should be used if available. >> >> >> - Example npppd-users file, `/etc/npppd/npppd-users`: >> ``` >> jtest: \ >> :password=SEEKRIT:\ >> :framed-ip-address=192.168.2.150: >> ``` >> - NOTE: Replace `SEEKRIT` with your password. >> - NOTE: The `framed-ip-address` value should be in the `pool-address` >> block from `/etc/npppd/npppd.conf`. >> >> >> IPsec Setup >> ---------------- >> - IPsec is a pair of protocols, Encapsulating Security Payload (ESP) and >> Authentication Header (AH), which provide security services for IP >> datagrams. >> >> - Reference: >> http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/ >> man4/ipsec.4?&manpath=OpenBSD-current&query=ipsec >> >> >> - Example ipsec.conf file, `/etc/ipsec.conf`: >> ``` >> public_ip = "192.168.2.2" >> >> ike passive esp transport \ >> proto udp from $public_ip to any port 1701 \ >> main auth "hmac-sha1" enc "aes" group modp1024 \ >> quick auth "hmac-sha1" enc "aes" \ >> psk "SEEKRIT" >> ``` >> - NOTE: Replace `192.168.2.2` with the ip of the server. >> - NOTE: Replace SEEKRIT with your password. >> >> >> Packet Filter Setup >> ------------------- >> - Packet Filter is OpenBSD's system for filtering TCP/IP traffic and doing >> Network Address Translation. >> >> - Reference: >> http://www.openbsd.org/faq/pf/ >> http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/ >> man4/pf.4?&manpath=OpenBSD-current&arch=amd64&query=pf >> >> >> - Example pf.conf file, `/etc/pf.conf`: >> ``` >> pass quick proto { esp, ah } from any to any >> pass in quick on egress proto udp from any to any port {500, 4500, 1701} >> keep state >> pass on enc0 from any to any keep state (if-bound) >> ``` >> >> sysctl Changes >> -------------- >> - NOTE: Not sure if needed. >> >> - Make changes to `/etc/sysctl.conf` and reboot >> ``` >> ... >> # CHANGED >> net.inet.ip.forwarding=1 >> ... >> # CHANGED >> net.pipex.enable=1 >> ... >> ``` >> ``` >> sudo reboot >> ``` >> >> >> NAT and Port Forwarding >> ---------------------- >> - If the VPN end point is behind a NATed firewall the following ports must >> be forwarded: >> - UDP 500 - Internet Key Exchange (IKE) >> - UDP 1701 - L2TP traffic >> - UDP 4500 - IPSec Network Address Translation (NAT-T) >> >> >> Startup >> ------- >> - Apply pf.conf rules: >> ``` >> sudo pfctl -f /etc/pf.conf >> ``` >> >> - Start isakmpd: >> ``` >> sudo /etc/rc.d/isakmpd -f start >> ``` >> >> - Apply ipsec rules: >> ``` >> sudo ipsecctl -v >> ``` >> >> ``` >> sudo isakmpd -K -d >> ``` >> - NOTE: -d starts in foreground >> >> >> - Start npppd: >> ``` >> sudo /usr/sbin/npppd -d >> ``` >> - NOTE: -d starts in foreground >> >> >> Monitoring >> ---------- >> - To monitor npppd vpn sessions use npppctl: >> ``` >> npppctl session all >> ``` >> >> - Reference: >> http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/ >> man8/npppctl.8?&manpath=OpenBSD-current&sec=8&query=npppctl >> >> - To monitor ipsec use ipsecctl: >> ``` >> sudo ipsecctl -s all >> ``` >> >> >> Start ipsec and isakmpd at Boot >> --------------------- >> - Add following to /etc/rc.conf.local to start isakmpd at boot: >> ``` >> isakmpd_flags="-K" >> ipsec=YES >> ```