欢迎大家分享自己的文档,请点击查阅:分享方法,
如果你喜欢这文章,可以点击文章结尾处百度分享,分享到你的各种社区收藏,或推荐给朋友……
本篇主要涉及实验及其注解,关于Openswan,IPSec,VPN这些理论神马的,暂时放一边吧,太多了,
若是笔者细说,非一时半会儿可以说的清楚,而网上相关的文章亦不少,有兴趣的,自行搜索便是。
实验目标:
1、在两个局域网的网关上构建VPN,使两个局域网内的客户端可以加密通信,并通过各自的网关联网;
2、在笔记本(laptop)到两个网关之间构建VPN,实现跟俩局域网的客户端加密通信;
拓扑图如下:

所有系统皆为rhel5.8 32bit,具体的规划参数如下:
-
Hostname eth0 eth1 Default-Gateway
-
vpn1.mos.com 192.168.0.101/24 172.16.5.11/24 192.168.0.1
-
vpn2.mos.com 192.168.0.102/24 172.16.6.11/24 192.168.0.1
-
laptop.mos.com 192.168.0.103/24 无 192.168.0.1
-
lab1.mos.com 172.16.5.12/24 无 172.16.5.11
-
lab2.mos.com 172.16.6.12/24 无 172.16.6.11
-
Ps: vpn1的eth0、vpn2的eth0和laptop其实都是直接使用的桥接;生成环境中,保证其都有固定的外网IP即可
-
;vpn1的eth1和vpn2的eth1以及lab1和lab2使用的是VMware两个不同的Hostonly网络,保证其默认不能通信即可。
在正式开始之前,再啰嗦一句:本文许多注释都是基于笔者的查阅资料后的个人理解,若有不正之处,欢迎指正(^_^)!
一、在vpn1、vpn2和laptop上,下载并编译安装openswan。
-
# cd ~/download
-
# wget http://ftp.openswan.org/openswan/openswan-2.6.38.tar.gz
-
# tar xf openswan-2.6.38.tar.gz
-
# make programs && make install
二、验证安装,并指定使用的模块,此处在vpn1上做如下操作

-
# vim /etc/ipsec.conf
-
protostack=netkey
-
# service ipsec restart
-
# ipsec --version
-
Linux Openswan U2.6.38/K2.6.18-308.el5PAE (netkey)
-
See `ipsec --copyright' for copyright information.
-
注:关于KLIPS和NETKEY的解说及ipsec的工作原理,见如下两个链接:
-
http://blog.csdn.net/rosetta/article/details/7547308
-
http://www.h3c.com.cn/Service/Channel_Service/Operational_Service/ICG_Technology/201005/675214_30005_0.htm
三、配置vpn1和vpn2的内核转发及禁用源路由校验。(其相关配置在/etc/ipsec.d/examples目录的sysctl.conf中,
有对应模板;以及openswan支持的其他配置模板,在此目录均已给出。)
-
# vim /etc/sysctl.conf
-
net.ipv4.ip_forward = 1
-
net.ipv4.conf.default.rp_filter = 0
-
# sysctl -p
-
Ps: 模板和网上其他的资料中,对于icmp的禁用之类的参数,貌似对实验环境影响不大,且对于此处的深究,
-
笔者亦未得到满意的答案,若有了解,欢迎各种交流哈;实际上,仅开启内核转发,连源路由校验都可以不配置,是完全可以满足当前的实验环境。
四、配置加密传输所需key,并检查是否配置成功,需要注意的是,直接生成key会默认调用/dev/random随机数设备,
一旦系统中断的IRQS的随机数不够用,将会产生大量的等待时间,因此,为了节约时间,我们在生成key之前讲random替换成urandom,以便节约时间。在vpn1上做如下操作:
-
# mv /dev/{random,random.bak}
-
# ln -s /dev/urandom /dev/random

五、构建vpn1和vpn2的vpn加密通信配置,在vpn1上做如下操作
-
# vim /etc/ipsec.conf #在配置文件的基础上,追加如下内容
-
conn v1-2 #给vpn1和vpn2之间的链接命个名字,行首不要有空格,否则报错
-
left=192.168.0.101 #vpn1的IP
-
leftsubnet=172.16.5.0/24 #vpn1的eth1的网段,此网段的主机需要将网关指向eth1
-
leftid=@left #给vpn1命个名字,多个配置段时,切勿重复
-
leftnexthop=%defaultroute #指定网关作为下一条默认路由
-
leftrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UI
-
evNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qA
-
xPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48m
-
qk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUS
-
vU6p8XRPFFuSisziCPNwtj9SqsXx # 第四步生成的加密信息
-
right=192.168.0.102 # vpn2的IP
-
rightsubnet=172.16.6.0/24 #vpn2的eth1的网段,此网段的主机需要将网关指向eth1
-
rightid=@right #给vpn2命个名字,多个配置段时,切勿重复
-
rightnexthop=%defaultroute #指定网关作为下一条默认路由
-
rightrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7U
-
IevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8q
-
AxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48
-
mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktU
-
SvU6p8XRPFFuSisziCPNwtj9SqsXx # 第四步生成的加密信息
-
auto=start #服务启动时自动生效,可配置auto=add,服务器启动后,使用# ipsec auto --up v1-2启动
-
# scp /etc/ipsec.conf 192.168.0.102:/etc/ # vpn1和vpn2的配置一样即可
六、重启vpn1和vpn2的服务,并做简单的测试,在vpn1上做如下操作
-
# service ipsec restart
-
# ssh 192.168.0.102 'service ipsec restart'

# 在 vpn1上使用tcpdump抓包查看结果lab1向lab2发送的ping包


# 在 vpn2上使用tcpdump抓包查看结果lab2向lab1发送的ping包


七、修改vpn1和vpn2的网关和添加iptables策略以及DNS配置,实现各自区域网的PC联网,
(本文使用的河南网通,因此DNS的地址配置需根据您所在的地域来决定。)在vpn1上做如下操作:
-
# vim /etc/resolv.conf #每个节点,均如此配置
-
nameserver 202.102.224.68
-
nameserver 202.102.227.68


八、配置laptop和vpn1、2的加密vpn通道
8.1 在laptop的/etc/ipsec.conf的配置文件上追加如下内容:
-
conn laptop-vpn1 # laptop至vpn1的vpn连接
-
left=192.168.0.103 #laptop的地址,余下解释同上
-
leftid=@client
-
leftrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx
-
right=192.168.0.101
-
rightsubnet=172.16.5.0/24
-
rightid=@left
-
rightrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx
-
auto=start
-
conn laptop-vpn2 # laptop至vpn2的vpn连接
-
left=192.168.0.103
-
leftid=@client
-
leftrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx
-
right=192.168.0.102
-
rightsubnet=172.16.6.0/24
-
rightid=@left1
-
rightrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx
-
auto=start
8.2 在vpn1的/etc/ipesc.conf追加如下内容,注意此处的左右和laptop的左右:
-
conn laptop-vpn1
-
left=192.168.0.101
-
leftid=@left
-
leftsubnet=172.16.5.0/24
-
leftnexthop=%defaultroute
-
leftrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx
-
right=%any # vpn1、2此时为服务端,因此允许任意IP接入
-
rightid=@client
-
rightrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx
-
auto=start
8.3 在vpn2的/etc/ipesc.conf追加如下内容,也注意此处的左右和laptop的左右:
-
conn laptop-vpn2
-
left=192.168.0.102
-
leftid=@left1
-
leftsubnet=172.16.6.0/24
-
leftnexthop=%defaultroute
-
leftrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx
-
right=%any
-
rightid=@client
-
rightrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx
-
auto=start
九、重启vpn1、vpn2和laptop的ipsec服务,做简单测试laptop到两个局域网的联通性。在vpn1上做如下操作:
9.1 重启服务
-
# service ipsec restart
-
# ssh 192.168.0.102 'service ipsec restart'
-
# ssh 192.168.0.103 'service ipsec restart'
9.2 在vpn1和vpn2上依次键入监听命令如下:
-
[root@vpn1 ~]# tcpdump -i eth0 -n host 192.168.0.101 and 192.168.0.103
-
[root@vpn2 ~]# tcpdump -i eth0 -n host 192.168.0.102 and 192.168.0.103
9.3 在laptop上向lab1和lab2发送ping包,检查是否连接生效

9.4 分别检查vpn1和vpn2抓取到的数据包


到此为止,实验目标便已完成;还有不得不说的几个点:
1、使用 # ipsec verify 检查服务时看到的几个 [FAILED] 信息处理:
在/etc/sysctl.conf中添加如下内容,然后使用 sysctl -p 生效,并重启ipsec服务.
-
net.ipv4.conf.all.send_redirects = 0
-
net.ipv4.conf.default.send_redirects = 0
-
net.ipv4.icmp_ignore_bogus_error_responses = 1
-
net.ipv4.conf.default.log_martians = 0
-
net.ipv4.conf.all.log_martians = 0
-
net.ipv4.conf.default.accept_source_route = 0
-
net.ipv4.conf.all.accept_redirects = 0
-
net.ipv4.conf.default.accept_redirects = 0
-
net.core.xfrm_larval_drop = 1

2、本文中的vpn1和2直接的传输是加密的,以及laptop到vpn1、2的传输是加密的,
而vpn1、2到laptop的传输貌似不是加密的,可以在vpn1上做检查,如下图及注释:

注:
# ipsec auto --up conn-name 在/etc/ipsec.conf的auto=add时,需要使用此命令开启vpn通道;
此命令还可用于查看当前加密隧道状态;上图1、2、3、4中可以看到在vpn1-vpn2、laptop -vpn1、vpn2-vpn1、laptop -vpn2都是加密通信,
在1、2、3、4的执行结果的下方明确标出了 ipsec加密通道建立,和使用的加密算法;而5、6是在vpn1和vpn2上执行的,可以看到,并没有显示出加密连接等信息。
解决方案,笔者的思路是将laptop和vpn1|2之间加一个连接,将laptop以网关的形式,但是又觉得太麻烦,各种亲,有没有更好的解决方案?
写文不易,觉得还凑合就给个赞吧(^_^).
本文出自 “自强不息” 博客,请务必保留此出处http://mos1989.blog.51cto.com/4226977/1109450
转载请注明linux系统运维:
http://www.linuxyw.com/linux/Mysql/20130516/369.html |