带有 Vlan 接口的 Netplan 静态路由

带有 Vlan 接口的 Netplan 静态路由

在 18.04 上。我尝试为我的服务器配置 2 个 vlan 接口。每个 vlan 接口在单独的子网上都有单独的 IP 地址,并且两个接口都将链接到相同的物理接口。当我配置 vlan 接口时,我可以通过 vlan 连接到每个不同的子网,但无法添加任何其他路由。我需要在其中一个子网 (vlan2000) 上添加一个下一跳的默认路由,然后通过另一个 vlan (vlan1000) 添加一个到单个未连接子网的静态路由。这是我的 netplan 配置文件:

network:
renderer: NetworkManager
version: 2
ethernets:
    enp0s31f6: 
        routes:
            - to: 0.0.0.0/0
              via: 192.168.100.2
              metric: 100
            - to: 192.168.1.0/24
              via: 172.16.100.1
              metric: 10
vlans:
    vlan1000:
        id: 1000
        link: enp0s31f6
        addresses: [ "172.16.100.2/30" ]
    vlan2000:
        id: 2000
        link: enp0s31f6
        addresses: [ "192.168.100.2/24" ]

我也尝试过在每个 VLAN 层次结构下添加适用的路由,但没有成功——例如:

    vlans:
    vlan1000:
        id: 1000
        link: enp0s31f6
        addresses: [ "172.16.100.2/30" ]
        routes:
          - to: 0.0.0.0/0
          via: 192.168.100.2
          metric: 100

使用这两者后,应用配置后出现以下错误:

Traceback (most recent call last):
  File "/usr/sbin/netplan", line 23, in <module>
    netplan.main()
  File "/usr/share/netplan/netplan/cli/core.py", line 50, in main
    self.run_command()
  File "/usr/share/netplan/netplan/cli/utils.py", line 130, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/apply.py", line 43, in run
    self.run_command()
  File "/usr/share/netplan/netplan/cli/utils.py", line 130, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/apply.py", line 93, in command_apply
    stderr=subprocess.DEVNULL)
  File "/usr/lib/python3.6/subprocess.py", line 291, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['udevadm', 'test-builtin', 'net_setup_link', '/sys/class/net/vlan1000']' returned non-zero exit status 4.

如果我再次应用它,它会通过,但不会将任何路由添加到路由表中。如果我完全删除路由语句,它会应用而不会出现错误。我不太了解 netplan,但这似乎是问题所在。所以我假设我在配置中做错了什么。我应该在哪里为 vlan 接口添加静态路由?

FTR,当我手动添加静态路由时:

 sudo ip route add 192.168.1.0/24 via 172.16.100.1 dev vlan1000

一切都按我预期的那样运行。我担心的是,我不相信这些手动添加的路由在重启后会保留下来。如果有更简单的解决方法来让这些路由保留下来,我愿意接受。

谢谢,

答案1

vlans:
vlan1000:
    id: 1000
    link: enp0s31f6
    addresses: [ "172.16.100.2/30" ]
    routes:
      - to: 0.0.0.0/0
      via: 192.168.100.2
      metric: 100

除了缩进之外,此配置是不正确的,因为您在此处尝试添加路由到不是保存到其网关的路由的接口的接口。 0.0.0.0/0 路由需要列在 vlan2000 接口下,因为这是到网关 (192.168.100.2) 的路由所在的网络。

但根据您的配置,192.168.100.2 是当地的地址,这意味着将其用作网关是错误的。您没有将整个 Internet (0.0.0.0/0) 直接连接到此 vlan 上的主机地址。您的路由需要使用您的路由器作为via值,而不是您的本地地址。

相关内容