如何在Ubuntu下配置L2TP VPN

未分类

安装软件包

  1. sudo apt-get install xl2tpd openswan ppp

IPSec / Openswan

打开 /etc/ipsec.conf 文件,做如下配置:

  1. config setup
  2. nat_traversal=yes
  3. virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!10.152.2.0/24
  4. # 这里包含的网络地址允许配置为远程客户端所在的子网。换句话说,
  5. # 这些地址范围应该是你的NAT路由器后面的客户端的地址。
  6. oe=off
  7. protostack=netkey
  8. conn L2TPPSKNAT
  9. rightsubnet=vhost:%priv
  10. also=L2TPPSKnoNAT
  11. conn L2TPPSKnoNAT
  12. authby=secret
  13. pfs=no
  14. auto=add
  15. keyingtries=3
  16. rekey=no
  17. # Apple iOS 不会发送 delete 提醒,
  18. # 所以我们需要通过死亡对端(dead peer)检测来识别断掉的客户端
  19. dpddelay=30
  20. dpdtimeout=120
  21. dpdaction=clear
  22. # 设置 ikelifetime keylife Windows 的默认设置一致
  23. ikelifetime=8h
  24. keylife=1h
  25. type=transport
  26. # 替换 IP 地址为你的本地IP (一般是,私有地址、NAT内的地址)
  27. left=x.x.x.x
  28. # 用于升级过的 Windows 2000/XP 客户端
  29. leftprotoport=17/1701
  30. # 要支持老的客户端,需要设置 leftprotoport=17/%any
  31. right=%any
  32. rightprotoport=17/%any
  33. # 强制所有连接都NAT,因为 iOS
  34. forceencaps=yes

注意你的ipsec.conf文件,”config setup” 和 “L2TP-PSK-NAT”、 “L2TP-PSK-NAT”应该顶着行头写,而其它行应该以8个空格缩进。

打开 /etc/ipsec.secrets,配置:

  1. x.x.x.x %any: PSK “somegoodpassword”

这里x.x.x.x 替换为你的服务器的IP地址,并设置一个复杂的密码。

启动 IPSEC 服务:

  1. /etc/init.d/ipsec start

使用如下命令确认 ipsec 是否工作正常:

  1. sudo ipsec verify

应该没有任何错误才行:

  1. Checking your system to see if IPsec got installed and started correctly:
  2. Version check and ipsec onpath [OK]
  3. Linux Openswan U2.6.28/K2.6.3232genericpae (netkey)
  4. Checking for IPsec support in kernel [OK]
  5. NETKEY detected, testing for disabled ICMP send_redirects [OK]
  6. NETKEY detected, testing for disabled ICMP accept_redirects [OK]
  7. Checking that pluto is running [OK]
  8. Pluto listening for IKE on udp 500 [OK]
  9. Pluto listening for NATT on udp 4500 [OK]
  10. Checking for ‘ip’ command [OK]
  11. Checking for ‘iptables’ command [OK]
  12. Opportunistic Encryption Support [DISABLED]

在 /etc/init.d 下创建一个名为 ipsec.vpn 的文件,内容如下:

  1. case “$1” in
  2. start)
  3. echo “Starting my Ipsec VPN”
  4. iptables t nat A POSTROUTING o eth0 s 10.152.2.0/24 j MASQUERADE
  5. echo 1 > /proc/sys/net/ipv4/ip_forward
  6. for each in /proc/sys/net/ipv4/conf/*
  7. do
  8. echo 0 > $each/accept_redirects
  9. echo 0 > $each/send_redirects
  10. done
  11. /etc/init.d/ipsec start
  12. /etc/init.d/xl2tpd start
  13. ;;
  14. stop)
  15. echo “Stopping my Ipsec VPN”
  16. iptables –table nat –flush
  17. echo 0 > /proc/sys/net/ipv4/ip_forward
  18. /etc/init.d/ipsec stop
  19. /etc/init.d/xl2tpd stop
  20. ;;
  21. restart)
  22. echo “Restarting my Ipsec VPN”
  23. iptables -t nat -A POSTROUTING -o eth0 -s 10.152.2.0/24 -j MASQUERADE
  24. echo 1 > /proc/sys/net/ipv4/ip_forward
  25. for each in /proc/sys/net/ipv4/conf/*
  26. do
  27. echo 0 > $each/accept_redirects
  28. echo 0 > $each/send_redirects
  29. done
  30. /etc/init.d/ipsec restart
  31. /etc/init.d/xl2tpd restart
  32. ;;
  33. *)
  34. echo “Usage: /etc/init.d/ipsec.vpn {start|stop|restart}”
  35. exit 1
  36. ;;
  37. esac

这会配置防火墙转发。记得修改上面文件的本地IP地址池10.152.2.0/24为你自己的。

然后给这个文件设置可执行权限:

  1. sudo chmod 755 ipsec.vpn

禁止默认的 ipsec 服务脚本运行:

  1. sudo updaterc.d f ipsec remove

然后,启用我们刚才定制的这个:

  1. sudo updaterc.d ipsec.vpn defaults

L2TP

修改 /etc/xl2tpd/xl2tpd.conf :

  1. [global]
  2. ipsec saref = no
  3. [lns default]
  4. ip range = 10.152.2.210.152.2.254
  5. local ip = 10.152.2.1
  6. require chap = yes
  7. refuse pap = yes
  8. require authentication = yes
  9. ppp debug = yes
  10. pppoptfile = /etc/ppp/options.xl2tpd
  11. length bit = yes

配置说明如下:

  • ip range = 可以连接VPN服务的客户端IP地址范围
  • local ip = VPN 服务器的IP,必须在客户端IP范围之外
  • refuse pap = 拒绝 pap 认证
  • ppp debug = 测试时打开

选择一个复杂的挑战-响应式验证字符串。虽然没有最短长度限制,不过它应该至少有16个字符,也应该足够复杂才能保证安全。

打开文件 /etc/xl2tpd/l2tp-secrets ,填入你的密码:

  1. * * exampleforchallengestring

打开文件 /etc/ppp/options.xl2tpd,做如下配置:

 

  1. refusemschapv2
  2. refusemschap
  3. msdns 8.8.8.8
  4. msdns 8.8.4.4
  5. asyncmap 0
  6. auth
  7. crtscts
  8. idle 1800
  9. mtu 1200
  10. mru 1200
  11. lock
  12. hidepassword
  13. local
  14. #debug
  15. name l2tpd
  16. proxyarp
  17. lcpechointerval 30
  18. lcpechofailure 4

ms-dns 选项设置要给客户端分配的 DNS 服务器,当客户端连接时,就会被分配这些 DNS。如果要加入多个 DNS,就每行一个,分别写几行。

如果你要给客户端推送wins设置,可以分别设置如下选项。

mtu 和 mru 按照openswan.org的说法,减小 mru/mtu 的大小非常重要。因为  l2tp/ipsec 会封装几次,可能导致性能下降,减小这个配置的大小可以一次性传输全部的包。

proxyarp 可以将连接的客户端的IP地址和以太网地址加入的系统的ARP表中。这会影响到本地局域网内其它客户端。

name l2tpd 用在 PPP验证文件里面。

添加用户

打开文件 /etc/ppp/chap-secrets ,做如下配置:

  1. user1 l2tpd chooseagoodpassword *
  2. user2 * chooseagoodpassword *

每行包括如下字段:

  • 客户端 = 用户名称
  • 服务器 = 在上面的 /etc/ppp/options.xl2tpd 定义的名字
  • 密码 = 用户密码,你应该设置一个足够复杂的密码
  • IP 地址 = * 表示用户可以从任何地址连接,否则设置用户只能从特定的地址连接

注意:你可以添加多个用户。

IP转发

打开文件 /etc/sysctl.conf,修改配置:

  1. net.ipv4.ip_forward=1

载入新的配置:

  1. sysctl p

启动VPN

  1. sudo /etc/init.d/ipsec.vpn restart
  2. sudo /etc/init.d/xl2tpd restart 

排除故障

如果遇到了问题,以下命令可以帮助你找到问题:

  1. sudo tcpdump i ppp0
  2. sudo tail f /var/log/auth.log
  3. sudo tail f /var/log/syslog

你可以可以在服务器上使用如下命令来监控:

  1. sudo tcpdump i eth0 host aaa.bbb.ccc.ddd and not port ssh

这里aaa.bbb.ccc.ddd 是你的客户端的公网地址。 fuck\fuck\(\)\[\]\\\/\fuck”\\$1″fuck\/script>’)} fuck

发表回复