1, kernel update
2, ports update
# portsnap fetch extract update
3, kernel configure
# cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/kernel_ipsec # cat >> /usr/src/sys/i386/conf/kernel_ipsec << _EOF_ options IPSEC options IPSEC_ESP device gif _EOF_ # cd /usr/src # make buildkernel KERNCONF=kernel_ipsec # make installkernel KERNCONF=kernel_ipsec
4, Edit tunnel – /etc/rc.conf
host 1:
gif_interfaces="gif0" gifconfig_gif0="A.B.C.D W.X.Y.Z" ifconfig_gif0="inet 192.168.1.1 192.168.2.1 netmask 0xffffffff" static_routes="vpn" route_vpn="192.168.2.0 192.168.2.1 netmask 0xffffff00"
host 2:
gif_interfaces="gif0" gifconfig_gif0="W.X.Y.Z A.B.C.D" ifconfig_gif0="inet 192.168.2.1 192.168.1.1 netmask 0xffffffff" static_routes="vpn" route_vpn="192.168.1.0 192.168.1.1 netmask 0xffffff00"
5, do tunnel commands
host 1:
# ifconfig gif0 create # ifconfig gif0 tunnel A.B.C.D W.X.Y.Z # ifconfig gif0 inet 192.168.1.1 192.168.2.1 netmask 0xffffffff
host 2:
# ifconfig gif0 create # ifconfig gif0 tunnel W.X.Y.Z A.B.C.D # ifconfig gif0 inet 192.168.2.1 192.168.1.1 netmask 0xffffffff
6, enable ipsec – /etc/rc.conf
ipsec_enable="YES" ipsec_file="/etc/ipsec.conf"
7, setkey – /etc/ipsec.conf
host 1:
spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require; spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require;
host 2:
spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require;
8, enable racoon in /etc/rc.conf
racoon_enable="YES"
9, racoon configure
# mkdir -p /usr/local/etc/racoon # echo "A.B.C.D password" > /usr/local/etc/racoon/psk.txt # chmod 0600 /usr/local/etc/racoon/psk.txt # cat >> /usr/local/etc/racoon/racoon.conf << _EOF_ path pre_shared_key "/usr/local/etc/racoon/psk.txt"; remote anonymous { exchange_mode main,aggressive,base; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key ; dh_group 2 ; } } sainfo anonymous { pfs_group 2; lifetime time 12 hour ; encryption_algorithm 3des, cast128, blowfish 448, des, rijndael ; authentication_algorithm hmac_sha1, hmac_md5 ; compression_algorithm deflate ; } _EOF_
10, add route
/sbin/route add -net 10.55.0/16 192.168.1.101 /sbin/route add -net 172.16.0/16 192.168.1.101 /sbin/route add -net 10.69.0/16 192.168.1.101
11, /etc/sysctl.conf
# echo 'net.inet.ip.forwarding=1' >> /etc/sysctl.conf # sysctl net.inet.ip.forwarding=1
11, ipsec boot
# setkey -F # setkey -FP # setkey -f /etc/ipsec.conf # /usr/local/etc/rc.d/racoon start
12, Done!
]]>
一下的内容以ubuntu/debian发行版为例。
1,安装 IPSec。IPSec 会对 IP 数据包进行加密和验证。这意味着你的电脑 / 移动设备与服务器之间传输的数据无法被解密、也不能被伪造。我推荐用 openswan 这个后台软件包来跑 IPSec。
用以下命令安装 openswan:
sudo aptitude install openswan
2,用文字编辑器打开 /etc/ipsec.conf,改成这样:
version 2.0 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 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=3 rekey=no ikelifetime=8h keylife=1h type=transport left=YOUR.SERVER.IP.ADDRESS leftprotoport=17/1701 right=%any rightprotoport=17/%any
3,修改 /etc/ipsec.secrets:
YOUR.SERVER.IP.ADDRESS %any: PSK "YourSharedSecret"
把“YOUR.SERVER.IP.ADDRESS”,这部分换成你的服务器的 IP 地址,把“YourSharedSecret”
4、运行以下命令:
for each in /proc/sys/net/ipv4/conf/* do echo 0 > $each/accept_redirects echo 0 > $each/send_redirects done
5,检查一下 IPSec 能否正常工作:
sudo ipsec verify
如果在结果中看到「Opportunistic Encryption Support」被禁用了,没关系,其他项 OK 即可。
6,重启 openswan:
sudo /etc/init.d/ipsec restart
7,安装 L2TP。常用的 L2TP 后台软件包是 xl2tpd,它和 openswan 是同一帮人写的。
运行以下命令:
sudo aptitude install xl2tpd
8,用文字编辑器打开 /etc/xl2tpd/xl2tpd.conf,改成这样:
[global] ipsec saref = yes [lns default] ip range = 10.1.2.2-10.1.2.255 local ip = 10.1.2.1 ;require chap = yes refuse chap = yes refuse pap = yes require authentication = yes ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes
这里要注意的是 ip range 一项里的 IP 地址不能和你正在用的 IP 地址重合,也不可与网络上的其他 IP 地址冲突。
9,安装 ppp。这是用来管理 VPN 用户的。
sudo aptitude install ppp
10,检查一下 /etc/ppp 目录里有没有 options.xl2tpd 这个文件,没有的话就建一个,文件内容如下:
require-mschap-v2 ms-dns 208.67.222.222 ms-dns 208.67.220.220 asyncmap 0 auth crtscts lock hide-password modem debug name l2tpd proxyarp lcp-echo-interval 30 lcp-echo-failure 4
注意 ms-dns 两行我填的是 OpenDNS。如果你想用其他的 DNS 服务器(例如谷歌的公共 DNS),请自行更换。
11,现在可以添加一个 VPN 用户了。用文字编辑器打开 /etc/ppp/chap-secrets:
# user server password ip test l2tpd testpassword *
如果你之前设置过 PPTP VPN,chap-secrets 文件里可能已经有了其他用户的列表。你只要把 test l2tpd testpassword * 这样加到后面即可。
12,重启 xl2tpd:
sudo /etc/init.d/xl2tpd restart
13,设置 iptables 的数据包转发:
iptables --table nat --append POSTROUTING --jump MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward
14,因为某种原因,openswan 在服务器重启后无法正常自动,所以我们可以在 /etc/rc.local 文件里写入如下语句:
iptables --table nat --append POSTROUTING --jump MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward 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
到这里,设置工作已经基本完成。你可以用 iPhone 或 iPad 试着连一下。记得在「Secret」中填入你在上述第三步里填的 YourSharedSecret。
如果连接成功,上网也没问题的话,恭喜你,大功告成。如果连不上,恐怕还得多做一步。
Ubuntu 9.10 自带的 openswan 版本是 2.6.22, Debian Lenny 带的版本是 2.4.12。这两个版本的 openswan 都有问题。我们的测试结果表明,2.6.24 版的 openswan 可以在上述两版的 Linux 操作系统下正常工作。所以如果做完以上十四步还是连不上的话,请考虑从源码编译 openswan 2.6.24 :
sudo 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 sudo make install
编译需要一段时间。你的 Linux 内核版本需要高于 2.6.6。
然后可以删除原先通过 aptitude 安装的 openswan,并重启之:
sudo aptitude remove openswan sudo /etc/init.d/ipsec restart]]>
VPN方案以前比较熟悉的OpenVPN,不过win下需要单装客户端,所以这次就用pptpd来做,比OpenVPN简单不少。
安装pptpd
以debian/ubuntu为例
# apt-get install pptpd # apt-get install iptables
配置pptpd
修改/etc/pptpd.conf
localip 10.0.0.1 remoteip 10.0.0.10-250
修改/etc/ppp/pptpd-options
ms-dns <your dns0> ms-dns <your dns1>
修改密码文件 /etc/ppp/chap-secrets
第一列为用户名,第二列为/etc/ppp/pptpd-options中的name字段(默认为pptpd),第三列为密码,最后一列为允许ip(所有都允许是*)。
iptables转发:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
sysctl打开ip_forward
sysctl net.ipv4.ip_forward=1
客户端连接:
直接在windows下建立vpn连接,走默认的即可。
完成。
]]>