基于IPsec的虚拟专用网在Linux上的实现
时间:2007-02-17 来源:PHP爱好者
上一篇我们介绍了基于IPsec的VPN的基本原理, 现在我们来看看具体怎么配置自己的虚拟专用网.
1. VPN的类型
关于如何组建VPN, 有的公司付费购买专门的软件, 而有的公司用自己的路由器来实现, 因为很多路由器内嵌VPN功能. 这些VPN可以像SSH隧道一样简单, 也可以做的很复杂. 所有的方案都有一个共同点, 那就是必须在不安全的互连网创建一个虚拟的安全的隧道. VPN主要有以下类型:
IPsec
VPND
SSH
诸如一些CISCO路由器(内嵌VPN功能)
2. 我推荐的选择 FreeS/WAN
上面如此多的选择, 为什么我要选择Linux上的FreeS/WAN(基于IPsec)来实现VPN呢?
因为从目前的应用情况看, FreeS/WAN是目前最安全的在Linux上的实现方案. 它基于3DES等加密算法. 另外, 试验表明SSH和VPND方案缺少FreeS/WAN的某些功能, 而且IPsec被越来越多的其他软件所支持, 以后的兼容性更好. 例如, NAI的PGPnet就和FreeS/WAN一起工作得很好. 但是, 我认为真正重要的一点是, 它是免费的(Linux也是免费的), 这对于我们国内用户来说, 不用花大价钱去买专门的软件, 您只需要向ISP支付一点上网费, 就可以组建自己的廉价的VPN.
3. 它的用途
通过Internet连接2个甚至更多的办公室(当然是两地分居的那种);
允许公司的某个职员在千里之外远程登录到公司内部网络;
在Internet上, 数据是在一个虚拟的安全通道内传播;
4. 安装和配置IPsec和FreeS/WAN1.5
(1)安装;
如果你的内核版本低于2.2.14, 那么我强烈建议你升级到2.2.14; 可以从http://www.kernel.org/下载. 按照你自己的要求编译内核, 开始最好不要IPsec支持(以后再做).
然后到http://www.freeswan.org/ 上下载freeswan-1.5.tar.gz(七月二号出的最新版), 把这个文件放到/usr/src/目录下, 运行tar zxvf freeswan-1.5.tar.gz解开, 这时候会出现一个新的目录/usr/src/freeswan-1.5/, 所有的freeswan的源代码和各种文件都在这个目录下.
这时候切记当前目录是/usr/src/freeswan-1.5/, 运行make menugo; 在网络部分, 确定所有IPsec的部分都被选上. 退出菜单, 保存新内核的设置, 注意!!!即使你什么也没改, 也必须save, 否则IPsec不会启动.
现在你需要用新的内核启动, 运行
cp /usr/src/linux-2.2.14/arch/i386/boot/bzImage /boot/vmlinuz-2.2.14 将bzImage移到
/boot目录下. 然后运行cp /usr/src/linux-2.2.14/System.map /boot/System.map-2.2.14来创
建新的System.map文件. 最后在/usr/src/linux-2.2.14/下运行make modules; make
modules_install. 编辑/etc/lilo.conf, 将新的内核放到最前面, 运行lilo使之生效.
重新启动, 你将会看到
IPSec running under FreeS/WAN 1.5 will start up
ipsec0 start up
等字样, 如果没有的话, 说明安装不正确, 需要重新安装.
(2). VPN的配置
一。 ipsec.conf 文件 (/etc/ipsec.conf)
现在IPsec已经装好了, 我们需要用它来配置VPN. 典型的, 我们需要两个网关, 不必
关心那个是左边的, 那个是右边的, 只要记住它们是一对, 就好像两个克隆人. 让我们看看下面的例子:
Left Net ===== Left Gate --------------------------- Right Gate ===== Right Net
Internet
有关信息如下:
Left Net: 192.168.1.0/24
Left Gate (internal): 192.168.1.1
Left Gate (external): 100.100.100.100
Left Name: North
Right Net: 192.168.2.0/24
Right Gate (internal): 192.168.2.254
Right Gate (external): 200.200.200.200
Right Name: South
现在需要在ipsec.conf文件里创建连接. 注意通信有很多种情况: Net to Net, Left
Gate to Right Net, Left Net to Right Gate, and Gate to Gate. 每一个情况都必须有一个连
接来处理. 我推荐你在对这些连接命名的时候最好能够反映通信情况. 本例中需要5个
连接, 分别是%default, NorthNet-SouthNet, NorthGate-SouthNet, NorthNet-SouthGate和
NorthGate-SouthGate. 注意名字中不能有空格.配置文件中加入下面内容:
注意%default在文件中已经存在, 它说明了以后的连接所用的加密或认证算法以及密钥和spi等, 一般密钥需要改动. 如下
# defaults for subsequent connection descriptions
conn %default
# How persistent to be in (re)keying negotiations (0 means very).
keyingtries=0
# Parameters for manual-keying testing (DONT USE OPERATIONALLY).
spi=0x200
esp=3des-md5-96
espenckey=0x01234567_89abcdef_02468ace_13579bdf_12345678_9abcdef0
espauthkey=0x12345678_9abcdef0_2468ace0_13579bdf
然后加入下面的新连接
conn NorthNet-SouthNet
left=100.100.100.100
leftsubnet=192.168.1.0/24
leftfirewall=yes
right=200.200.200.200
rightsubnet=192.168.2.0/24
rightfirewall=yes
conn NorthGate-SouthNet
left=100.100.100.100
right=200.200.200.200
rightsubnet=192.168.2.0/24
rightfirewall=yes
conn NorthNet-SouthGate
left=100.100.100.100
leftsubnet=192.168.1.0/24
leftfirewall=yes
right=200.200.200.200
conn SouthGate-NorthGate
left=100.100.100.100
right=200.200.200.200
注意本文件中在两个网关设置了防火墙, 这是应该的, 几乎没有一个VPN不用防火墙的.
现在我们确定一下在config.setup部分中的变量设置是否正确, 它是如下形式
config setup
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
interfaces选项当用IPsec收发数据包是从哪个网络接口走, 如果设为%defaultroute, 将根据机器的路由表中的路由表项来走. 当然, 你也可以指定网络接口, 例如
interfaces="ipsec0=eth1" (设为第二块网卡, 偏不从第一块走).
Klipsdebug和plutodebug是用来打开或关闭调试选项, 即出了问题到/var/log/messages中加入出错信息.
非常重要的一点!!!两个网关的ipsec.conf的内容必须完全一致(除了config setup部分允许有差异, 如网卡的选则, conn * 部分必须克隆), 否则IPsec不能处理.
二。ipsec.secrets文件
它是两个网关之间的对称加密算法的密钥. 两个网关的这个文件必须完全一致. 如何在两个网关之间传输密钥呢, 这有点像鸡和蛋的问题, 但是不用担心, 数学家发明了更高级的加密算法(非对称加密如RSA), 它是双方有自己的私钥和共同的公钥(坏人可以知道公钥), 但是双方都不知道对方的私钥, 坏人当然也不知道了. 传送密钥的时候, 用自己的私钥和公钥加密, 对方用对方的私钥和公钥解密. 不相信, 去看看RSA算法. 就是这么神奇. 当然, 也可以有别的方法, A地网关的管理人员考到小盘上, 送到B地, 不过嘛, 有点可笑.
这个文件应该如下样子的:
100.100.100.100 200.200.200.200 "jxj52SjRmUu3nVW521Wu135R5k44uU5lR2V3kujT24U1lVumWSkT52Tu11W
Vnm1Vu25lV52k4"
不用解释, 你可以看出怎么配置它了.
三。防火墙设置
假设用ipchains, 下面是左边网关的例子:
ipchains -A input -s 100.100.100.100 -d 0/0 -j ACCEPT
ipchains -A input -s 100.100.100.100 -d 192.168.2.0/24 -j ACCEPT
ipchains -A input -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
它允许从自己发向Internet和右边子网的包, 同时允许从左边子网发往右边子网的包.
注意, ipsec.secrets 和 ipsec.conf 的文件必须设为只有root可读, 普通用户不能访问, 以保证安全.
(3)测试
以上说的手工密钥的加密方式, 自动密钥加密方式以后再说.
首先启动我们加的连接, 如下
[root@Tiger /etc]# ipsec manual --up NorthGate-SouthGate
[root@Tiger /etc]# ipsec manual --up NorthGate-SouthNet
[root@Tiger /etc]# ipsec manual --up NorthNet-SouthGate
[root@Tiger /etc]# ipsec manual --up NorthNet-SouthNet
做完上面的, 然后运行下面的命令:
[root@Tiger /etc]# ipsec look 看看其输出, 如果跟下面的类似就正确了, 否则有问题.
. cs.mynet.net Wed July 8 22:51:45 GAT 2000 -------------------------
192.168.1.0/24 -> 192.168.2.0/24 => [email protected] [email protected]
-------------------------
[email protected] IPv4_Encapsulation: dir=out 192.168.1.1 -> 192.168.2.254
[email protected] 3DES-MD5-96_Encryption: dir=in iv=0xc2cbca5ba42ffbb6 seq=0 bit=0x00000000 win=0 flags=0x0<>
[email protected] 3DES-MD5-96_Encryption: dir=out iv=0xc2cbca5ba42ffbb6 seq=0 bit=0x00000000 win=0 flags=0x0<>
Destination Gateway Genmask Flags MSS Window irtt Iface
192.0.0.0 0.0.0.0 255.255.255.0 U 1500 0 0 eth1
192.168.2.0 192.168.2.254 255.255.255.0 UG 1404 0 0 ipsec0
想知道更多的话, 运行ipsec barf 看看.
现在来检测我们的工作:通过ping另一端的内部网的机器, 用tcpdump来看接口ipsec0的情况.
假设我们在192.168.2.15上, 执行ping 192.168.1.25, 显示
64 bytes from 192.168.1.25: icmp_seq=0 ttl=127 time=45.7 ms
64 bytes from 192.168.1.25: icmp_seq=1 ttl=127 time=45.2 ms
64 bytes from 192.168.1.25: icmp_seq=2 ttl=127 time=45.5 ms
64 bytes from 192.168.1.25: icmp_seq=3 ttl=127 time=43.0 ms
……
说明网通了.
在200.200.200.200上执行tcpdump -i ipsec0
tcpdump: listening on ipsec0
21:02:52.873587 > 200.200.200.200 > 192.168.1.25: icmp: echo request
21:02:52.921596 <192.168.1.25 > 200.200.200.200: icmp: echo reply
21:02:53.890317 > 200.200.200.200 > 192.168.1.25: icmp: echo request
21:02:53.935618 <192.168.1.25 > 200.200.200.200: icmp: echo reply
21:02:54.890277 > 200.200.200.200 > 192.168.1.25: icmp: echo request
21:02:54.936592 <192.168.1.25 > 200.200.200.200: icmp: echo reply
21:02:55.890284 > 200.200.200.200 > 192.168.1.25: icmp: echo request
21:02:55.934099 <192.168.1.25 > 200.200.200.200: icmp: echo reply
……
如果这样, 表示你的VPN已经初步搭起来了, 你可以做进一步的测试, 比如在某个网关内部网上起一个Web Server, 在另一端的内部网访问, 同时试着在Internet上截获数据包, 看看内容有没有加密.
(4)在启动机器时启动连接
因为我们既然设置了VPN, 就希望IPsec连接在网关启动是自动启动. 很简单, 你只需要在
ipsec.conf的config.setup部分加入下面几行:
pluto=yes
plutoload="NorthGate-SouthGate NorthGate-SouthNet NorthNet-SouthGate NorthNet-SouthNet"
plutostart="NorthGate-SouthGate NorthGate-SouthNet NorthNet-SouthGate NorthNet-SouthNet"
plutowait=no
pluto是freeswan的守护进程.
加入这几行之后, 运行ipsec setup restart就生效了, 显示如下:
ipsec_setup: Stopping FreeS/WAN IPSEC... ipsec_setup: Shutting down Pluto:
ipsec_setup: Taking ipsec0 down: ipsec_setup: Misc cleanout:
ipsec_setup: ...FreeS/WAN IPSEC stopped
ipsec_setup: Starting FreeS/WAN IPSEC 1.5... ipsec_setup: KLIPS debug `none
ipsec_setup: KLIPS ipsec0 on eth0 200.200.200.200/255.255.255.0 broadcast 200.200.200.255
ipsec_setup: Disabling core dumps:
ipsec_setup: Starting Pluto (debug `none):
ipsec_setup: Loading Pluto database `NorthGate-SouthGate NorthGate-SouthNet NorthNet-SouthGate NorthNet-SouthNet:
ipsec_setup: Enabling Pluto negotiation:
ipsec_setup: Routing for Pluto conns `NorthGate-SouthGate NorthGate-SouthNet NorthNet-SouthGate NorthNet-SouthNet:
ipsec_setup: Initiating Pluto tunnel `NorthGate-SouthGate (asynchronously):
ipsec_setup: Initiating Pluto tunnel `NorthGate-SouthNet (asynchronously):
ipsec_setup: Initiating Pluto tunnel `NorthNet-SouthGate (asynchronously):
ipsec_ (asynchronously):
ipsec_setup: ...FreeS/WAN IPSEC started
如果这样, 那么已经成功了. 在每次启动Pluto守护进程时, 连接自动启动.
(5)产生真正可用的密钥
前面用的是一个不安全的测试用的key, 这是很不安全的. 因此, 这个key必须在测试结束后改变掉. 一个叫ranbits的程序产生随机字符串, 如下运行:
[root@ Tiger /etc]# ipsec ranbits 192 >> ipsec.secrets
它产生一个192个字符的字符串, 然后在ipsec.secrets加上两个网关的地址就可以了.
5. 参考资料
1) FreeS/Wan Documentation
http://www.freeswan.org/freeswan_trees/freeswan-1.5/doc/
2) OREILLY Virtual Private Networks 2nd Edition
Charlie Scott, Paul Wolfe & Mike Erwin
3) Linux-IPSEC Mailing List
http://www.freeswan.org/mail.html
php爱好者站 http://www.phpfans.net Linux|Apache|IIS.
1. VPN的类型
关于如何组建VPN, 有的公司付费购买专门的软件, 而有的公司用自己的路由器来实现, 因为很多路由器内嵌VPN功能. 这些VPN可以像SSH隧道一样简单, 也可以做的很复杂. 所有的方案都有一个共同点, 那就是必须在不安全的互连网创建一个虚拟的安全的隧道. VPN主要有以下类型:
IPsec
VPND
SSH
诸如一些CISCO路由器(内嵌VPN功能)
2. 我推荐的选择 FreeS/WAN
上面如此多的选择, 为什么我要选择Linux上的FreeS/WAN(基于IPsec)来实现VPN呢?
因为从目前的应用情况看, FreeS/WAN是目前最安全的在Linux上的实现方案. 它基于3DES等加密算法. 另外, 试验表明SSH和VPND方案缺少FreeS/WAN的某些功能, 而且IPsec被越来越多的其他软件所支持, 以后的兼容性更好. 例如, NAI的PGPnet就和FreeS/WAN一起工作得很好. 但是, 我认为真正重要的一点是, 它是免费的(Linux也是免费的), 这对于我们国内用户来说, 不用花大价钱去买专门的软件, 您只需要向ISP支付一点上网费, 就可以组建自己的廉价的VPN.
3. 它的用途
通过Internet连接2个甚至更多的办公室(当然是两地分居的那种);
允许公司的某个职员在千里之外远程登录到公司内部网络;
在Internet上, 数据是在一个虚拟的安全通道内传播;
4. 安装和配置IPsec和FreeS/WAN1.5
(1)安装;
如果你的内核版本低于2.2.14, 那么我强烈建议你升级到2.2.14; 可以从http://www.kernel.org/下载. 按照你自己的要求编译内核, 开始最好不要IPsec支持(以后再做).
然后到http://www.freeswan.org/ 上下载freeswan-1.5.tar.gz(七月二号出的最新版), 把这个文件放到/usr/src/目录下, 运行tar zxvf freeswan-1.5.tar.gz解开, 这时候会出现一个新的目录/usr/src/freeswan-1.5/, 所有的freeswan的源代码和各种文件都在这个目录下.
这时候切记当前目录是/usr/src/freeswan-1.5/, 运行make menugo; 在网络部分, 确定所有IPsec的部分都被选上. 退出菜单, 保存新内核的设置, 注意!!!即使你什么也没改, 也必须save, 否则IPsec不会启动.
现在你需要用新的内核启动, 运行
cp /usr/src/linux-2.2.14/arch/i386/boot/bzImage /boot/vmlinuz-2.2.14 将bzImage移到
/boot目录下. 然后运行cp /usr/src/linux-2.2.14/System.map /boot/System.map-2.2.14来创
建新的System.map文件. 最后在/usr/src/linux-2.2.14/下运行make modules; make
modules_install. 编辑/etc/lilo.conf, 将新的内核放到最前面, 运行lilo使之生效.
重新启动, 你将会看到
IPSec running under FreeS/WAN 1.5 will start up
ipsec0 start up
等字样, 如果没有的话, 说明安装不正确, 需要重新安装.
(2). VPN的配置
一。 ipsec.conf 文件 (/etc/ipsec.conf)
现在IPsec已经装好了, 我们需要用它来配置VPN. 典型的, 我们需要两个网关, 不必
关心那个是左边的, 那个是右边的, 只要记住它们是一对, 就好像两个克隆人. 让我们看看下面的例子:
Left Net ===== Left Gate --------------------------- Right Gate ===== Right Net
Internet
有关信息如下:
Left Net: 192.168.1.0/24
Left Gate (internal): 192.168.1.1
Left Gate (external): 100.100.100.100
Left Name: North
Right Net: 192.168.2.0/24
Right Gate (internal): 192.168.2.254
Right Gate (external): 200.200.200.200
Right Name: South
现在需要在ipsec.conf文件里创建连接. 注意通信有很多种情况: Net to Net, Left
Gate to Right Net, Left Net to Right Gate, and Gate to Gate. 每一个情况都必须有一个连
接来处理. 我推荐你在对这些连接命名的时候最好能够反映通信情况. 本例中需要5个
连接, 分别是%default, NorthNet-SouthNet, NorthGate-SouthNet, NorthNet-SouthGate和
NorthGate-SouthGate. 注意名字中不能有空格.配置文件中加入下面内容:
注意%default在文件中已经存在, 它说明了以后的连接所用的加密或认证算法以及密钥和spi等, 一般密钥需要改动. 如下
# defaults for subsequent connection descriptions
conn %default
# How persistent to be in (re)keying negotiations (0 means very).
keyingtries=0
# Parameters for manual-keying testing (DONT USE OPERATIONALLY).
spi=0x200
esp=3des-md5-96
espenckey=0x01234567_89abcdef_02468ace_13579bdf_12345678_9abcdef0
espauthkey=0x12345678_9abcdef0_2468ace0_13579bdf
然后加入下面的新连接
conn NorthNet-SouthNet
left=100.100.100.100
leftsubnet=192.168.1.0/24
leftfirewall=yes
right=200.200.200.200
rightsubnet=192.168.2.0/24
rightfirewall=yes
conn NorthGate-SouthNet
left=100.100.100.100
right=200.200.200.200
rightsubnet=192.168.2.0/24
rightfirewall=yes
conn NorthNet-SouthGate
left=100.100.100.100
leftsubnet=192.168.1.0/24
leftfirewall=yes
right=200.200.200.200
conn SouthGate-NorthGate
left=100.100.100.100
right=200.200.200.200
注意本文件中在两个网关设置了防火墙, 这是应该的, 几乎没有一个VPN不用防火墙的.
现在我们确定一下在config.setup部分中的变量设置是否正确, 它是如下形式
config setup
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
interfaces选项当用IPsec收发数据包是从哪个网络接口走, 如果设为%defaultroute, 将根据机器的路由表中的路由表项来走. 当然, 你也可以指定网络接口, 例如
interfaces="ipsec0=eth1" (设为第二块网卡, 偏不从第一块走).
Klipsdebug和plutodebug是用来打开或关闭调试选项, 即出了问题到/var/log/messages中加入出错信息.
非常重要的一点!!!两个网关的ipsec.conf的内容必须完全一致(除了config setup部分允许有差异, 如网卡的选则, conn * 部分必须克隆), 否则IPsec不能处理.
二。ipsec.secrets文件
它是两个网关之间的对称加密算法的密钥. 两个网关的这个文件必须完全一致. 如何在两个网关之间传输密钥呢, 这有点像鸡和蛋的问题, 但是不用担心, 数学家发明了更高级的加密算法(非对称加密如RSA), 它是双方有自己的私钥和共同的公钥(坏人可以知道公钥), 但是双方都不知道对方的私钥, 坏人当然也不知道了. 传送密钥的时候, 用自己的私钥和公钥加密, 对方用对方的私钥和公钥解密. 不相信, 去看看RSA算法. 就是这么神奇. 当然, 也可以有别的方法, A地网关的管理人员考到小盘上, 送到B地, 不过嘛, 有点可笑.
这个文件应该如下样子的:
100.100.100.100 200.200.200.200 "jxj52SjRmUu3nVW521Wu135R5k44uU5lR2V3kujT24U1lVumWSkT52Tu11W
Vnm1Vu25lV52k4"
不用解释, 你可以看出怎么配置它了.
三。防火墙设置
假设用ipchains, 下面是左边网关的例子:
ipchains -A input -s 100.100.100.100 -d 0/0 -j ACCEPT
ipchains -A input -s 100.100.100.100 -d 192.168.2.0/24 -j ACCEPT
ipchains -A input -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
它允许从自己发向Internet和右边子网的包, 同时允许从左边子网发往右边子网的包.
注意, ipsec.secrets 和 ipsec.conf 的文件必须设为只有root可读, 普通用户不能访问, 以保证安全.
(3)测试
以上说的手工密钥的加密方式, 自动密钥加密方式以后再说.
首先启动我们加的连接, 如下
[root@Tiger /etc]# ipsec manual --up NorthGate-SouthGate
[root@Tiger /etc]# ipsec manual --up NorthGate-SouthNet
[root@Tiger /etc]# ipsec manual --up NorthNet-SouthGate
[root@Tiger /etc]# ipsec manual --up NorthNet-SouthNet
做完上面的, 然后运行下面的命令:
[root@Tiger /etc]# ipsec look 看看其输出, 如果跟下面的类似就正确了, 否则有问题.
. cs.mynet.net Wed July 8 22:51:45 GAT 2000 -------------------------
192.168.1.0/24 -> 192.168.2.0/24 => [email protected] [email protected]
-------------------------
[email protected] IPv4_Encapsulation: dir=out 192.168.1.1 -> 192.168.2.254
[email protected] 3DES-MD5-96_Encryption: dir=in iv=0xc2cbca5ba42ffbb6 seq=0 bit=0x00000000 win=0 flags=0x0<>
[email protected] 3DES-MD5-96_Encryption: dir=out iv=0xc2cbca5ba42ffbb6 seq=0 bit=0x00000000 win=0 flags=0x0<>
Destination Gateway Genmask Flags MSS Window irtt Iface
192.0.0.0 0.0.0.0 255.255.255.0 U 1500 0 0 eth1
192.168.2.0 192.168.2.254 255.255.255.0 UG 1404 0 0 ipsec0
想知道更多的话, 运行ipsec barf 看看.
现在来检测我们的工作:通过ping另一端的内部网的机器, 用tcpdump来看接口ipsec0的情况.
假设我们在192.168.2.15上, 执行ping 192.168.1.25, 显示
64 bytes from 192.168.1.25: icmp_seq=0 ttl=127 time=45.7 ms
64 bytes from 192.168.1.25: icmp_seq=1 ttl=127 time=45.2 ms
64 bytes from 192.168.1.25: icmp_seq=2 ttl=127 time=45.5 ms
64 bytes from 192.168.1.25: icmp_seq=3 ttl=127 time=43.0 ms
……
说明网通了.
在200.200.200.200上执行tcpdump -i ipsec0
tcpdump: listening on ipsec0
21:02:52.873587 > 200.200.200.200 > 192.168.1.25: icmp: echo request
21:02:52.921596 <192.168.1.25 > 200.200.200.200: icmp: echo reply
21:02:53.890317 > 200.200.200.200 > 192.168.1.25: icmp: echo request
21:02:53.935618 <192.168.1.25 > 200.200.200.200: icmp: echo reply
21:02:54.890277 > 200.200.200.200 > 192.168.1.25: icmp: echo request
21:02:54.936592 <192.168.1.25 > 200.200.200.200: icmp: echo reply
21:02:55.890284 > 200.200.200.200 > 192.168.1.25: icmp: echo request
21:02:55.934099 <192.168.1.25 > 200.200.200.200: icmp: echo reply
……
如果这样, 表示你的VPN已经初步搭起来了, 你可以做进一步的测试, 比如在某个网关内部网上起一个Web Server, 在另一端的内部网访问, 同时试着在Internet上截获数据包, 看看内容有没有加密.
(4)在启动机器时启动连接
因为我们既然设置了VPN, 就希望IPsec连接在网关启动是自动启动. 很简单, 你只需要在
ipsec.conf的config.setup部分加入下面几行:
pluto=yes
plutoload="NorthGate-SouthGate NorthGate-SouthNet NorthNet-SouthGate NorthNet-SouthNet"
plutostart="NorthGate-SouthGate NorthGate-SouthNet NorthNet-SouthGate NorthNet-SouthNet"
plutowait=no
pluto是freeswan的守护进程.
加入这几行之后, 运行ipsec setup restart就生效了, 显示如下:
ipsec_setup: Stopping FreeS/WAN IPSEC... ipsec_setup: Shutting down Pluto:
ipsec_setup: Taking ipsec0 down: ipsec_setup: Misc cleanout:
ipsec_setup: ...FreeS/WAN IPSEC stopped
ipsec_setup: Starting FreeS/WAN IPSEC 1.5... ipsec_setup: KLIPS debug `none
ipsec_setup: KLIPS ipsec0 on eth0 200.200.200.200/255.255.255.0 broadcast 200.200.200.255
ipsec_setup: Disabling core dumps:
ipsec_setup: Starting Pluto (debug `none):
ipsec_setup: Loading Pluto database `NorthGate-SouthGate NorthGate-SouthNet NorthNet-SouthGate NorthNet-SouthNet:
ipsec_setup: Enabling Pluto negotiation:
ipsec_setup: Routing for Pluto conns `NorthGate-SouthGate NorthGate-SouthNet NorthNet-SouthGate NorthNet-SouthNet:
ipsec_setup: Initiating Pluto tunnel `NorthGate-SouthGate (asynchronously):
ipsec_setup: Initiating Pluto tunnel `NorthGate-SouthNet (asynchronously):
ipsec_setup: Initiating Pluto tunnel `NorthNet-SouthGate (asynchronously):
ipsec_ (asynchronously):
ipsec_setup: ...FreeS/WAN IPSEC started
如果这样, 那么已经成功了. 在每次启动Pluto守护进程时, 连接自动启动.
(5)产生真正可用的密钥
前面用的是一个不安全的测试用的key, 这是很不安全的. 因此, 这个key必须在测试结束后改变掉. 一个叫ranbits的程序产生随机字符串, 如下运行:
[root@ Tiger /etc]# ipsec ranbits 192 >> ipsec.secrets
它产生一个192个字符的字符串, 然后在ipsec.secrets加上两个网关的地址就可以了.
5. 参考资料
1) FreeS/Wan Documentation
http://www.freeswan.org/freeswan_trees/freeswan-1.5/doc/
2) OREILLY Virtual Private Networks 2nd Edition
Charlie Scott, Paul Wolfe & Mike Erwin
3) Linux-IPSEC Mailing List
http://www.freeswan.org/mail.html
php爱好者站 http://www.phpfans.net Linux|Apache|IIS.
相关阅读 更多 +