You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

StrongSwan IPsec隧道显示建立但无法通信,提示“Network is unreachable”源路由安装失败

StrongSwan IPsec隧道显示建立但无法通信,提示“Network is unreachable”源路由安装失败

看起来你遇到的核心问题是Ubuntu 22.04的网络栈没有正确识别私有IP的本地可达性,导致StrongSwan尝试为隧道安装源路由时失败——虽然隧道能建立,但没有实际的路由规则让流量走隧道,自然无法通信。结合你换Rocky Linux就正常的情况,确实是Ubuntu的Netplan配置方式踩了坑,下面给你针对性的解决方案:

一、先搞懂错误根源

日志里的unable to install source route for [私有IP],本质是系统认为这个私有IP所在的网络“不可达”。这是因为你之前用Netplan给接口加了带标签的子地址(比如enp0s31f6:ipsec),Ubuntu的networkd对这种标签地址的路由处理不够友好,没有自动生成对应的本地路由条目,导致StrongSwan无法确认这个IP是本地接口上的有效地址。

二、分步修复方案

1. 修正Netplan的私有IP配置(关键一步)

不要再用标签子接口的方式配置私有IP,直接把私有IP和公网IP放到同一个物理主接口上,让系统自动生成正确的本地路由。

以Server B为例,修改/etc/netplan/01-netcfg.yaml(主配置文件):

network:
  version: 2
  renderer: networkd
  ethernets:
    enp41s0:  # 替换成你的实际物理接口名称
      addresses:
        - 138.201.x.x/32  # 保留原公网IP
        - 192.168.220.1/24  # 直接把私有IP添加到主接口
      routes:
        - on-link: true
          to: 0.0.0.0/0
          via: 138.201.x.y  # 原公网网关
      nameservers:
        addresses:
          - w.x.y.z
          - ipv6.x.y.z::add:2
          - w.x.y.z2
          - ipv6.x.y.z::add:1

Server A同理,把172.16.50.1/24直接添加到主物理接口的addresses列表里。

应用配置并验证:

sudo netplan generate && sudo netplan apply
# 检查本地路由,必须能看到私有IP的本地条目
ip route show table local
# 应该输出类似:192.168.220.1 dev enp41s0 proto kernel scope host src 192.168.220.1

2. 调整StrongSwan配置,避免冗余设置

之前的leftsourceip配置有两个问题:一是没必要强制指定(StrongSwan会自动选接口上的私有IP),二是Server B的配置里多了/24后缀(这个参数应该是单个IP,不是子网)。

修改Server A的/etc/ipsec.conf:

conn thevpn
  type=tunnel
  auto=start
  keyexchange=ikev2
  authby=secret
  left=167.235.x.x  # 公网IP
  leftsubnet=172.16.50.0/24
  right=138.201.x.x
  rightsubnet=192.168.220.0/24
  # 移除leftsourceip=172.16.50.1,让StrongSwan自动选择源IP
  ike=3des-md5-modp2048!
  esp=3des-md5-modp2048!
  aggressive=no
  keyingtries=%forever
  ikelifetime=28800s
  lifetime=3600s
  dpddelay=15s
  dpdtimeout=20s
  dpdaction=restart

Server B的配置同理,移除leftsourceip=192.168.220.1/24这一行。

3. 确保系统IP转发和路由参数正确

执行以下命令开启IP转发并禁用重定向(IPsec必备):

sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv4.conf.all.accept_redirects=0
sudo sysctl -w net.ipv4.conf.all.send_redirects=0

把这些参数写入/etc/sysctl.d/99-ipsec.conf永久生效:

net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.send_redirects=0

4. 重启服务并验证

sudo systemctl restart strongswan-starter
# 查看隧道状态
ipsec status
# 检查StrongSwan专用路由表(默认是220),应该有隧道路由条目
ip route show table 220

如果路由表220里出现了类似192.168.220.0/24 via 138.201.x.x dev enp41s0 proto static src 172.16.50.1的条目,再去ping对方的私有IP,应该就能正常通信了。

额外排查要点

  • 检查防火墙:确保允许UDP 500、4500端口,以及ESP协议的流量,同时放行两个私有子网之间的通信。
  • 不要混用多个Netplan配置文件:把所有网络配置集中到主文件里,避免冲突。

备注:内容来源于stack exchange,提问作者jollyroger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:27:40