前兩天才把VPN給搞起來,結果一升級64位内核之後,要把所有的軟件都更新到64位的,把源換好,一陣子亂yum update之後,VPN就不出所料挂了……
於是,嘗試這種配,各種亂搞,從openswan.org下各種版本來編譯,都無法恢復了……
於是一怒之下開了個新的系統,乾乾淨淨地搞。
首先當然是安裝openswan了
1 | yum install openswan |
配置/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 25 26 27 28 | version 2.0 config setup protostack=netkey 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 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=公網IP leftprotoport=17/%any #這裡,網上大多都說是17/1701,不過不知道哪個版本后的xl2tpd之後,光1701已經不夠了,有空看看源代碼,還需要什麽端口。。。 right=%any rightprotoport=17/%any #下面三行專門給苹果系列產品的優化 dpddelay=40 dpdtimeout=130 dpdaction=clear |
/etc/ipsec.secrets裏面的内容不用改了,因爲裏面是包含/etc/ipsec.d/下面的所有secrets文件,所以我在/etc/ipsec.d/下面建了一個vpn.secrets
1 | YOUR.SERVER.IP.ADDRESS %any: PSK "YourSharedSecret" |
之後就是設置ipv4轉發,運行以下命令:
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 |
修改/etc/sysctl.conf中的net.ipv4.ip_forward,如果沒有就新增吧
1 | net.ipv4.ip_forward=1 |
运行如下命令刷新:
1 | sysctl -p |
然後就可以把ipsec啓起來了:
1 | service ipsec start |
然後檢查一下ipsec的狀態
1 | ipsec verify |
我這邊的結果是這樣的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.6.32/K3.14.5-x86_64-linode42 (netkey) Checking for IPsec support in kernel [OK] SAref kernel support [N/A] NETKEY: Testing for disabled ICMP send_redirects [OK] NETKEY detected, testing for disabled ICMP accept_redirects [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 [OK] Checking for 'ip' command [OK] Checking /bin/sh is not /bin/dash [OK] Checking for 'iptables' command [OK] Opportunistic Encryption Support [DISABLED] |
然後安裝xl2tpd……
1 | yum install xl2tpd |
咦?找不到這個包…………好吧……加個源……
1 | rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm |
如果是32位,就把上面的x86_64換成i386好了。如果上面的地址不對了,就看fedora epel的faq好了……在這裡:https://fedoraproject.org/wiki/EPEL/FAQ/zh-cn#How_can_I_install_the_packages_from_the_EPEL_software_repository.3F
再來!
1 | yum install xl2tpd |
1 | yum install ppp |
編輯/etc/xl2tpd/xl2tpd.conf如下:
1 2 3 4 5 6 7 8 9 10 11 12 | [global] ipsec saref = no #因爲我上面的ipsec verify的SAref kernel support是N/A,所以這裡就是no了…… [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 | service xl2tpd restart |
這樣子應該就能連上來的,只是因爲沒有設置IP轉發,連上來之後不能訪問外網……不過我發現我win7連上來沒有問題,但是我的苹果手機就一直不行,看xl2tpd的日誌,發現根本就沒有把包發給xl2tpd,看/var/log/secure,發現一直這樣子循環:
Jun 25 07:29:52 li600-141 pluto[2685]: “L2TP-PSK-NAT”[1] x.x.x.x #1: message ignored because it contains an unknown or unexpected payload type (ISAKMP_NEXT_SAK) at the outermost level
Jun 25 07:29:52 li600-141 pluto[2685]: “L2TP-PSK-NAT”[1] x.x.x.x #1: sending notification INVALID_PAYLOAD_TYPE to x.x.x.x:3936
Jun 25 07:29:55 li600-141 pluto[2685]: “L2TP-PSK-NAT”[1] x.x.x.x #1: message ignored because it contains an unknown or unexpected payload type (ISAKMP_NEXT_SAK) at the outermost level
Jun 25 07:29:55 li600-141 pluto[2685]: “L2TP-PSK-NAT”[1] x.x.x.x #1: sending notification INVALID_PAYLOAD_TYPE to x.x.x.x:3936
Jun 25 07:29:59 li600-141 pluto[2685]: “L2TP-PSK-NAT”[1] x.x.x.x #1: message ignored because it contains an unknown or unexpected payload type (ISAKMP_NEXT_SAK) at the outermost level
Jun 25 07:29:59 li600-141 pluto[2685]: “L2TP-PSK-NAT”[1] x.x.x.x #1: sending notification INVALID_PAYLOAD_TYPE to x.x.x.x:3936
搜了半天,也沒有有用的信息……依稀感覺是版本的問題……
好吧,那換一個版本。从http://mirror.centos.org/centos/6/updates/x86_64/Packages/ 來看,openswan有兩個版本,我用的是高版本,不行的話就換一個咯。
先卸載舊版本:
1 | rpm -e openswan |
然後從http://mirror.centos.org/centos/6/updates/x86_64/Packages/openswan-2.6.32-27.2.el6_5.x86_64.rpm安裝另外一個版本。
記得恢復一下ipsec.conf。
然後。。我的苹果。。就連上去了。。。
記得設上轉發哦:
iptables -t nat -A POSTROUTING -s 10.1.2.0/255.255.255.0 -o eth0 -j MASQUERADE
1 | iptables -t nat -A POSTROUTING -s 10.1.2.0/24 -j MASQUERADE |
爲了讓每次服務器重起VPN服務都能順利運行,所以有必要將一些重啓后就丟失的配置寫進啓動自動運行腳本/etc/rc.local裏面(在exit之前):
1 2 3 4 5 6 | 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 |
保存iptables的設置不用寫在rc裏面,設置好之後,service iptables save,就能把配置保存下來啦。
當然了,別忘記chkcfg on,把ipsec和xl2tpd都加上去吧……
就为了 VPN?你这是给自己找事吗,哈哈
也不全是为了VPN,还有这个博客,还有ssh……还有一些别的东西,顺便也玩玩有公网IP的linux~
ou64xt