公司ERP系统是放在IDC机房,租用的别人的云服务器,因云服务器供应商的限制,不能直接拉电路专线,又因服务器数量不够,remoteapp方案也放弃了,只能通过软件×××方案来解决问题,之前搭建了一个open***,使用route模式,但是用户反馈使用效果并不理想,每次反馈ERP系统保存比较慢,其他操作没有问题,想过各种办法去优化Open***,比如去掉认证,使用静态密钥方式,都没能解决,其真正的原因应该是open***是在用户态,内部经过多次加密和解密过程,性能自然不是最佳;后来直接改成桥接模式,速度快了不少,但是使用的是跟云服务器供应商服务网络,云服务商不接受这种模式,因此,最终选择了openswan来解决这个问题,openswan的netkey又称为26sec,其实现是在内核实现,主要负责控制管理SA及密钥,同时处理数据包的加密和解密工作,因此其性能更优越;

1、 目标

在防火墙内部,通过两台Linux系统,搭建ipsec ***,连通办公室和IDC机房的网络,并解决办公室人员访问IDC机房的金蝶ERP系统,所出现的保存慢的问题;

2、 网络拓扑图

Openswan企业实战之ipsec ***加速ERP系统_第1张图片

3、 环境说明

软件环境:centos 7.3      openswan 2.6.50

序号

名称

内网IP

外网IP

备注

1

IDC机房防火墙

10.99.0.254/24 

固定IP(略)

需要开放UDP4500/500端口

2

IDC机房×××服务器

10.99.0.16/24


需要开放UDP4500/500端口

3

办公室防火墙

192.168.1.1/24

动态IP (略)


4

办公是×××服务器

192.168.1.252/24



注:

l  ***服务器安装了centos系统,全部都是在防火墙后面,对于openswan来说,其仍然是路由到防火墙,再通过防火墙的NAT去访问外网的,因此,对于服务器来说,并不需要开启iptables的NAT功能,但是Iptables功能需要开启,并开放UDP 4500/500 端口(如果开启iptables的NAT功能也可以,但是经过多层NAT,这样会严重影响×××的性能);

l  openswan目前网上系统的资料比较少,对于百度的搜索信息要注意甄别,多思考,即使部署成功了,也要回去反复斟酌,配置是否是最优的,推荐可以查看源码包下面的openswan/docs目录下的说明,加深理解;

l  本文案例是,IDC机房拥有固定IP,办公室是动态IP,因此,对于防火墙来说,只需要开启IDC机房这边的4500/500端口,办公室这边无需开放端口;

l  对于DPD功能,当隧道空闲的时候(建立,但是在dpddelay=N1之内没有流量),一端或两端发送了hello消息(R_U_THERE)和另一端回复确认信息(R_U_THERE_ACK),如果没有收到响应,直至dpdtimeout=N2的时间,仍然没有流量或者收到R_U_THERE_ACK,那么会认为对端死亡,删除SA并从路由表中删除相关联的路由;建议开启此功能,并且两边同时开启和保持数据一致,如果只是开启一端,另一端便于以默认参数开启,这点很重要,网络上的资料有点不对; tunnel模式,建议dpdaction设置为hold;transport模式,dpdaction设置为clear;

4、 准备工作

禁用重定向

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

开启路由转发

Vi /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0

sysctl –p  #生效

配置iptables防火墙

vi /etc/sysconfig/iptables    增加如下内容,开放UDP 4500和500端口

-A INPUT -p udp -m state --state NEW -m udp --dport500 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport4500 -j ACCEPT

注:以上配置都需要在两台×××服务器上 进行操作;


最后,开放IDC机房的外部硬件防火墙的 UDP 4500/500端口(即目的端口映射)

5、 安装

yum install bison flex xmlto perl-podlators 
tar –zxvf openswan-2.6.50.tar.gz
cd openswan-2.6.50
make programs
make install

注: 这里使用openswan的netkey,centos7.3的内核是3.10,本身已经支持了nat-T功能

使用ipsec verify命令 验证openswan的安装是否Ok

Openswan企业实战之ipsec ***加速ERP系统_第2张图片

红色方框处,不要在意,开启Ipsec服务之后,就会显示OK

6、 配置

Openswan有两个主要的配置文件:

/etc/ipsec.conf 主要配置文件,settings和connections,

/etc/ipsec.secrets主要用来保存RSA Keys和preshared secrets (PSKs)

 

Openswan支持许多不同的安全认证方式,包括RSA keys、pre-shared keys或x.509证书方式,通常推荐使用RSA Keys,安全性高;但是这里选择使用pre-shared keys,简单而且性能高;

 

IDC机房

×××服务器/etc/ipsec.conf配置如下:

version 2  #版本
config setup   #命名为setup,Ipsec服务启动直接加载
       nat_traversal=yes  #开启NAT-T穿透
       virtual_private=%v4:192.168.1.0/24,%v4:10.99.0.0/24  #指定哪些子网通过×××,如果不允许,在%前面加上!;%v4 表示为ipv4
       protostack=netkey    #使用netkey
       interfaces="%defaultroute"  #ipsec ***使用的虚拟接口和实接口,格式是"virtual=physicalvirtual=physical ...",这里设置为默认路由出去的接口
       oe=off   #此选项已经被忽略。它用于确定是否启用机会加密;
       plutostderrlog=/var/log/pluto.log  #指定日志保存路径
       plutodebug=all    #记录多少调试输出,默认是none,这里便于设置为all,便于追踪,调试OK,可以设置为none;
 
conn idc-to-office  #设置connection,并命名为idc-to-office
       type=tunnel   #隧道模式,支持host-to-host,host-to-network和network-to-network;如果设置transport,表示为host-to-host传输模式;
       authby=secret #配置安全网关如何认证,默认是rsa,这里使用共享密钥
       auto=start    #start是表示connection随Ipsec服务器启动而自动连接;add不会随ipsec服务启动而启动,需要ipsec auto up idc-to-office启动connection;
       dpddelay=15   #每15秒钟检测一次,默认是30秒
       dpdtimeout=60   #闲置超时时间,这个时间内没有流量,没有响应,就表示对等实体已经死亡,并删除SA,默认120秒;
       dpdaction=hold   #eroute进入hold,等待对方的return信息;tunnel模式,推荐设置为hold;transport模式,推荐设置为clear;
       pfs=no  #无论设置为yes,还是no,都会启用;
       ike=aes128-sha1;modp1024  #第一阶段算法参数
       ikelifetime=86400s   #第一阶段生存时间
       keyexchange=ike     
       phase2=esp
       phase2alg=aes128-sha1;modp1024   #指定第二阶段的算法参数;
       salifetime=3600s   #第二阶段生存时间
       aggrmode=no   #一般模式,设置yes,就是野蛮模式; 
       left=10.99.0.16   #本机服务器提供对外(通常是指Internet)服务的接口,网上大多说是公网IP,这个说法对于服务器是直接对接Internet,并作为内网的网关的时候,是对的;但是,对于本例,在防火墙内部,就是不对的,其IP仍然是私网地址,所以,这点很重要,要认真区分;
       leftid=@szidc    #设置身份ID,如果是域名,使用@指定;如果用IP,直接使用IP地址接口,不需要@符号;
       leftsubnet=10.99.0.0/24   #表示本地的子网网络,如果有多个网段就有leftsubnets
       leftnexthop=%defaultroute   #默认路由
       right=%any    #对端公网IP,无固定IP或不确定IP,设置为%any,这里必须设置为公网IP,跟left有些不同;
       rightsubnet=192.168.1.0/24   #对端本地的子网网络
       rightnexthop=%defaultroute   #默认路由
注: 通常理解,left 表示本地网络,right表示对端网络;

/etc/ipsec.secrets配置文件内容如下

%any %any : PSK "a14RbmJhq464"    #第一个%any表示外网IP,第二个%any表示对端外网IP,如果只有一个×××通道的话,这里可以都设置为%any; 如果有多个×××通道,需要指定IP地址,每一行代表一个;

办公室网络

/etc/ipsec.conf配置文件如下:

version 2   #版本
config setup
        nat_traversal=yes  #开启nat-t 穿透
       virtual_private=%v4:192.168.1.0/24,%v4:10.99.0.0/24  #
        protostack=netkey
        interfaces="%defaultroute"
        oe=off
        plutostderrlog=/var/log/pluto.log
        plutodebug=all  #调试完毕,改为none
 
connidc-to-office
        type=tunnel
        authby=secret
        auto=start  #注意跟前面IDC机房的配置比较区别,前面是add,这里设置为start
        pfs=no
        keyexchange=ike
        phase2=esp
        ike=aes128-sha1;modp1024
        ikelifetime=86400s
        phase2alg=aes128-sha1;modp1024
        salifetime=3600s
        aggrmode=no
        dpddelay=15
        dpdtimeout=60
        dpdaction=hold
        right=211.154.139.8   #注意与IDC机房的配置比较
        rightsubnet=10.99.0.0/24   #注意与IDC机房的配置比较
        rightid=@szidc   #注意与IDC机房的配置比较
        rightnexthop=%defaultroute   #注意与IDC机房的配置比较
        left=192.168.1.252  #注意与IDC机房的配置比较
        leftsubnet=192.168.1.0/24   #注意与IDC机房的配置比较
        #lefttid=@right
        leftnexthop=%defaultroute   #注意与IDC机房的配置比较

/etc/ipsec.secrets配置文件内容如下:

%any %any : PSK "a14RbmJhq464"  #注意密钥要跟IDC机房的一致

7、 启动服务

/etc/init.d/ipsec start   #启动ipsec服务,先启动IDC机房服务器,后启动办公室这边的服务器;

8、 检测***tunnel状态

/etc/init.d/ipsec status    #检测ipsec tunnel是否建立起来

结果如下:

spacer.gif

表示×××通道已经建立起来

 

测试是否能够Ping通

spacer.gif