Netplan 和 Ipsec - 告诉 netplan 不管接口是什么?

Netplan 和 Ipsec - 告诉 netplan 不管接口是什么?

我正在尝试使用 Strongswan 在装有 Netplan 的服务器上创建 Ipsec 隧道。Netplan 目前没有针对创建隧道时 Ipsec 调出的接口的配置。这对我来说似乎(几乎)正确tunnel1tunnel2

ipsec 服务运行一个脚本来创建tunnel[1,2]接口(如果需要,可能会调用这些接口vti[1,2])。如果隧道发生故障,ipsec 将“关闭”与其关联的接口(使用此脚本)。此脚本还为 VPN 另一端的网络设置路由。此路由仅持续到 Netplan 运行,然后被删除。接口tunnel如下所示:

25: tunnel2@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1419 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ipip 1.2.3.4 peer 2.3.4.5
    inet 169.254.9.238 peer 169.254.9.237/30 scope global tunnel2
       valid_lft forever preferred_lft forever
    inet6 fe80::200:5efe:c6f4:8f78/64 scope link
       valid_lft forever preferred_lft forever
26: tunnel1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1419 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ipip 1.2.3.4 peer 3.4.5.6
    inet 169.254.199.162 peer 169.254.199.161/30 scope global tunnel1
       valid_lft forever preferred_lft forever
    inet6 fe80::200:5efe:c6f4:8f78/64 scope link
       valid_lft forever preferred_lft forever

我想通过 netplan 添加的路线可以像这样手动添加:

ip route add 10.1.0.0/16 dev tunnel1 scope link src 10.0.16.170/24 metric 100

有没有办法告诉 netplan 其中任何一个:

  • 单独保留特定接口/目的地的路由?
  • 告诉 netplan 忽略与tunnel[1,2]接口相关的任何内容?
  • 告诉 netplan 为不存在且不受其控制的接口创建路由?

...或者任何其他让 Netplan 与 ipsec 良好配合的方法。我宁愿不必走“繁琐”的禁用 netplan 的路线,只是为了让我的 ipsec VPN 正常工作。

使所有这些东西结合在一起的正确方法是什么?

答案1

问题是由 systemd-networkd 引起的。它会在稍后删除它不知道的路由。我之前回答过,将设备设为“不受管理”可以解决问题,但遗憾的是,这并没有解决:

[Match]
Name=tunnel1

[Link]
Unmanaged=yes

该解决方案似乎阻止 systemd-networkd 为非托管设备创建任何配置,但并不能阻止它在停止所有网络设备(重启期间执行的操作)时删除所有配置。

在 networkd(或 netplan)中完全配置设备和路由不起作用,因为配置排序问题

到目前为止,我发现唯一可行的解​​决方案是完全禁用并停止 systemd-networkd(并卸载 Netplan,因为不再需要它)。这似乎是一个相当激进的解决方案,确实意味着一些功能会丢失。就我而言,我认为这不是问题,但对某些人来说可能是一个问题。

答案2

您不需要告诉 netplan 忽略某个接口。它只会更改它所要求的接口的配置。但听起来您在这里想要的是使用 netplan 向 netplan 不管理且不受支持的接口添加路由。

首先,如果您的隧道在任何时候断开,netplan 将无法重新添加路由。

无论你使用什么来管理 IPsec 隧道,都应该支持添加路由。实际上没有必要单独管理它们,而且如上所述,这样做会阻止系统正确处理隧道重启事件

相关内容