在centos上搭建openswan

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

在centos上搭建openswan

目的:在阿里云服务器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。网络

  1. Openswan的安装
    由于IPSec工做在网络层,因此须要系统内核态的支持,上面说过,有两个选择,用自带(26sec)的或用Openswan(KLIPS)的,为了方便(如何打补丁和编译内核不是本文讨论的重点),本文使用CentOS源中编译好的Openswan来进行实验。如今的Openswan已经内建些个好用的补丁,好比x.509和NAT Traversal的支持,使用起来很是的方便。你也能够用下面的命令来检验你的安装。# ipsec verify

三、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

安装说明(其中任意一台服务器):

一、开启数据转发

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 0

二、关闭icmp重定向

sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print$1"= 0"}' >> /etc/sysctl.conf

sysctl -p

三、关闭SELinux

setenforce 0

四、安装openswan

yum install openswan lsof -y

rpm -ql openswan //查看安装了那些文件。

ipsec --version //查看ipsec的版本

这里并无加载任何的IPsec stack,当启动IPsec后悔自动加载系统自带的netkey。

service ipsec start

ipsec verify //对ipsec进行验证

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 "**"

重启两个***服务

service ipsec restart

启动咱们建立的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的路由,下一跳地址就写成阿里云的***服务器实例。

相关文章
相关标签/搜索