You are here: Home > 技術…… > VPS記錄(4)

VPS記錄(4)

架好了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……

然後,就可以了……

Tags: , , , , ,

2 Responses to “VPS記錄(4)”

  1. cm说道:

    我架了一个vpn纯属玩,因为在公司里用的是openvpn所以就做了一个openvpn,你这个是ipsec。mknod 这个命令现在应该很少用了才对啊,很奇怪。你动手能力真的很强,ipsec我配了好一半天没配好然后就放弃了。

    • Netson说道:

      因为合租的同学兼同事有个iPad,所以基本上就只能配ipsec或者ppp了。
      我动手能力强啥啊,自己编openswan老说找不到头文件,第二天回公司在RTX上问了下ljf(其实本来想问你的,发现你RTX灰了,那是我还不知道你走了- -b),才确定是没有编译环境- -b之前我只apt-get install了make 和 gcc

发表评论

电子邮件地址不会被公开。 必填项已用*标注