之前在工作的时候就被安排了一个任务是配置VPN,但是当时弄了一阵之后发现连接总是会出现问题(可以连上,但一访问外网,过一会儿就断线了o(╯□╰)o当时也没有测试手机连接VPN,现在搭建的这个我是按着网上的一些教程一步一步来的,但是,还是会出现同样的问题,不过在Android/iPhone上却可以很好的工作,不知道是个什么问题,还希望了解的大神能帮忙解释)
下面是在搭建/配置L2TP/IPsec VPN的过程中整理出来的一键配置shell脚本,有Ubuntu下的,也有CentOS下的。都是我在Zeddicus大牛的脚本(现在已经打不开下载地址了)基础上,结合网上的其他教程进行修改后而成的(主要在于OpenSwan的版本以及将一些需要开机启动的操作写入/etc/rc.local),先看Ubuntu版本:
#!/bin/bash if [ $(id -u) != "0" ]; then printf "Error: You must be root to run this tool!n" exit 1 fi clear printf " #################################################### # # # This is a Shell-Based tool of l2tp installation # # Version: 1.2 # # Author: Zed Lau # # Website: http://zeddicus.com # # For Ubuntu 32bit and 64bit # # # #################################################### " vpsip=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk 'NR==1 { print $1}'` iprange="10.0.192" echo "Please input IP-Range:" read -p "(Default Range: 10.0.192):" iprange if [ "$iprange" = "" ]; then iprange="10.0.192" fi mypsk="ixyzero.com" echo "Please input PSK:" read -p "(Default PSK: ixyzero.com):" mypsk if [ "$mypsk" = "" ]; then mypsk="ixyzero.com" fi clear get_char() { SAVEDSTTY=`stty -g` stty -echo stty cbreak dd if=/dev/tty bs=1 count=1 2> /dev/null stty -raw stty echo stty $SAVEDSTTY } echo "" echo "ServerIP:" echo "$vpsip" echo "" echo "Server Local IP:" echo "$iprange.1" echo "" echo "Client Remote IP Range:" echo "$iprange.128-$iprange.254" echo "" echo "PSK:" echo "$mypsk" echo "" echo "Press any key to start..." char=`get_char` clear apt-get -y update apt-get -y upgrade apt-get -y install build-essential python2.7 apt-get -y install libgmp3-dev bison flex libpcap-dev ppp pptpd iptables make gcc lsof vim mkdir /ztmp mkdir /ztmp/l2tp cd /ztmp/l2tp wget --no-check-certificate https://download.openswan.org/openswan/openswan-2.6.38.tar.gz tar zxvf openswan-2.6.38.tar.gz cd openswan-2.6.38 make programs install rm -rf /etc/ipsec.conf touch /etc/ipsec.conf cat >>/etc/ipsec.conf<<EOF 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 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 ikelifetime=8h keylife=1h type=transport left=$vpsip leftprotoport=17/1701 right=%any rightprotoport=17/%any EOF cat >>/etc/ipsec.secrets<<EOF $vpsip %any: PSK "$mypsk" EOF sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf sed -i 's/#net.ipv6.conf.all.forwarding=1/net.ipv6.conf.all.forwarding=1/g' /etc/sysctl.conf sysctl -p iptables --table nat --append POSTROUTING --jump MASQUERADE 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 ipsec verify aptitude install xl2tpd ppp rm -rf /etc/xl2tpd/xl2tpd.conf touch /etc/xl2tpd/xl2tpd.conf cat >>/etc/xl2tpd/xl2tpd.conf<<EOF [global] ipsec saref = yes [lns default] ip range = $iprange.128-$iprange.254 local ip = $iprange.1 require chap = yes refuse pap = yes require authentication = yes ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes EOF rm -rf /etc/ppp/options.xl2tpd touch /etc/ppp/options.xl2tpd cat >>/etc/ppp/options.xl2tpd<<EOF require-mschap-v2 ms-dns 208.67.222.222 ms-dns 8.8.8.8 asyncmap 0 auth crtscts lock hide-password modem debug name l2tpd proxyarp lcp-echo-interval 30 lcp-echo-failure 4 EOF cat >>/etc/ppp/chap-secrets<<EOF hey l2tpd heyman * EOF touch /usr/bin/l2tpstart echo "#/bin/bash" >>/usr/bin/l2tpstart echo "for each in /proc/sys/net/ipv4/conf/*" >>/usr/bin/l2tpstart echo "do" >>/usr/bin/l2tpstart echo "echo 0 > $each/accept_redirects" >>/usr/bin/l2tpstart echo "echo 0 > $each/send_redirects" >>/usr/bin/l2tpstart echo "done" >>/usr/bin/l2tpstart chmod +x /usr/bin/l2tpstart iptables --table nat --append POSTROUTING --jump MASQUERADE l2tpstart xl2tpd cat >>/etc/rc.local<<EOF iptables --table nat --append POSTROUTING --jump MASQUERADE /etc/init.d/ipsec restart /usr/bin/l2tpstart /usr/local/sbin/xl2tpd EOF clear ipsec verify printf " if there are no [FAILED] above, then you can connect to your L2TP VPN Server with the default user/pass below: ServerIP:$vpsip username:hey password:heyman PSK:$mypsk More account infomation, please see: /etc/ppp/chap-sercets "
总体过程就是:
一、安装 IPSec。因为 IPSec 会对 IP 数据包进行加密和验证。这意味着你的电脑 / 移动设备与服务器之间传输的数据无法被解密、也不能被伪造。这里推荐用 openswan 这个后台软件包来跑 IPSec。
二、编辑 /etc/ipsec.conf 。
三、编辑 /etc/ipsec.secrets 。
四、开启端口转发:
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
五、检查一下 IPSec 能否正常工作:
sudo ipsec verify
如果在结果中看到「Opportunistic Encryption Support」被禁用了,没关系,其他项 OK 即可。
六、重启 openswan:
sudo /etc/init.d/ipsec restart
七、安装 L2TP。常用的 L2TP 后台软件包是 xl2tpd,它和 openswan 是同一帮人写的。
八、编辑 /etc/xl2tpd/xl2tpd.conf 。
需要注意的是 ip range 一项里的 IP 地址不能和你正在用的 IP 地址重合,也不可与网络上的其他 IP 地址冲突。
九、安装 ppp。这是用来管理 VPN 用户的。
十、编辑 /etc/ppp/options.xl2tpd 这个文件,没有的话就建一个。
十一、添加 VPN 用户。编辑 /etc/ppp/chap-secrets。
十二、重启 xl2tpd:
sudo /etc/init.d/xl2tpd restart
十三、设置 iptables 的数据包转发:
iptables –table nat –append POSTROUTING –jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
十四、因为某种原因,openswan 在服务器重启后无法正常自动,所以需要编辑 /etc/rc.local 文件。
到这里,设置工作已经基本完成。你可以用 Android 或 iPhone/iPad 试着连一下。
如果连接成功,上网也没问题的话,恭喜你,大功告成。如果连不上,慢慢排查问题吧(比如可以使用命令:xl2tpd -D,进行调试)。
注意:openswan 的版本对于配置能否成功有很大的影响,所以请多尝试。如果做完以上十四步还是连不上的话,请考虑从源码编译 openswan :
sudo apt-get install -y libgmp3-dev gawk flex bison
wget http://www.openswan.org/download/openswan-2.6.24.tar.gz
tar xf openswan-2.6.24.tar.gz
cd openswan-2.6.24
make programs
sudo make install
编译需要一段时间。你的 Linux 内核版本需要高于 2.6.6。
附上一些不错的参考资料:
- 如何在 Debian / Ubuntu 服务器上架设 L2TP / IPSec VPN – Apple4us
- L2TPServer – Community Help Wiki
- VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别 | 软矿
- Linode CentOS / Debian 部署 ipsec+l2tpd 简要笔记
- 六步搞定centos 6下l2tp + ipsec VPN服务器配置
- IPSEC/L2TP VPN on CentOS 6 / Red Hat Enterprise Linux 6 / Scientific Linux 6 – Raymii.org
- 方糖茶会4:用DigitalOcean上科学上网 | 方糖气球
- DigitalOcean:ubuntu vps下配置vpn | Web Life | 迷失互联网
- 如何在Ubuntu下配置L2TP VPN – 系统运维
- CentOS 5.5 安装 IPSEC / L2TP VPN :: wiFay
- CentOS安装L2TP VPN笔记 | 小峰网络遨游记
- CentOS上L2TP安装与配置
- ipsec安装好后运行ipsec verify命令发现错误的解决方案 – kloboHYZ
- CentOs下L2tp+IPsec 配置与相关问题解决
《 “在Ubuntu上配置L2TP/IPsec VPN” 》 有 5 条评论
自动安装shadowsocks服务端
https://github.com/iMeiji/shadowsocks_install
https://github.com/teddysun/shadowsocks_install
自动安装IPSec VPN的脚本
https://github.com/hwdsl2/setup-ipsec-vpn
https://github.com/hwdsl2/docker-ipsec-vpn-server
https://github.com/philpl/setup-simple-ipsec-l2tp-vpn
https://github.com/trailofbits/algo
https://github.com/mobilejazz/docker-ipsec-vpn-server
在CentOS上一键安装IPSec VPN
`
# yum update && shutdown -r now
# wget https://raw.githubusercontent.com/hwdsl2/setup-ipsec-vpn/master/vpnsetup_centos.sh
# vim vpnsetup_centos.sh
[Replace with your own values: YOUR_IPSEC_PSK, YOUR_USERNAME and YOUR_PASSWORD]
# sh vpnsetup_centos.sh
`
Shadowsocks原理详解
https://mp.weixin.qq.com/s?__biz=MzIxMjAzMDA1MQ==&mid=2648945850&idx=1&sn=f175ecbcd54ffc23a2c160570aef81e1
Shadowsocks 原理简介及安装指南
http://www.barretlee.com/blog/2016/08/03/shadowsocks/
ShadowSocks的翻墙原理
https://tumutanzi.com/archives/13005
写给非专业人士看的 Shadowsocks 简介
http://vc2tea.com/whats-shadowsocks/
Shadowsocks 源码分析——协议与结构
https://loggerhead.me/posts/shadowsocks-yuan-ma-fen-xi-xie-yi-yu-jie-gou.html
SS详解(一):原理
http://rt.cn2k.net/?p=214
【原创】翻墙代理 Shadowsocks 使用详解
https://kefeng.wang/2016/12/15/shadowsocks/
上网限制和翻墙基本原理
http://blog.021xt.cc/archives/85
一键安装最新内核并开启 BBR 脚本
http://love.junzimu.com/archives/3237
https://github.com/teddysun/across/blob/master/bbr.sh
https://teddysun.com/489.html
https://github.com/google/bbr
https://github.com/kuoruan/shell-scripts
https://github.com/52fancy/GooGle-BBR
https://github.com/ToyoDAdoubi/doubi
Shadowsocks 被发现多个漏洞,可以实现本地命令执行
https://x41-dsec.de/lab/advisories/x41-2017-008-shadowsocks/
https://x41-dsec.de/lab/advisories/x41-2017-010-shadowsocks-libev/