架好了Wordpress和奶瓶腿之後,我就開始架VPN了。參考了這篇、這篇和這篇文章。
前兩篇文章我是對照著做的,兩邊一樣的時候我就照做,兩邊不一樣的時候我就不做或者按我的理解看
首先,安裝openswan
1 | apt-get install openswan |
注意的是,我的是Debian Lenny,這樣子拿下來的openswan是有Bug的,最好還是自己編譯一個(我不確定我的有沒有,因爲我最後的確是編譯了openswan,但是問題在另外一個地方,我不知道用原來的openswan會不會有問題)
1 2 3 4 5 6 | aptitude install 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 make install |
在make之前,要先確保系統裏面有開發環境……
然後,配置openswan,後面那篇文章更有條理一些,不同的内容分在不同的文件裏面配置,然後include起來,我開始也是這樣干的,不過後來因爲別的原因一直沒有配好,病急亂投醫,把它們合併在一個文件裏面,等到後來問題解決后就懶得弄回去了。所以我的/etc/ipsec.conf配置文件是這樣子的:(注意縮進)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 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=173.255.214.56 leftprotoport=17/1701 right=%any rightprotoport=17/%any include /etc/ipsec.d/no_oe.conf |
要注意的是,前面那篇文章有一行oe=off,我一開始沒有加進去,發現連不上,我以爲是這裡的問題,加進去后發現更不對了,這應該也是Debian和Ubuntu的小區別吧?
而我的/etc/ipsec.d/no_oe.conf是這樣的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | conn block auto=ignore conn private auto=ignore conn private-or-clear auto=ignore conn clear-or-private auto=ignore conn clear auto=ignore conn packetdefault auto=ignore |
這個no_oe是爲了好看而已,沒有也可以的,只是在後面的檢查會有一個非OK的提示而已。
之後是編輯/etc/ipsec.secrets文件,改爲如下内容:
1 | YOUR.SERVER.IP.ADDRESS %any: PSK "YourSharedSecret" |
其中,YOUR.SERVER.IP.ADDRESS是服務器IP地址,YourSharedSecret隨便填寫,我弄了長長的一串隨機字符串。
然後運行以下命令:
1 2 3 4 5 | for each in /proc/sys/net/ipv4/conf/* do echo 0 > $each/accept_redirects echo 0 > $each/send_redirects done |
之後運行
1 | ipsec verify |
正常的話,會出現
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.6.24/K2.6.32.16-linode28 (netkey) Checking for IPsec support in kernel [OK] NETKEY detected, testing for disabled ICMP send_redirects [OK] NETKEY detected, testing for disabled ICMP accept_redirects [OK] Checking for RSA private key (/etc/ipsec.secrets) [OK] Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for NAT-T on udp 4500 [OK] Two or more interfaces found, checking IP forwarding [OK] Checking NAT and MASQUERADEing Checking for 'ip' command [OK] Checking for 'iptables' command [OK] Opportunistic Encryption Support [DISABLED] |
其中,Checking for RSA private key (/etc/ipsec.secrets)可能會失敗,不過不要緊,如果實在想解決(像我一樣- -b),根據第三篇的内容(完全照搬是有問題的,不知道爲什麽,我ipsec newhostkey –help看了看,稍作修改),那麽可以按照如下操作:
1 2 3 | ipsec newhostkey --output /root/tmpkey --bits 128 cat /root/tmpkey >> /etc/ipsec.secrets rm /root/tmpkey |
如果沒有做上面那個no_oe的話,還會提示一個DNS什麽的錯誤,其實也是不要緊的。
最後的Opportunistic Encryption Support也是不要緊的。
之後,就可以重啓服務了:
1 | /etc/init.d/ipsec restart |
然後就是安裝L2TP和ppp了。
1 | apt-get install xl2tpd ppp |
編輯/etc/xl2tpd/xl2tpd.conf如下:
1 2 3 4 5 6 7 8 9 10 11 12 | [global] ipsec saref = yes [lns default] ip range = 10.1.2.2-10.1.2.255 local ip = 10.1.2.1 length bit = yes refuse chap = yes refuse pap = yes require authentication = yes ppp debug = yes pppoptfile = /etc/ppp/options.l2tpd |
編輯/etc/ppp/options.xl2tpd,如果沒有就建立一個吧。你也可以放在你喜歡的地方起一個你喜歡的名字,只要和上面那配置文件裏面的pppoptfile一致就好
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | require-mschap-v2 ms-dns 8.8.8.8 ms-dns 8.8.4.4 asyncmap 0 auth crtscts lock hide-password modem debug name l2tpd proxyarp lcp-echo-interval 30 lcp-echo-failure 4 |
上面的ms-dns我用的是google的DNS……
然後編輯/etc/ppp/chap-secrets,這個用來加VPN賬戶,一行一個賬戶:
1 2 | # user server password ip test l2tpd testpassword * |
test是用戶名,自己起,第二項必須是l2tpd,第三項是密碼,第4項是限制這個VPN必須從哪裏連上來,*代表那裏都可以
重啓服務:
1 | /etc/init.d/xl2tpd restart |
然後執行下列語句:
1 2 | iptables -t nat -A POSTROUTING -s 10.1.2.0/255.255.255.0 -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward |
要注意的是,所有的教程裏面,第一行都寫成了這樣: iptables –t nat –append POSTROUTING –j MASQUERADE 或者 iptables -–table nat –append POSTROUTING –-jump MASQUERADE
其實是有問題的,這樣子之後,服務器内部的網絡連接就不對了,我的nginx連php5-fpm連不上了,後來我把php5-fpm改爲unix設備之後,php連mysql也連不上了……
我後來認真查了一下這個iptables到底是干嘛的,才決定加上-s 10.1.2.0/255.255.255.0 -o eth0的限制。
設置ipv4轉發,修改/etc/sysctl.conf中的net.ipv4.ip_forward,如果沒有就新增吧
1 | net.ipv4.ip_forward=1 |
运行如下命令:
1 | sysctl -p |
爲了讓每次服務器重起VPN服務都能順利運行,所以有必要將一些重啓后就丟失的配置寫進啓動自動運行腳本/etc/rc.local裏面(在exit之前):
1 2 3 4 5 6 7 | iptables -t nat -A POSTROUTING -s 10.1.2.0/255.255.255.0 -o eth0 -j 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 |
然後為了保險起見,重啓一下服務:
1 2 | /etc/init.d/ipsec restart /etc/init.d/xl2tpd restart |
按道理來説應該就沒有問題了。用windows自帶的撥號連接就可以。記得“安全”裏面,要選用L2TP/IPSec,並且它的高級設置裏面記得用密鈅方式,裏面填上在/etc/ipsec.secrets文件裏面設置的YourSharedSecret。協議用Microsoft CHAP 版本2(MS-CHAP v2)就可以。
不過我一直都不行,後來根據第三篇文章的提示,認真看了看/var/log/syslog(/var/log/auth.log沒有發現啥問題),然後發現這麽一行:
1 | pppd is unable to open the /dev/ppp device. You need to create the /dev/ppp device node by executing the following command as root: mknod /dev/ppp c 108 0 |
於是我就運行mknod /dev/ppp c 108 0,然後就好了……我不知道後面兩個參數是不是每個人都一樣,所以如果我下次做,估計還得先看syslog……
然後,就可以了……
我架了一个vpn纯属玩,因为在公司里用的是openvpn所以就做了一个openvpn,你这个是ipsec。mknod 这个命令现在应该很少用了才对啊,很奇怪。你动手能力真的很强,ipsec我配了好一半天没配好然后就放弃了。
因为合租的同学兼同事有个iPad,所以基本上就只能配ipsec或者ppp了。
我动手能力强啥啊,自己编openswan老说找不到头文件,第二天回公司在RTX上问了下ljf(其实本来想问你的,发现你RTX灰了,那是我还不知道你走了- -b),才确定是没有编译环境- -b之前我只apt-get install了make 和 gcc