文档章节

使用Openswan构建企业级VPN

mac_zhao
 mac_zhao
发布于 2015/06/23 14:48
字数 2154
阅读 556
收藏 4

本篇主要涉及实验及其注解,关于Openswan,IPSec,VPN这些理论神马的,暂时放一边吧,太多了,若是笔者细说,非一时半会儿可以说的清楚,而网上相关的文章亦不少,有兴趣的,自行搜索便是。

实验目标:

1、在两个局域网的网关上构建VPN,使两个局域网内的客户端可以加密通信,并通过各自的网关联网;

2、在笔记本(laptop)到两个网关之间构建VPN,实现跟俩局域网的客户端加密通信;

拓扑图如下:

clip_image001

所有系统皆为rhel5.8 32bit,具体的规划参数如下:


  
  
  1. Hostname       eth0               eth1             Default-Gateway 
  2. vpn1.mos.com   192.168.0.101/24   172.16.5.11/24   192.168.0.1 
  3. vpn2.mos.com   192.168.0.102/24   172.16.6.11/24   192.168.0.1 
  4. laptop.mos.com 192.168.0.103/24   无               192.168.0.1 
  5. lab1.mos.com   172.16.5.12/24     无               172.16.5.11 
  6. lab2.mos.com   172.16.6.12/24     无               172.16.6.11 
  7. Ps: vpn1的eth0、vpn2的eth0和laptop其实都是直接使用的桥接;生成环境中,保证其都有固定的外网IP即可;vpn1的eth1和vpn2的eth1以及lab1和lab2使用的是VMware两个不同的Hostonly网络,保证其默认不能通信即可。 

   在正式开始之前,再啰嗦一句:本文许多注释都是基于笔者的查阅资料后的个人理解,若有不正之处,欢迎指正(^_^)! 

一、在vpn1、vpn2和laptop上,下载并编译安装openswan。


  
  
  1. # cd ~/download 
  2. # wget http://ftp.openswan.org/openswan/openswan-2.6.38.tar.gz 
  3. # tar xf openswan-2.6.38.tar.gz 
  4. # make programs && make install 

二、验证安装,并指定使用的模块,此处在vpn1上做如下操作

clip_image003


  
  
  1. # vim /etc/ipsec.conf 
  2.     protostack=netkey 
  3. # service ipsec restart 
  4. # ipsec --version 
  5. Linux Openswan U2.6.38/K2.6.18-308.el5PAE (netkey) 
  6. See `ipsec --copyright' for copyright information. 
  7. 注:关于KLIPS和NETKEY的解说及ipsec的工作原理,见如下两个链接: 
  8. http://blog.csdn.net/rosetta/article/details/7547308 
  9. 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支持的其他配置模板,在此目录均已给出。)


  
  
  1. # vim /etc/sysctl.conf 
  2. net.ipv4.ip_forward = 1 
  3. net.ipv4.conf.default.rp_filter = 0 
  4. # sysctl -p 
  5. Ps: 模板和网上其他的资料中,对于icmp的禁用之类的参数,貌似对实验环境影响不大,且对于此处的深究,笔者亦未得到满意的答案,若有了解,欢迎各种交流哈;实际上,仅开启内核转发,连源路由校验都可以不配置,是完全可以满足当前的实验环境。 

四、配置加 密传输所需key,并检查是否配置成功,需要注意的是,直接生成key会默认调用/dev/random随机数设备,一旦系统中断的IRQS的随机数不够 用,将会产生大量的等待时间,因此,为了节约时间,我们在生成key之前讲random替换成urandom,以便节约时间。在vpn1上做如下操作:


  
  
  1. # mv /dev/{random,random.bak} 
  2. # ln -s /dev/urandom /dev/random 

clip_image005

五、构建vpn1和vpn2的vpn加密通信配置,在vpn1上做如下操作


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

六、重启vpn1和vpn2的服务,并做简单的测试,在vpn1上做如下操作


  
  
  1. # service ipsec restart 
  2. # ssh 192.168.0.102 'service ipsec restart' 

clip_image007

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

clip_image009

clip_image011

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

clip_image013

clip_image015

七、修改vpn1和vpn2的网关和添加iptables策略以及DNS配置,实现各自区域网的PC联网,(本文使用的河南网通,因此DNS的地址配置需根据您所在的地域来决定。)在vpn1上做如下操作:


  
  
  1. # vim /etc/resolv.conf  #每个节点,均如此配置 
  2. nameserver 202.102.224.68 
  3. nameserver 202.102.227.68 

clip_image017

clip_image019

八、配置laptop和vpn1、2的加密vpn通道

8.1 在laptop的/etc/ipsec.conf的配置文件上追加如下内容:


  
  
  1. conn laptop-vpn1  # laptop至vpn1的vpn连接 
  2.     left=192.168.0.103      #laptop的地址,余下解释同上 
  3.     leftid=@client 
  4.     leftrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx 
  5.     right=192.168.0.101 
  6.     rightsubnet=172.16.5.0/24 
  7.     rightid=@left 
  8.     rightrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx 
  9.     auto=start 
  10. conn laptop-vpn2  # laptop至vpn2的vpn连接 
  11.     left=192.168.0.103 
  12.     leftid=@client 
  13.     leftrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx 
  14.     right=192.168.0.102 
  15.     rightsubnet=172.16.6.0/24 
  16.     rightid=@left1 
  17.     rightrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx 
  18.     auto=start 

8.2 在vpn1的/etc/ipesc.conf追加如下内容,注意此处的左右和laptop的左右:


  
  
  1. conn laptop-vpn1 
  2.     left=192.168.0.101 
  3.     leftid=@left 
  4.     leftsubnet=172.16.5.0/24 
  5.     leftnexthop=%defaultroute 
  6.     leftrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx 
  7.     right=%any      # vpn1、2此时为服务端,因此允许任意IP接入 
  8.     rightid=@client 
  9.     rightrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx 
  10.     auto=start 

8.3 在vpn2的/etc/ipesc.conf追加如下内容,也注意此处的左右和laptop的左右:


  
  
  1. conn laptop-vpn2 
  2.     left=192.168.0.102 
  3.     leftid=@left1 
  4.     leftsubnet=172.16.6.0/24 
  5.     leftnexthop=%defaultroute 
  6.     leftrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx 
  7.     right=%any     
  8.     rightid=@client 
  9.     rightrsasigkey=0sAQNzAjw65BpbQDBkA4KmsI3ruo4UwXC6mPFnXD6kFFXJzwtCy6pwAvLPZ8+/WULV7UIevNQBLkRlTeo/gpIMAFrvmpU+cDIMTQz5FOgQy235/AvjnRKBeLjtCcu3dXykBEE2NSlrWWSDkkyyBFqzIlDVjub8qAxPZiy7gn/uCq/EtTgB9p/Vo+3YkI6XgpxwDmbYS0IX+8BHc9NVs/o71VGzQ3B9QmIPnuhenawVTMB0lnWDpDol2Z48mqk7p9qn7Mxm+9XgfJL3GQTAvWRAIqVniDC2UDtY2qRFsBHSs2rGPIzmkUrpUH2bpcjEI14rnwzmpP5/RrWPt7y4ktUSvU6p8XRPFFuSisziCPNwtj9SqsXx 
  10.     auto=start 

九、重启vpn1、vpn2和laptop的ipsec服务,做简单测试laptop到两个局域网的联通性。在vpn1上做如下操作:

9.1 重启服务


  
  
  1. # service ipsec restart 
  2. # ssh 192.168.0.102 'service ipsec restart' 
  3. # ssh 192.168.0.103 'service ipsec restart' 

9.2 在vpn1和vpn2上依次键入监听命令如下:


  
  
  1. [root@vpn1 ~]# tcpdump -i eth0 -n host 192.168.0.101 and 192.168.0.103 
  2. [root@vpn2 ~]# tcpdump -i eth0 -n host 192.168.0.102 and 192.168.0.103 

9.3 在laptop上向lab1和lab2发送ping包,检查是否连接生效

clip_image021

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

clip_image023

clip_image025

 

到此为止,实验目标便已完成;还有不得不说的几个点:

1、使用 # ipsec verify 检查服务时看到的几个 [FAILED] 信息处理:

在/etc/sysctl.conf中添加如下内容,然后使用 sysctl -p 生效,并重启ipsec服务.


  
  
  1. net.ipv4.conf.all.send_redirects = 0 
  2. net.ipv4.conf.default.send_redirects = 0 
  3. net.ipv4.icmp_ignore_bogus_error_responses = 1 
  4. net.ipv4.conf.default.log_martians = 0 
  5. net.ipv4.conf.all.log_martians = 0 
  6. net.ipv4.conf.default.accept_source_route = 0 
  7. net.ipv4.conf.all.accept_redirects = 0 
  8. net.ipv4.conf.default.accept_redirects = 0 
  9. net.core.xfrm_larval_drop = 1 

clip_image027

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

clip_image029

注:

# 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以网关的形式,但是又觉得太麻烦,各种亲,有没有更好的解决方案?

 

写文不易,觉得还凑合就给个赞吧(^_^).

© 著作权归作者所有

共有 人打赏支持
mac_zhao
粉丝 42
博文 249
码字总数 304671
作品 0
普陀
程序员
私信 提问
在centos上使用openswan搭建IPSecVPN

背景:因公司业务逐渐迁移到阿里云上,所以有需求搭建一条从公司内容到阿里云的VPN隧道,因环境限制并未有vpn设备可以使用,所以计划在linux上搭建ipsecvpn来实现该功能。拓扑图如下: 目的:...

plpy
2017/03/02
0
0
在centos上搭建openswan

背景:因公司业务逐渐迁移到阿里云上,所以有需求搭建一条从公司内容到阿里云的VPN隧道,因环境限制并未有vpn设备可以使用,所以计划在linux上搭建ipsecvpn来实现该功能。拓扑图如下: 目的:...

jason__zhao
2017/12/24
0
0
在linux企业版上配置l2tp+ipsec (采用x.509证书进行认证)的详细过程

在有2块网卡的(可以是虚拟网卡)linux上安装openswan,该linux就变成了一个ipsec vpn网关,网关后面是各种应用服务器。将其作为服务器端,可以进行两种配置(net to net或者是roadworrier)...

范堡
2009/05/05
1K
0
openswan搭建ipsec vpn 仅network-to-network方式

Centos6.4 openswan 搭建使用方法 直接放图好像有点问题,上传了doc文件,有兴趣的可以下载看看 一.Openswan介绍 Openswan简介请自行百度。 二、openswan的配置介绍 1. OpenSWan主要配置文件...

shujian1200
2014/01/07
0
0
CentOS6.8下搭建Ipsec+L2TP VPN服务

第二层隧道协议L2TP(Layer 2 Tunneling Protocol)是一种工业标准的Internet隧道协议,它使用UDP的1701端口进行通信。L2TP本身并没有任何加密,但是我们可以使用IPSec对L2TP包进行加密。 l2tp...

justin_peng
2016/12/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

降压变换器 Buck

特点 输入输出极性相同。 工作过程 在 MOS 导通时,输入电源通过 L 和 C 滤波后向负载端提供电流;当 MOS 断开后,L 通过二极管续流,保持负载电流连续。输出电压因为占空比的作用,不会超过...

colinux
今天
1
0
Apache日志不记录访问静态文件,访问日志切割,静态元素过期时间设置

Apache配置不记录访问静态文件的日志 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 vhost原始配置 <VirtualHost *:80> ServerAdmin test@163.com DocumentRoo...

野雪球
今天
3
0
聊聊storm的ICommitterTridentSpout

序 本文主要研究一下storm的ICommitterTridentSpout ICommitterTridentSpout storm-core-1.2.2-sources.jar!/org/apache/storm/trident/spout/ICommitterTridentSpout.java public interface......

go4it
今天
4
0
Ubuntu常用操作

查看端口号 netstat -anp |grep 端口号 查看已使用端口情况 netstat -nultp(此处不用加端口号) netstat -anp |grep 82查看82端口的使用情况 查找被占用的端口: netstat -tln netstat -tl...

hc321
昨天
3
0
网站cdn的静态资源突然访问变的缓慢,问题排查流程

1.首先我查看了一下是否自己的网络问题,通过对比其他资源的访问速度和下载速度,确认不是 2.通过ping 和 tracert 判断cdn域名能否正常访问,(最后回想感觉这一步可以省略,因为每次最终能访...

小海bug
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部