Netplan 没有为接口创建路由

Netplan 没有为接口创建路由

我正在尝试在远程机器和本地机器之间建立一个 ipip6 隧道,以便给我的机器一个公共 IPv4 地址(它有 IPv6,但位于运营商级 NAT 后面)。

到目前为止,我已经能够通过手动运行一系列ip命令来使其工作。

在我的本地机器(机器 A)上,我运行以下命令来设置隧道:

sudo ip link add name tun0 type ip6tnl local [machine A ipv6 address] remote [machine B ipv6 address] mode tun0
sudo ip link set dev tun0 up
sudo ip a add dev tun0 10.0.3.1
sudo ip route add 10.0.3.0/24 dev tun0

在我的远程机器(机器 B)上:

sudo ip link add name tun0 type ip6tnl local [machine B ipv6 address] remote [machine A ipv6 address] mode tun0
sudo ip link set dev tun0 up
sudo ip a add dev tun0 10.0.3.2
sudo ip route add 10.0.3.0/24 dev tun0

一切都运行良好,我可以通过隧道 ping 另一台机器。

但是,当机器重新启动时,隧道会丢失,所以我想使用 netplan 来管理它们。到目前为止,我已经能够让 netplan 正确创建具有地址的接口:

network:
  version: 2
  tunnels:
    tun0:
      mode: ipip6
      remote: "[machine B ipv6 address]"
      local: "[machine A ipv6 address]"
      addresses:
        - 10.0.3.2/32
      routes:
        - to: 10.0.3.0/24
          via: 10.0.3.1

但是,没有创建任何路由。当我运行 时ip route,我希望10.0.3.0/24 dev tun0 scope link在路由表中看到,但 netplan 没有创建它。我如何让 netplan 自动创建此路由,这样我就不必sudo ip route add 10.0.3.0/24 dev tun0每次都运行?

答案1

您的 netplan 配置和ip命令不匹配:在工作命令中,您在没有网关的设备上声明路由,在 netplan 中,您为路由声明网关,但该网关是您尚未拥有的路由。

您要么需要声明您的网络掩码,例如 10.0.3.1在隧道的路线中(即:10.3.0.2/30,不是10.3.0.2/32),或者您需要将路线声明为on-link

您应该能够检查ip link双向设置隧道后的输出以比较它们是否匹配。

相关内容