使用openswan和xl2tpd搭建V*N

jopen 10年前發布 | 72K 次閱讀 VPN

使用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</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 CHAP

 client 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 keys

include /var/lib/openswan/ipsec.secrets.inc  #注意這一行要注釋掉

107.170.193.20  %any:  PSK "digitalocean"</pre>

修改/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</pre>

執行腳本:

for VN in /proc/sys/net/ipv4/conf/; do echo 0 > $VN/accept_redirects; echo 0 > $VN/send_redirects; done

sysctl -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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!