使用strongSwan对接FortiGate建立IPsec VPN访问CI服务器问题
排查Arch Linux下strongSwan连接FortiGate VPN后无法访问CI服务器的问题
看起来你在Windows上用FortiClient能正常访问公司CI服务器,但换到Arch Linux用strongSwan连了VPN隧道后,明明隧道看似建立,却碰不到CI服务器。咱们一步步来拆解可能的问题:
1. 先确认IPsec隧道的真实状态
别只靠ipsec restart的输出就判定隧道没问题,得查更细节的运行状态:
- 执行
sudo ipsec statusall,重点看有没有成功建立的Security Association(SA),核对两端的子网配置,确保CI服务器所在的子网被包含在隧道的rightsubnet范围内。 - 再用
sudo ip xfrm policy list检查,确认有没有针对CI服务器子网的路由策略被正确添加——这是流量能进入隧道的核心前提。
2. 检查路由表是否配置正确
有时候strongSwan不会自动添加访问CI服务器的专属路由,导致流量走了普通网卡而非VPN隧道:
- 执行
ip route show,看看CI服务器的IP(或子网)有没有对应的路由条目指向VPN相关的接口/网关。 - 如果没有,手动添加路由试试,比如CI服务器是
192.168.1.100/32,就执行:
或者调整strongSwan配置里的sudo ip route add 192.168.1.100/32 via <VPN网关IP> dev <你的物理网卡名>leftsubnet/rightsubnet参数,让它自动生成正确的路由规则。
3. 验证DNS解析是否正常
Windows下FortiClient通常会自动推送公司的DNS服务器,但Linux下strongSwan可能没配置这一步:
- 先跳过域名,直接用CI服务器的IP访问,比如
curl http://192.168.1.100:8080,如果能通,说明问题出在DNS解析上。 - 解决方法:要么在strongSwan的
ipsec.conf里配置DNS推送(需要服务器端支持),要么手动在/etc/resolv.conf里添加公司的DNS服务器地址。
4. 排查防火墙和NAT规则
Arch Linux的防火墙可能会拦截VPN流量,或者不当的NAT规则导致FortiGate无法正确回包:
- 临时关闭防火墙测试,比如用firewalld的话执行
sudo systemctl stop firewalld,用ufw的话执行sudo ufw disable,如果关闭后能访问,就需要给VPN流量添加专门的放行规则。 - 执行
iptables -t nat -L检查POSTROUTING规则,看看有没有把VPN子网的流量做了SNAT——这会导致FortiGate无法识别你的请求来源,需要删掉这类规则。
5. 匹配FortiGate的加密套件
FortiGate对加密算法常有特定要求,FortiClient会自动适配,但strongSwan得手动配置:
- 找管理员确认FortiGate的IKE和ESP加密套件配置,然后在
/etc/ipsec.conf里调整对应参数,比如:
注意末尾的ike=aes256-sha256-modp1024! esp=aes256-sha256!!是强制使用该套件,避免协商过程中出现不匹配的情况。
6. 调整MTU大小
VPN隧道的MTU通常比普通网卡小,默认的1500可能导致数据包分片失败:
- 尝试降低VPN接口的MTU,比如:
之后再访问CI服务器试试,不行的话可以再调到1300左右。sudo ip link set dev ipsec0 mtu 1400
7. 启用Dead Peer Detection(DPD)
有时候隧道看似建立,但实际连接已经中断,DPD能自动检测并重建连接:
- 在
/etc/ipsec.conf的连接配置块里添加:
然后重启strongSwan:dpdaction=restart dpddelay=30s dpdtimeout=120ssudo ipsec restart
内容的提问来源于stack exchange,提问作者Matthias Braun
相关产品推荐
相关产品推荐

