基于strongwan在CentOS上搭建IPSEC VPN的问题详解
strongswan搭建ipsec
0x00 背景
需要打通阿里云VPC 网络与本地IDC机房的私有网络,遇到不少问题都没有找到解决方案,在看了不少strongswan的wiki文章后才解决,特此记录下。该网络拓扑伪参数如下:
ali_vpc_network(172.16.0.0/16) <--> ECS(IPSEC Gateway)<--> IDC Firewall(IPSEC Gateway)<--> Local Network(192.168.22.0/24,192.168.24.0/23)
## ECS Internal IP: 172.16.10.1 Elastic IP: 1.1.1.1
## IDC Firewall IP: 192.168.10.1 Public IP: 2.2.2.2
0x01 ECS 部署命令
安装strongswan
yum install epel-release -y
yum install strongswan -y
## 开启ipforward 修改 /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
### 应用配置
sysctl -p
配置 strongswan /etc/strongswan/ipsec.conf
# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
# strictcrlpolicy=yes
# uniqueids = no
charondebug="all"
uniqueids=never
conn %default
authby=psk
type=tunnel
conn office_wire
dpdaction=hold # 意外断开后尝试重连时长
dpddelay=30s # 意外断开后超时时长,只对 IKEv1 起作用
dpdtimeout=60s
fragmentation=yes
keyexchange=ikev1 #IPsec连接使用的IKE协议的版本
left=172.16.10.1
leftsubnet=172.16.0.0/16 #VPC的网段
leftid=1.1.1.1 # Elastic IP
right=2.2.2.2 # IDC public IP
rightsubnet=192.168.22.0/24 #本地的网段
auto=start
ike=3des-md5-modp1024 #IPsec连接中IKE协议的加密算法-认证算法-DH分组
ikelifetime=7200s #IKE协议的SA生命周期
esp=3des-sha1 #IPsec连接中IPsec协议的加密算法-认证算法-DH分组
lifetime=7200s #IPsec协议的SA生命周期
type=tunnel
conn office_wireless
also=office_wire
rightsubnet=192.168.24.0/23 #本地的网段
配置strongswan的psk /etc/strongswan/ipsec.secrets
# ipsec.secrets - strongSwan IPsec secrets file
1.1.1.1 2.2.2.2 : PSK password_placeholder #123456为IPsec连接的预共享密钥,本地IDC侧和VPN网关侧的预共享密钥需一致
启动strongswan
systemctl start strongswan
systemctl enable strongswan
### 查看连接状态
strongswan statusall
## 如果有sa 为up 则建立成功
## 这时候可以ping通
ping 192.168.22.x
如果还需要VPC 网络中 172.16.0.0/16 中的其他ECS也能访问本地IDC的机器,则需要在VPC网络中的路由表中配置 172.16.10.1 为下一跳路由。同时还要还安全组中开启允许local network 的 inbound访问。
0x02 IDC Firewall 配置
这步不多说了,主要的问题在于感兴趣流的配置。一般 访问外网是NAT出去,假设ACL 3010 应用于该NAT outbound,则需要在该3010 中deny所有到 aliyun vpc的流量,同时需要在ipsec policy 中对应的ACL,这里假设是3001中 permit 所有到aliyun vpc的流量。这样才会触发感兴趣流,才能成功建立ike sa & ipsec sa。
0x03 Troubleshooting
- 本地可以ping 通 ECS VPC Gateway,但是无法ping通其他机器
- 可能是ip_forward没开,或者iptables forward policy 为drop,最好改为accept
- 可以ping通,也可建立tcp连接,但是http服务访问不行,或者mysql访问卡住了。一般是mtu的问题
-
可以执行:iptables -t mangle -A FORWARD -o eth0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360
-
或修改/etc/strongswan/strongswan.d/charon/kernel-netlink.conf 中的 mtu为 1360
-
重启strongswan
-
- strongswan无法和本地成功建立连接:
- 因为ECS 是在弹性公网IP下面,ifconfig 是看不到公网IP的,所以配置文件中的left要使用private IP
- strongswan无法建立设置的多个private network cidr
- 这个应该是strongswan的一个bug,在配置文件中使用also参数建立多个private network
- 在Linux上怎么查看已建立的Ipsec policy?
- ip xfrm policy show