启动Openswan IPSEC后无法SSH连接AWS EC2实例求助
IPsec隧道启动后SSH连接断开的解决方案
问题分析
启动Openswan的IPsec服务后SSH断开,核心原因是IPsec默认会将所有流量路由至隧道,导致SSH连接的回程数据包被导向IPsec隧道而非原公网链路,最终连接中断。
解决步骤
1. 添加SSH流量的旁路路由规则
在IPsec主配置中添加规则,让SSH客户端的公网IP流量绕过IPsec隧道:
- 编辑
/etc/ipsec.conf(请勿直接修改/etc/ipsec.d/aws.conf,避免破坏隧道基础配置),在文件末尾添加以下配置段:
将conn ssh-passthrough type=passthrough left=0.0.0.0/0 right=<你的SSH客户端公网IP>/32 authby=never auto=route<你的SSH客户端公网IP>替换为你用来连接EC2的本地机器公网IP(可通过本地执行curl ifconfig.me获取)。
2. 调整路由优先级确保公网路由优先
如果旁路路由无效,修改系统路由优先级,让主路由表(公网路由)优先级高于IPsec路由:
- 编辑
/etc/sysctl.conf,添加或更新以下参数:net.ipv4.ip_route_priority_nexthop=100 net.ipv4.ip_route_priority_main=300 - 执行命令使配置生效:
sudo sysctl -p
3. 验证安全组与NACL规则
确认EC2实例的安全组允许你的客户端IP访问22端口(SSH),同时子网NACL允许SSH流量的双向通行(入站22端口、出站任意端口),避免IPsec启动后间接阻断流量。
4. 验证配置并重启服务
- 先检查IPsec配置合法性:
sudo ipsec verify - 启动IPsec服务(推荐使用systemd管理):
此时观察SSH连接是否保持稳定。sudo systemctl start ipsec
注意事项
- 所有自定义规则应放在
/etc/ipsec.conf或单独的自定义配置文件(如/etc/ipsec.d/custom-routes.conf)中,不要修改AWS生成的aws.conf,否则易导致隧道无法启动。 - 若使用旧版SysVinit系统,可用
sudo service ipsec start替代systemd命令。
内容的提问来源于stack exchange,提问作者Manny
相关产品推荐
相关产品推荐

