使用openswan和xl2tpd搭建V*N
使用openswan和xl2tpd在VPS上搭建V*N,至此你可以从 Mac、iPhone、iPad、Android 的 V*N 处连接这台 V*N 服务器,正常访问所有合法网站
在现在的网络环境下每个人都需要一个 V*N。一方面可以保证你在公共网络环境下安全使用网络,比如在咖啡厅、机场等提供免费 WIFI 的地方;另一方面众所周知的原因,我们尤其是互联网行业的技术人员需要 V*N 或者加密网络链路才能够正常使用某些国外合法服务。
另外对于公共场所的wifi,实际上是有些不安全的,那么此时在连接wifi后使用V*N上网,由于数据进行了加密,所以会比较安全。
通常情况下加密链路有 2 种方式:
0. GoAgengX
1. SSH 隧道
2. VPS 上安装 V*N
这篇文章主要说明 V*N 的方式,因为这种方式几乎是一劳永逸的方式,后期成本很低。
GoAgengX 的方式:
这在 Mac 下使用非常方便,缺点和 SSH 隧道方式类似,手机和 iPad 不方便,并且有流量限制。而且这种方式经常或失效。
SSH 隧道的方式:
我之前几年都使用的是加密隧道的方式,比如在 Mac 或者 Linux 平台上,可以执行 ssh -D 1234 username@domain.name 登陆后就会在本地打通一个端口,将需要加密的流量导入本地这个端口即可。
然后可以设置应用的 proxy 为 本地 IP 和 1234 端口即可。这种方式的好处是非常稳定,缺点是每次输入命令操作复杂,并且手机和 iPad 很难用这种方式访问国外合法网站。
V*N 的方式:
V*N 的方式可以方便的使用 V*N 客户端来完成整个过程。 V*N 的安装还是相对复杂的,网上能找到的 V*N 安装教程非常多,但是能够实现完整
安装,然后电脑、笔记本、手机、iPad 正常使用的教程几乎找不到。所以我把自己安装 V*N 的过程记录下来。本文介绍使用openswan和xl2tpd搭建V*N,原因是由于PPP搭建V*N不够安全,容易被封。
下面具体介绍安装方法,以ubuntu 12.04为例进行安装,centos系统参考这篇文章(http://ippotsuko.com/blog/centos-setup-l2tp-ipsec-psk-V*N/):
此次安装是在DigitalOcean上的ubuntu系统上安装的,环境参数说明:
auto eth0 iface eth0 inet static address 107.170.193.20 ##本机外网IP netmask 255.255.240.0 gateway 107.170.192.1 ##本机网关IP dns-nameservers 8.8.4.4 8.8.8.8 209.244.0.3
具体ip配置请以自己主机上的ip为准,这里仅做示范用。
安装过程
安装必备的软件包:
sudo apt-get install openswan ppp xl2tpd
编辑并检查 /etc/ipsec.conf 的以下几行,大部分情况下整个文件不需要修改:
config setup dumpdir=/var/run/pluto/ nat_traversal=yes virtual_private=%v4:10.0.0.0/8,%v4:192.168.140.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10 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=5 rekey=no ikelifetime=8h keylife=1h type=transport left=107.170.193.20 leftprotoport=17/1701 right=%any rightprotoport=17/%any dpddelay=15 dpdtimeout=30 dpdaction=clear
left为本机IP地址。
编辑和检查 /etc/xl2tpd/xl2tpd.conf 修改 IP 范围和本地 IP 地址,注意这些地址和你的内网 IP 地址不能冲突或者重复:
[global] ipsec saref = yes [lns default] ip range = 192.168.140.200-192.168.140.240 local ip = 192.168.140.230 refuse chap = yes refuse pap = yes require authentication = yes name = OpenswanV*N ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes
编辑和检查 /etc/ppp/options.xl2tpd修改 ms-dns 的值,这里使用 Google 的 DNS 服务器 8.8.8.8:
require-mschap-v2 ms-dns 8.8.8.8 ms-dns 8.8.4.4 auth mtu 1200 mru 1000 crtscts hide-password modem name l2tpd proxyarp lcp-echo-interval 30 lcp-echo-failure 4
编辑和检查 /etc/ppp/chap-secrets 这个文件保存的 V*N 的连接账号信息,以下只开通一个账号,并且指定这个账号的 IP 地址:
# Secrets for authentication using CHAP # client server secret IP addresses fantasy l2tpd fantasy856575 * wang123 l2tpd wj1989 *
这里配置的是V*N的帐号,但在L2TP连接时,还有共享密码需要配置。编辑和检查 /etc/ipsec.secrets 注意 digitalocean 这个值是机器鉴定的共享秘钥的值,可以修改成其他值:
# this file is managed with debconf and will contain the automatically created RSA keys #include /var/lib/openswan/ipsec.secrets.inc #注意这一行要注释掉 107.170.193.20 %any: PSK "digitalocean"
修改/etc/sysctl.conf,尾部加入一些参数:
# /etc/sysct.conf # only values specific for ipsec/l2tp functioning are shown here. merge with existing file net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.icmp_ignore_bogus_error_responses = 1
执行脚本:
for V*N in /proc/sys/net/ipv4/conf/*; do echo 0 > $V*N/accept_redirects; echo 0 > $V*N/send_redirects; done sysctl -p #使修改生效
最后配置防火墙:
iptables --table nat --append POSTROUTING --jump MASQUERADE iptables -t nat -A POSTROUTING -s 192.168.140.0/24 -o eth0 -j MASQUERADE iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -I FORWARD -s 192.168.140.0/24 -j ACCEPT iptables -I FORWARD -d 192.168.140.0/24 -j ACCEPT iptables -A FORWARD -j REJECT iptables -A INPUT -p udp -m state --state NEW -m udp --dport 1701 -j ACCEPT iptables -A INPUT -p udp -m state --state NEW -m udp --dport 500 -j ACCEPT iptables -A INPUT -p udp -m state --state NEW -m udp --dport 4500 -j ACCEPT /etc/rc.d/init.d/iptables save /etc/rc.d/init.d/iptables restart
其中这两句写入/etc/rc.local:
for V*N in /proc/sys/net/ipv4/conf/*; do echo 0 > $V*N/accept_redirects; echo 0 > $V*N/send_redirects; done iptables --table nat --append POSTROUTING --jump MASQUERADE
重启相关服务:
/etc/init.d/pppd-dns restart /etc/init.d/xl2tpd restart /etc/init.d/ipsec restart
注:由于digitalocean默认是root用户,因此上述命令没有sudo,对于一般用户,建议使用sudo账户。
我本地使用mac自带的V*N客户端是可以连接到V*N服务器上的,连接时会有日志输出(/var/log/syslog)
最终查看连接或者调试错误时查看日志 /var/log/syslog :
tail -f /var/log/syslog
验证配置是否成功:
ipsec verify
输出:
Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.6.37/K3.8.0-29-generic (netkey) Checking for IPsec support in kernel [OK] SAref kernel support [N/A] NETKEY: Testing XFRM related proc values [OK] [OK] [OK] Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for NAT-T on udp 4500 [OK] Checking for 'ip' command [OK] Checking /bin/sh is not /bin/dash [WARNING] Checking for 'iptables' command [OK] Opportunistic Encryption Support [DISABLED]
如果都显示 OK 则成功了,否则需要检查哪里有问题。
使用 帐号(fantasy)和密码(fantasy856575)以及ipsec共享密码(digitalocean)就可以访问自己搭建的V*N了。
至此你可以从 Mac、iPhone、iPad、Android 的 V*N 处连接这台 V*N 服务器,正常访问所有合法网站了,注意选择的V*N类型为 L2TP/IPSec或L2TP。
android手机设置V*N访问:http://www.krit.cn/android.html
ios设备设置V*N访问:http://www.appifan.com/jc/201301/39474.html
mac电脑社hiV*N访问:http://www.krit.cn/mac.html
来自:http://my.oschina.net/u/128568/blog/286002