使用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-noNATconn 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</pre>
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</pre>
編輯和檢查 /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 CHAPclient server secret IP addresses
fantasy l2tpd fantasy856575 wang123 l2tpd wj1989 </pre>
這里配置的是V*N的帳號,但在L2TP連接時,還有共享密碼需要配置。編輯和檢查 /etc/ipsec.secrets 注意 digitalocean 這個值是機器鑒定的共享秘鑰的值,可以修改成其他值:
# this file is managed with debconf and will contain the automatically created RSA keysinclude /var/lib/openswan/ipsec.secrets.inc #注意這一行要注釋掉
107.170.193.20 %any: PSK "digitalocean"</pre>
修改/etc/sysctl.conf,尾部加入一些參數:
# /etc/sysct.confonly 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</pre>
執行腳本:
for VN in /proc/sys/net/ipv4/conf/; do echo 0 > $VN/accept_redirects; echo 0 > $VN/send_redirects; donesysctl -p #使修改生效</pre>
最后配置防火墻:
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</pre>
其中這兩句寫入/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