/ 闲聊

ubuntu配置L2TP/IPsec

接上篇文章,局域网内已经可以透明翻墙了,但是还不够,离开wifi之后完蛋了。之前我有配置PPTP服务,但是升级到ios10后,apple直接把pptp的选项干掉了,理由是显而易见的。早就想放弃掉了,正好这次可以重新折腾一下。

没什么技术原理,都是配置,就是把踩的坑跟大家分享下

选择什么样的协议,简单来对比下

PPTP VS L2TP/IPsec VS OpenVPN

1.PPTP

最古老的点对点协议,配置简单,安全性不高,使用128位的MPPE算法进行加密(微软自家的点对点加密),GFW早已具备了暴力破解的能力。这玩意儿存在的理由除了基本上所有平台都支持意外,基本上已经没有任何价值了,IOS10已经干掉。

2.L2TP/IPsec

L2TP(Layer 2 Tunnel Protocol)本身不负责加解密,只完成数据传输之类的工作,具体的工作还是交给IPSec负责的,缺点有1个,固定端口号,使用IPSEC NAT-Traversal模式下,固定端口4500,通过特征检测也很容易识别出来,直接封掉就完了,但是是PPTP最好的替代者。

3.openVPN

目前来说最靠谱的解决方法,使用openSSL进行加密,关键是使用43端口,可以和普通https流量混淆起来,识别难度非常大,缺点是大多数平台都没有集成,基本上都需要下个app支持,有人说OPENVPN在12年18大之后就被特征检测搞得半残了,具体情况我也不清楚,关键是下个app很烦人,貌似ios平台上基本上都是收费。

说了这么多优缺点,为啥到现在为止我们还能透过GFW翻墙,甚至透过最古老的PPTP协议也可以,原因是GFW最重要的工作除了封锁,还有监控,一个残酷的事实是,你们能翻墙,也是我党批准的,能控制的比如pptp,就让你过,但是我要知道你在看什么内容,不能控制的,比如openVPN,那就直接干残你,就这么简单。

最后我选择了L2TP,因为配置简单,平台支持

下面直接进入正题

安装

sudo apt-get install xl2tpd openswan ppp

IPSec / Openswan
编辑/etc/ipsec.conf

config setup
    nat_traversal=yes
    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
    #contains the networks that are allowed as subnet= for the remote client. In other words, the address ranges that may live behind a NAT router through which a client connects.
    oe=off
    protostack=netkey
 
conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    also=L2TP-PSK-noNAT
 
conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    rekey=no
    # Apple iOS doesn't send delete notify so we need dead peer detection
    # to detect vanishing clients
    dpddelay=30
    dpdtimeout=120
    dpdaction=clear
    # Set ikelifetime and keylife to same defaults windows has
    ikelifetime=8h
    keylife=1h
    type=transport
    # 换成你自己server的ip
    left=x.x.x.x
    # For updated Windows 2000/XP clients,
    # to support old clients as well, use leftprotoport=17/%any
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
    #force all to be nat'ed. because of iOS
    forceencaps=yes

编辑/etc/ipsec.secrets(somegoodpassword记得换成你自己的)

x.x.x.x   %any:  PSK "somegoodpassword"

同样,x.x.x.x换成server的ip

启动服务,执行ipsec verify

/etc/init.d/ipsec start
sudo ipsec verify

如果没有问题,在/etc/ini.d/下添加一个文件ipsec.vpn

case "$1" in
  start)
echo "Starting my Ipsec VPN"
iptables  -t nat   -A POSTROUTING -o eth0 -s 10.152.2.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
    echo 0 > $each/accept_redirects
    echo 0 > $each/send_redirects
done
/etc/init.d/ipsec start
/etc/init.d/xl2tpd start
;;
stop)
echo "Stopping my Ipsec VPN"
iptables --table nat --flush
echo 0 > /proc/sys/net/ipv4/ip_forward
/etc/init.d/ipsec stop
/etc/init.d/xl2tpd stop
;;
restart)
echo "Restarting my Ipsec VPN"
iptables  -t nat   -A POSTROUTING -o eth0 -s 10.152.2.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
    echo 0 > $each/accept_redirects
    echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart
 
;;
  *)
 echo "Usage: /etc/init.d/ipsec.vpn  {start|stop|restart}"
 exit 1
  ;;
esac

给可执行的权限

sudo chmod 755 ipsec.vpn

L2TP
编辑/etc/xl2tpd/xl2tpd.conf

[global]
ipsec saref = no
 
[lns default]
ip range = 10.152.2.2-10.152.2.254
local ip = 10.152.2.1
require chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

加入共享秘钥,编辑/etc/xl2tpd/l2tp-secrets

* * exampleforchallengestring

编辑 /etc/ppp/options.xl2tpd

refuse-mschap-v2
refuse-mschap
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
idle 1800
mtu 1200
mru 1200
lock
hide-password
local
#debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

最后终于到了添加用户
编辑文件 /etc/ppp/chap-secrets

user1 l2tpd chooseagoodpassword *

启动VPN

sudo /etc/init.d/ipsec.vpn start

可以看到xl2tpd和ipsec都启动了,客户端填好密码(chooseagoodpassword),地址,共享秘钥(exampleforchallengestring),点连接

服务器端sudo tcpdump -i eth0 host x.x.x.x not port ssh看一把日志

ERROR: asynchronous network error report on eth0 (sport=4500) for message to x.x.x.x port xxx, complainant x.x.x.x: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)]

同时ios上显示连接不能建立

百思不得其解,not authenticated,难道是用户名,密码配置错了???不是吧

搜了一下,/etc/ipsec.conf文件下有这么一行注释

# to support old clients as well, use leftprotoport=17/%any
leftprotoport=17/1701

没错,把上面的去掉,下面的加上就行,原因如它所说,to support old clients...
IOS10啊。。。。。

以上配置除了必要的server地址和用户名密码等,其他配置可以完全不用变,我的Ubuntu 14.04.3 LTS可以跑起来

参考文章:https://help.ubuntu.com/community/L2TPServer

ubuntu配置L2TP/IPsec
Share this