公司ERP系统是放在IDC机房,租用的别人的云服务器,因云服务器供应商的限制,不能直接拉电路专线,又因服务器数量不够,remoteapp方案也放弃了,只能通过软件×××方案来解决问题,之前搭建了一个openvpn,使用route模式,但是用户反馈使用效果并不理想,每次反馈ERP系统保存比较慢,其他操作没有问题,想过各种办法去优化Openvpn,比如去掉认证,使用静态密钥方式,都没能解决,其真正的原因应该是openvpn是在用户态,内部经过多次加密和解密过程,性能自然不是最佳;后来直接改成桥接模式,速度快了不少,但是使用的是跟云服务器供应商服务网络,云服务商不接受这种模式,因此,最终选择了openswan来解决这个问题,openswan的netkey又称为26sec,其实现是在内核实现,主要负责控制管理SA及密钥,同时处理数据包的加密和解密工作,因此其性能更优越;
1、 目标在防火墙内部,通过两台Linux系统,搭建ipsec vpn,连通办公室和IDC机房的网络,并解决办公室人员访问IDC机房的金蝶ERP系统,所出现的保存慢的问题;
2、 网络拓扑图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 vpn服务器安装了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
红色方框处,不要在意,开启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 vpn使用的虚拟接口和实接口,格式是"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、 检测vpn的tunnel状态/etc/init.d/ipsec status #检测ipsec tunnel是否建立起来
结果如下:
表示×××通道已经建立起来
测试是否能够Ping通