背景:因公司业务逐渐迁移到阿里云上,因此有需求搭建一条从公司内容到阿里云的×××隧道,因环境限制并未有***设备可使用,因此计划在linux上搭建ipsec***来实现该功能。拓扑图以下:linux
目的:在阿里云服务器172.16.0.11和公司服务器192.168.6.79之间创建一条ipsec ***隧道。实现两端私网网段的互访。其中私网地址分别是:172.16.0.11/16和192.168.0.0/16。vim
服务器版本:CentOS release 6.5 (Final)centos
软件说明:安全
1. Openswan简介
Openswan是Linux下IPsec的最佳实现方式,其功能强大,最大程度地保证了数据传输中的安全性、完整性问题。
Openswan支持2.0、2.二、2.4以及2.6内核,能够运行在不一样的系统平台下,包括X8六、X86_6四、IA6四、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差很少是最老的×××标准了,她的依然很安全,固然是在配置好之后。言下之意,她的配置比较麻烦。本文下面将作说明。服务器
由于FreeS/WAN已经在2004年三月中止开发,因此咱们使用她的后继项目Openswan来作咱们的IPSec实验。其相比FreeS/WAN有个好处,若是使用 26sec 的时候,Openswan不用打补丁,就能够用nat。网络
三、Openswan的认证方式app
Openswan支持许多不一样的认证方式,包括RSA keys、pre-shared keys、xauth或x.509证书方式。本文使用最简单的口令PSK认证。ide
四、Openswan的链接方式:工具
Network-To-Network方式
Network-To-Network方式是把两个网络链接成一个虚拟专用网络。当链接创建后,每一个子网的主机均可透明地访问远程子网的主机。要实现此种链接方式,要知足如下两个条件:
I. 每一个子网各自拥有一台安装有OpenSWan的主机做为其子网的出口网关或者路由;
II.每一个子网的IP段不能有叠加ui
安装说明(其中任意一台服务器):
一、开启数据转发
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
二、关闭icmp重定向
三、关闭SELinux
四、安装openswan
这里并无加载任何的IPsec stack,当启动IPsec后悔自动加载系统自带的netkey。
wKiom1i2w1TAj4coAABpdBFJFWs798.png
#netstat -nplu //查看监听端口
wKioL1i2w7mCVyf-AABbAppC8Ww358.png
咱们能够看到openswan监听在UDP的500和4500两个端口,其中500是用来IKE密钥交换协商,4500的NAT-T是nat穿透的。
Openswan配置(network-to-network):
version 2
config setup
plutostderrlog=/var/log/pluto.log //指定***的日志生成文件
protostack=netkey
nat_traversal=yes
virtual_private=
oe=off
conn net-to-net //指定该***链接的名字
authby=secret
type=tunnel
left=192.168.6.79 //left是指本地主机。br/>leftsubnet=192.168.0.0/16
leftid=@test2
leftnexthop=%defaultroute
right=1.1.1.1 //right是指对端主机。br/>rightsubnet=172.16.0.0/16
rightid=@test1
rightnexthop=%defaultroute
auto=start //start表示自动链接***,add表明须要手动链接
一样的另一台***server上面,信息和上面同样,只要注意到left和right便可。
vim /etc/ipsec.secrets
192.168.6.79 0.0.0.0 : PSK "**"
重启两个***服务
启动咱们建立的con名字
#ipsec auto --up net-to-net /当配置的auto=add 时,才须要手动启动,配置为start则不须要。
能够进入日志文件查看,链接日志
vim /var/log/pluto.log
Feb 23 20:11:44: "net-to-net" #1: transition from state STATE_MAIN_I2 to state STATE_MAIN_I3
Feb 23 20:11:44: "net-to-net" #1: STATE_MAIN_I3: sent MI3, expecting MR3
Feb 23 20:11:46: packet from 123.56.12.108:500: received Vendor ID payload [Dead Peer Detection]
Feb 23 20:11:46: packet from 123.56.12.108:500: received Vendor ID payload [FRAGMENTATION]
Feb 23 20:11:46: packet from 123.56.12.108:500: received Vendor ID payload [RFC 3947]
Feb 23 20:11:46: packet from 123.56.12.108:500: ignoring Vendor ID payload [draft-ietf-ipsec-nat-t-ike-03]
Feb 23 20:11:46: packet from 123.56.12.108:500: ignoring Vendor ID payload [draft-ietf-ipsec-nat-t-ike-02_n]
Feb 23 20:11:46: packet from 123.56.12.108:500: ignoring Vendor ID payload [draft-ietf-ipsec-nat-t-ike-02]
Feb 23 20:11:46: "net-to-net" #2: enabling possible NAT-traversal with method RFC 3947 (NAT-Traversal)
Feb 23 20:11:46: "net-to-net" #2: responding to Main Mode
Feb 23 20:11:46: "net-to-net" #2: transition from state STATE_MAIN_R0 to state STATE_MAIN_R1
Feb 23 20:11:46: "net-to-net" #2: STATE_MAIN_R1: sent MR1, expecting MI2
Feb 23 20:11:46: "net-to-net" #2: NAT-Traversal: Result using RFC 3947 (NAT-Traversal) sender port 500: I am behind NAT+peer behind NAT
Feb 23 20:11:46: "net-to-net" #2: transition from state STATE_MAIN_R1 to state STATE_MAIN_R2
Feb 23 20:11:46: "net-to-net" #2: STATE_MAIN_R2: sent MR2, expecting MI3
Feb 23 20:11:46: "net-to-net" #2: Main mode peer ID is ID_FQDN: '@test1'
Feb 23 20:11:46: "net-to-net" #2: transition from state STATE_MAIN_R2 to state STATE_MAIN_R3
Feb 23 20:11:46: "net-to-net" #2: new NAT mapping for #2, was 123.56.12.108:500, now 123.56.12.108:4500
Feb 23 20:11:46: "net-to-net" #2: STATE_MAIN_R3: sent MR3, ISAKMP SA established {auth=PRESHARED_KEY cipher=aes_256 integ=sha group=MODP2048}
Feb 23 20:11:46: "net-to-net" #2: the peer proposed: 192.168.0.0/16:0/0 -> 172.16.0.0/16:0/0
Feb 23 20:11:46: "net-to-net" #3: responding to Quick Mode proposal {msgid:43be8e61}
Feb 23 20:11:46: "net-to-net" #3: us: 192.168.0.0/16===192.168.6.79<192.168.6.79>[@test2]
Feb 23 20:11:46: "net-to-net" #3: them: 123.56.12.108<123.56.12.108>[@test1]===172.16.0.0/16
Feb 23 20:11:46: "net-to-net" #3: transition from state STATE_QUICK_R0 to state STATE_QUICK_R1
Feb 23 20:11:46: "net-to-net" #3: STATE_QUICK_R1: sent QR1, inbound IPsec SA installed, expecting QI2 tunnel mode {ESP/NAT=>0xac8224cd <0x7f04b45c xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=123.56.12.108:4500 DPD=passive}
Feb 23 20:11:46: "net-to-net" #3: transition from state STATE_QUICK_R1 to state STATE_QUICK_R2
Feb 23 20:11:46: "net-to-net" #3: STATE_QUICK_R2: IPsec SA established tunnel mode {ESP/NAT=>0xac8224cd <0x7f04b45c xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=123.56.12.108:4500 DPD=passive}
Feb 23 20:12:48: "net-to-net" #1: max number of retransmissions (8) reached STATE_MAIN_I3. Possible authentication failure: no acceptable response to our first encrypted message
Feb 23 20:12:48: "net-to-net" #1: deleting state #1 (STATE_MAIN_I3)
当咱们看到ipsec sa estabilished,就证实咱们链接成功了,也能够从中看到一些加密方法,密钥交换参数,咱们也能够在配置文件里面添加以下信息进行修改。
ike=aes256-sha2_256;modp2048
phase2alg=aes256-sha2_256;modp2048
而后在clinet1上面去ping对端子网的设备,能够看到以下,可是×××Server是不能ping通对方子网的设备的。
open***搭建完成后,是不会生成虚拟网卡的,而且路由表也不须要指定。
wKiom1i2x1qQHIL-AABfxXd2RUg814.png
wKioL1i2x47RDwONAAAg-qhEODQ138.png
防火墙配置:
公司***服务器对外提供服务须要配置静态NAT,因此在防火墙上须要为服务器192.168.6.79设置对应的公网ip地址为2.2.2.2,并在策略中放行。
注:本次搭建***服务器整体上还算顺利,主要遇到的两个问题仍是在阿里云上,因为对阿里云的网络结构不太熟悉,因此形成了问题。
阿里云给的公网地址1.1.1.1,实则是弹性IP,至关于公网IP并无配置在虚拟云主机上,而是在阿里云的出口网关上(至关NAT),以前配置的时候,阿里云***服务器的left地址写成了公网地址1.1.1.1,形成链接失败。
阿里云提供的VPC实则是专有网络,内部网络间是作了二层隔离的,内部172.16.0.0/16网段的主机之间默认是能够互访的,但要访问192.168.0.0/16网段是不能够的,即便你在主机上添加了该路由,也是不能访问的。这也是我以前建立完***,链接也成功了,但就是不能访问对端子网的服务器地址。。。解决办法是:在VPC网络中的虚拟路由器的路由表中添加一条到192.168.0.0/24的路由,下一跳地址就写成阿里云的***服务器实例。