本帖最后由 杨童 于 2023-9-27 17:41 编辑
基于ipsec vpn+双向地址转换的内网穿透方案 应用场景:网络出口没有固定IP地址,但是想把内网的业务系统发布到公网。需要在其他地方有固定公网IP(比如腾讯云或者其他网络出口)。
应用场景举例:石家庄办事处的超融合环境内部署有atrust,ssl等服务,想实现公网用户通过移动vpn接入到办事处内网中访问超融合环境做实验,由于办事处网络出口公网IP不固定,无法直接使用DNAT将超融合内部的业务系统发布到公网。选择通过腾讯云服务器代理访问atrust。
实验案例介绍:当前石家庄办事处超融合环境没有固定公网地址,为了将超融合内部的atrust的地址端口发布到公网,使用腾讯云服务器和超融合内部AF对接ipsec vpn,打通云服务器到办事处内网的网络,然后在云服务器配置双向地址转换,实现将办事处内网的atrust地址端口发布到公网。 本方案实现方式和反向代理类似,都是通过一个单独的具有固定公网IP地址的服务器代理发布内网地址和端口,区别在于---反向代理方式需要在被代理的业务服务器上配置代理客户端和参数,如果有大量业务系统部署在不同服务器设备或者业务系统的软件版本不支持则会出现工作量巨大和无法实现的问题,比如atrust,SSL的系统都不一定能适配代理软件。
Q:腾讯云服务器怎么配置ipsec? A:在linux主机安装strongswan软件以支持配置标准ipsec vpn Q:腾讯云服务器的双转怎么配置? A:iptables自带地址转换功能,分别配置DNAT+SNAT即可实现双转 Q:为什么要配置双转? A:DNAT是为了将服务端口发布,SNAT是为了使报文能匹配感兴趣流,不转换的话报文源地址是移动用户的公网地址,无法匹配ipsec的感兴趣流,需要先SNAT才能匹配到感兴趣流进行ipsec封装 Q:这种内网穿透方式对业务系统服务器有改动么? A:没有任何改动,本方案只会配置改动ipsec网关设备,对业务系统设备来说是无感知的 Q:业务系统发布到公网,安全性怎么保证? A:应避免将普通业务系统端口直接映射到公网,建议通过atrust代理形式发布,即使直接映射出去,也可以用AF做策略保障安全性 Q:两端都使用linux主机部署strongswan来对接ipsec可以吗? A:可以,因为本案例考虑到安全以及配置复杂度所以在内网选择了使用AF Q:做实验直接todesk向日葵开远程访问超融合就行了,为什么折腾内网穿透? A:一般多数实验todesk向日葵确实足够了,但是以atrust举例,其中有对接企业微信,移动安全这种实验,必须要atrust发布到公网,有公网域名才可以完成效果呈现,所以需要内网穿透方案。 实验配置举例: 本案例以石家庄办事处超融合环境举例,实验目标是将超融合内部部署的atrust发布到公网,实现移动用户可以通过atrust访问到办事处内网的SCP等设备。腾讯云有固定公网地址,腾讯云的网络逻辑是外层防火墙公网地址通过DNAT一对一映射给云服务器。 拓扑如下: 配置步骤: 一、IPSEC VPN对接配置 腾讯云服务器操作系统为centos7.6 1、腾讯云服务器配置:关闭SELinux setenforce 0 2、开启数据转发 vi /etc/sysctl.conf //编辑文件,添加如下两行
net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 0
3、关闭icmp重定向 sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print$1"= 0"}' >> /etc/sysctl.conf sysctl -p yum install strongswan -y
5、安装后进入软件配置目录 cd /etc/strongswan/ 6、修改ipsec配置文件 vi /etc/strongswan/ipsec.conf //编辑ipsec.conf文件,填写如下配置 conn sangfor //sangfor为连接名,随意自定义 leftsubnet=10.0.16.0/22 //本端感兴趣流网段 left=10.0.16.6 //本端地址,注意是服务器本身配置的地址,不是腾讯分配的公网地址,因为腾讯云是自带一对一的地址映射的 leftid=@tengxun //本端fqdn标识 rightsubnet=10.0.0.0/24,192.168.31.0/24 //对端感兴趣流网段,多网段中间逗号隔开 rightid=@yangtong //对端fqdn标识 auto=add //连接启动方式add表示启动,start表示自动连接,用于主动发起连接 authby=secret //预共享秘钥方式 esp=3des-sha1-modp1536 //二阶段算法,modp1536对应group5 ike=3des-sha1-modp1536 //一阶段算法 keyexchange=ikev2 //ike版本 7、预共享秘钥配置 vi /etc/strongswan/ipsec.secrets //编辑此秘钥文件 # ipsec.secrets - strongSwan IPsec secrets file : PSK "123456789" //配置秘钥为123456789,此处表示适用于所有连接,可以在冒号前加具体的源目ip,比如1.1.1.1 2.2.2.2 : PSK "123456789" 8、启动和检查vpn状态 每次配置或修改第6、7步的配置文件后都需要重启vpn服务,不然配置不生效 systemctl status strongswan //查看vpn服务状态和隧道建立日志 systemctl start strongswan //启动vpn服务 systemctl restart strongswan //重启vpn服务 9、AF端配置(当前深信服设备只有AF支持ikev2) 此处对端IP地址为腾讯云服务器的公网地址,所有配置与strongswan配置对应即可,没有的就按默认 由于AF端没有固定IP地址,所以选择使用FQDN标识,注意和腾讯云服务器配置对应 AF检查日志,隧道建立成功 以上是IPSEC VPN对接的配置 二、云服务器和AF的NAT配置 1、云服务器的双转配置 DNAT配置 因为腾讯云本身是有地址转换的,服务器本身配置的是私网地址,腾讯云平台自带DNAT将云服务器的私网地址映射成公网地址,在服务器上配置NAT时注意应该使用服务器本身配置的地址,而非公网地址 映射atrust的接入地址,将云服务器本身地址10.0.16.6:44300映射为sdpc的10.0.0.1:443 iptables -t nat -A PREROUTING -i eth0 -d 10.0.16.6 -p tcp --dport 44300 -j DNAT --to-destination 10.0.0.1:443 映射代理网关隧道接入地址,将云服务器本身地址10.0.16.6:44100映射为proxy的10.0.0.2:441 iptables -t nat -A PREROUTING -i eth0 -d 10.0.16.6 -p tcp --dport 44100 -j DNAT --to-destination 10.0.0.2:441 SNAT配置 将报文源是所有目的是办事处私网10.0.0.0/24网段的报文,源地址转换为云服务器接口地址10.0.16.6 iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -d 10.0.0.0/24 -j SNAT --to-source 10.0.16.6 NAT配置检查 iptables -t nat -nvL \\查nat规则表 2、AF的SNAT配置(根据场景可选) 为了保证代理网关到scp的来回路径一致,需要在AF的WAN口配置SNAT,如果没有地址转换,那SCP回包下一跳会直接到出口网关,所以选择在AF的WAN口配置SNAT,将从vpn和LAN区域来的报文进行源转,转换成AF的WAN口地址,这样scp在回包时就会回复给AF了,在源地址转换配置中源区域选择vpn区域即可(vpntun默认没有区域,需要手动配置)
最终用户访问atrust流程: 1、用户连接atrust接入地址43.xxx.xx.136:44300 2、报文到达腾讯云出口,匹配腾讯云自身的DNAT,把目的地址转成了10.0.16.6:44300 3、报文到达云服务器,匹配iptables的DNAT,目的地址转换成10.0.0.1:443 4、报文在被转发前会匹配iptables的SNAT,源地址转换成10.0.16.6 5、匹配ipsec感兴趣流,报文被封装ipsec并转发到办事处的AF上 6、AF解包并转发到atrust设备,报文到达控制中心,访问代理网关同理
PS: 1、云服务器注意做好防护,建议把除了ipsec和atrust接入端口都关掉,特别是ssh 2、出现过连续两天每天固定时间隧道中断然后就建立不起来的问题,af端日志显示超时,云服务器端日志显示找不到ike配置,做过的排查有:1、更换其他AF发起隧道连接,建立正常;2、更换AF地址也建立正常;3、把这个地址给其他AF设备也无法建立。无法确定具体根因,但是修改地址确实能解决问题,之后也没再复现过。 3、ipsec软件除了strongswan还有openswan,在bbs上也有大量案例,但是我照着配置没有配置成功,总是提示ike配置问题,其中的ipsec.conf文件的配置是关键,在这两个软件的官网都有配置案例,其他的参数比如DPD参数都可以通过配置文件修改 4、本案例是以野蛮+nat穿越场景配置的,其他场景可以通过调整ipsec.conf中参数灵活配置 |