博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOS 6.5 ipesc下Openswan实现双IDC互联
阅读量:6157 次
发布时间:2019-06-21

本文共 7347 字,大约阅读时间需要 24 分钟。

一、软件说明
1、Openswan简介   

 Openswan是Linux下IPsec的最佳实现方式,其功能强大,最大程度地保证了数据传输中的安全性、完整性问题。   openswan支持2.0、2.2、2.4以及2.6内核,可以运行在不同的系统平台下,包括X86、X86_64、IA64、MIPS以及ARM。   

 Openswan是开源项目FreeS/WAN停止开发后的后继分支项目,其分裂为两个项目,Openswan与 Strongswan,Openswan由三个主要组件构成:配置工具(ipsec命令脚本)、Key管理工具(pluto)、内核组件(KLIPS/26sec)26sec使用2.6内核内建模块Netkey,用来替代Openswan开发的KLIPS模块,2.4及以下版本内核无Netkey模块支持,只能使用KLIPS。如果你用的是2.6.9以上的内核,推荐使用26sec,可以不用给内核打Nat-T补丁就可以使用NAT,2.6.9以下版本内核的NETKEY存在Bug,推荐使用KLIPS。IPSec差不多是最老的VPN标准了,她的依然很安全,当然是在配置好以后。言下之意,她的配置比较麻烦。本文下面将做说明。 
 因为FreeS/WAN已经在2004年三月停止开发,所以我们使用她的后继项目Openswan来做我们的IPSec实验。其相比FreeS/WAN有个好处,如果使用 26sec 的时候,Openswan不用打补丁,就可以用nat。
2、Openswan的安装  

  因为IPSec工作在网络层,所以需要系统内核态的支持,上面说过,有两个选择,用自带(26sec)的或用Openswan(KLIPS)的,为了方便(如何打补丁和编译内核不是本文讨论的重点),本文使用CentOS源中编译好的Openswan来进行实验。# yum install openswan    如果你想从源码安装,到http://www.openswan.org/code  下载软件包,然后按照包中的说明安装。由于我们使用26sec,所以只要make programs;make install就可以搞定。值得注意的是,现在的Openswan已经内建些个好用的补丁,比如x.509和NAT Traversal的支持,使用起来非常的方便。你也可以用下面的命令来检验你的安装。
# ipsec verify
3、Openswan的认证方式   
Openswan支持许多不同的认证方式,包括 :

RSA keys、   (RSA Signature比较简单)

pre-shared keys、

xauth或x.509证书方式。.


4、Openswan的连接方式:
1)  Network-To-Network方式   本文重点是以此来完成企业需求的

   Network-To-Network方式是把两个网络连接成一个虚拟专用网络。当连接建立后,每个子网的主机都可透明地访问远程子网的主机。

要实现此种连接方式,要满足以下两个条件:  

  I. 每个子网各自拥有一台安装有OpenSWan的主机作为其子网的出口网关或者路由; 

  II.每个子网的IP段不能有叠加

(2)Road Warrior方式  

  当使用Network-To-Network方式时,作为每个子网网关的主机(openswan server)不能像子网内部主机那样透明访问远程子网的主机,也就是说:如果你是一个使用LClient的移动用户,经常出差或是在不同的地点办公,你的LClient将不能用Network-To-Network方式与公司网络进行连接。Road Warrior方式正是为这种情况而设计的,连接建立后,你的LClient就可以连接到远程的网络了。(或者使用SSL vpn的开源产品openvpn来实现出差时候,远程拨号访问的需求)

   更多详情请参见OpenSWan项目主页:http://www.openswan.org
5、本文将从以下几点进行测试
net-to-net模型  **********
1)基于pre-shared keys认证方式(PSK)
2)基于RSA Signature认证方式(RSA数字签名)
3)基于数字证书认证方式(x.509证书)
4)基于XAUTH认证方式(IPSec/Xauth PSK)
RoadWarrior
5)基于pre-shared keys认证方式(PSK)
6)基于RSA Signature认证方式(RSA数字签名)
7)基于数字证书认证方式(x.509证书)
8)基于XAUTH认证方式(IPSec/Xauth PSK)


二、环境说明
1、网络拓扑


2、实验目的


  本使用目的是为了实现client1和client2两个不同地区不同子网的互通。即不同机房,不同网段的内网机器通信


3、实验环境介绍 
设备名称
IP地址信息
所属机房

1
2
3
4
北京
vpnserver1外网   eth0  192.168.2.48     
桥接内网         eth1  192.168.183.1     
VMnet1网关            192.168.2.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
上海
vpnserver2
外网eth0  192.168.2.111     
桥接内网eth1  192.168.233.1     
VMnet2网关     192.168.2.1client1    
 
 
---北京
eth0      192.168.183.44   
VMnet网关      192.168.183.1     
说明,我使用的是网关路由模式,是client机器通过此网关来通信
 
 
 
client2    ----上海
eth0       192.168.233.44   VMnet4
网关       192.168.233.1


     

我本地的网络是192.168.2.0/24网段,为了让VPNServer可以上网,我这边把VPNServer的eht0设定到了192.168.2.0/24网段,并且网卡设定为桥接,其他的网络安装上面表格配置好,这样我们就可以全部远程操作了,把每个主机的主机名修改好,这样便于我们观察。


三、Openswan环境部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1、开启数据转发
# vim /etc/sysctl.conf
 
net.ipv4.ip_forward = 1
 
net.ipv4.conf.default.rp_filter = 0
2、关闭icmp重定向
# sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print$1"= 0"}' >> /etc/sysctl.conf
# sysctl -p
3、关闭SELinux
# setenforce 0
4、安装openswan    (两台vpnserve上面都是同样操作
# yum install openswan lsof -y
# rpm -ql openswan      //查看安装了那些文件。
# ipsec --version       //查看ipsec的版本
[root@vpnserver1 etc]
# ipsec --version  
Linux Openswan U2.6.32
/K2
.6.32-431.el6.x86_64 (netkey)
See `ipsec --copyright' 
for 
copyright information.
这里并没有加载任何的IPsec stack,当启动IPsec后会自动加载系统自带的netkey。
[root@vpnserver1 etc]
#service ipsec start
[root@vpnserver1 etc]
# ipsec verify    //对ipsec进行验证(两台vpnserve上面都是同样操作)

#################

重要说明,如果前边的步骤没做安装文档完成,汇报一下错误,导致接下来的未知错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost ~]
# ipsec verify
Checking your system to see 
if 
IPsec got installed 
and 
started correctly:
Version check 
and 
ipsec on
-
path                            [OK]
Linux Openswan U2.
6.32
/
K(no kernel code presently loaded)
Checking 
for 
IPsec support 
in 
kernel                          [FAILED]
 
SAref kernel support                                  [N
/
A]
Checking that pluto 
is 
running                             [FAILED]
  
whack: Pluto 
is 
not 
running (no 
"/var/run/pluto/pluto.ctl"
)
Two 
or 
more interfaces found, checking IP forwarding              [FAILED]
  
whack: Pluto 
is 
not 
running (no 
"/var/run/pluto/pluto.ctl"
Checking NAT 
and 
MASQUERADEing                              [OK]
Checking 
for 
'ip' 
command                                 OK]
Checking 
/
bin
/
sh 
is 
not 
/
bin
/
dash                            [OK]
Checking 
for 
'iptables' 
command                             [OK]
cat: 
/
etc
/
ipsec.d
/
examples
/
no_oe.conf: No such 
file 
or 
directory
cat: 
/
etc
/
ipsec.d
/
examples
/
no_oe.conf: No such 
file 
or 
directory
Opportunistic Encryption Support


所以, 确保ipsec verify的结果都是如图所示方可继续接下来的配置


我们可以看到openswan监听在UDP的500和4500两个端口,其中500是用来IKE密钥交换协商,4500的NAT-T是nat穿透的


四、Openswan配置(network-to-network)
1、基于pre-shared keys认证方式(PSK)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
在vpnserver1()上面作如下修改,里面的配置参数很多,大家可以参照
man 
ipsec.conf里面的讲解
# vim /etc/ipsec.conf
[root@melin etc]
# grep -Ev  '#|^$' ipsec.conf.psk 
config setup
     
protostack=netkey
     
nat_traversal=
yes
     
virtual_private=
     
oe=off
conn net-to-net
     
ike=aes256-sha2_256;modp2048
     
phase2alg=aes256-sha2_256;modp2048
     
authby=secret      
     
type
=tunnel
     
left=192.168.2.48
     
leftsubnet=192.168.183.0
/24
     
leftid=@test1 
     
leftnexthop=%defaultroute
     
right=192.168.2.111
     
rightsubnet=192.168.233.0
/24
     
rightid=@test2
     
rightnexthop=%defaultroute
     
auto=add  
/add
代表只是添加,但并不会连接,如果为start则代表着启动自动连接.



同样在另一台vpnserver2上面配置和vpnsever1一样的配置文件

即: scp ipsec.conf 192.168.2.111:/etc/ (两台vpnserve上面的ipsec.conf配置文件是一样的)

1
2
3
4
5
6
7
8
9
[root@vpnserver1 etc]
#  vim /etc/ipsec.secrets
192.168.2.48 %any 0.0.0.0 : PSK 
"123"
这个文件的格式为:“Local Ip address”  “remote ip address” : PSK “your key”
在192.168.2.111(vpnserver2)上面修改成如下
[root@vpnserver2 etc]
# vim /etc/ipsec.secrets
192.168.2.111 %any 0.0.0.0 : PSK 
"123"
重启两个vpn服务
# service ipsec restart然后启动一下我们的con
# ipsec auto --up net-to-net  (此处由于ipsec.conf中auto=add,所以需要手动添加)

当我们看到ipsec sa estabilished,就证明我们连接成功了,也可以从中看到一些加密方法,密钥交换参数,我们也可以在配置文件里面添加如下信息进行修改。(记得保持同步到vpnserver2)


ike=aes256-sha2_256;modp2048
phase2alg=aes256-sha2_256;modp2048


然后在clinet1上面去ping对端子网的设备,可以看到如下,但是VPNServer是不能ping通对方子网的设备的。

client1上的操作:

route add  default gw  192.168.183.1



我们可以在任意VPNServer网关上面抓包,查看数据信息

# tcpdump -i eth1 -nn

# tcpdump -i eth0 -nn


其中ESP(Encapsulating Security Payload)就是加密数据。

echo request 

echo  reply

表明既可以发送请求,也可以收到回应包


测试通过后,可以把连接配置中 auto=add    

             更改为: auto=start 

这样当Openswan启动时就可自动进行连接。
到此我们net-to-net基于psk模式的VPN就搭建成功了。


########################################################################################

二、基于RSA Signature认证方式(RSA数字签名)


注:因为我是接着上面的实验进行操作,一直有问题无法解决,后来重新安装了一下,安装下面的流程一次就成功了。
openswan的安装方式同本文刚开始安装一样,下面我们主要讲解配置的不同。

1
2
3
4
5
6
7
8
9
10
11
12
下面提到的L-Server指的是192.168.2..48(VPNServer1),
R-Server指的是192.168.2.111(VPNServer2)。
在L-Server上面进行如下操作生成一个新的RSA密钥对
# ipsec newhostkey --output /etc/ipsec.secrets(可以先不操作)因为这个生成过程太过缓慢,我们使用下面方面进行加速生成
# rm -rf /dev/random# ln -s /dev/urandom /dev/random
# ipsec newhostkey --output /etc/ipsec.secrets
 
在R-Server上面执行一遍
# rm -rf /dev/random# ln -s /dev/urandom /dev/random
# ipsec newhostkey --output /etc/ipsec.secrets
在L-Server上执行ipsec showhostkey                   --left得到L-Server的公钥
# ipsec showhostkey --left


在R-Server上执行ipsec showhostkey --right得到R-Server的公钥
# ipsec showhostkey --right


请记住这两个key,后面会用到,也可以使用重定向加到配置文件里面



L-Sserver:
编辑/etc/ipsec.conf文件
# vim /etc/ipsec.conf


# scp /etc/ipsec.conf 192.168.2.111:/etc  (同步到R-server上)
# service ipsec restart

# ipsec auto --up net-to-net

当我们看到ipsec sa estabilished,就证明我们连接成功了

测试通过后,可以把连接配置中 auto=add    

             更改为: auto=start 

# service ipsec restart

测试:

在一端client1去ping另一端的客户机client2,然后我们在vpnserver上面抓包查看。

我们可以在任意VPNServer1网关上面抓包,查看数据信息

# tcpdump -i eth1 -nn

# tcpdump -i eth0 -nn

此时一切测试成功之后 
# chkconfig ipsec on

基于RSA Signature认证方式(RSA数字签名)搭建完毕。

      本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1704578,如需转载请自行联系原作者

你可能感兴趣的文章
docker的核心原理-cgroup
查看>>
浅析操作系统函数调用原理-附实例
查看>>
直线恒过定点问题
查看>>
Elasticsearch初级语句入门
查看>>
洛谷P4762 [CERC2014]Virus synthesis(回文自动机+dp)
查看>>
利用PIL和Selenium实现页面元素截图
查看>>
cdoj 树上战争(Battle on the tree) Label:并查集?
查看>>
LightOJ 1236 Pairs Forming LCM(LCM为n的数对个数)
查看>>
快速排序算法 JDK6 和JDK 7
查看>>
原生态Ajax(转)
查看>>
页面间对象传递的方法
查看>>
解决Ajax跨域问题:Origin xx is not allowed by Access-Control-Allow-Origin.
查看>>
js闭包
查看>>
Java编程小技巧集锦
查看>>
Codeforces 856C - Eleventh Birthday
查看>>
数字梯形问题
查看>>
Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)...
查看>>
完全数据库脱机备份+完全数据库脱机备份案列
查看>>
New Concept English there (9)
查看>>
ES6——块级作用域
查看>>