如何使用 systemd-networkd 在同一网关上设置附加路由

如何使用 systemd-networkd 在同一网关上设置附加路由

由于涉及 VPN 和冲突的 IP 范围的一些网络特性,我有两个子网路由到两个不同的接口。我想让一个子网中的一个IP地址通过不同的网关出去。

我可以通过运行来完成此操作:

$ route add -host 1.2.3.4 gw 5.6.7.8
$ ip route show
1.2.3.4 via 5.6.7.8 dev eth0 scope link 

我想让这个改变永久化。当我使用 systemd-networkd 时,我尝试通过更新现有的来做到这一点/etc/systemd/network/50-dhcp.conf

[Match]
Name=eth0

[Network]
DHCP=ipv4

[Route]
#Gateway=5.6.7.8
Destination=1.2.3.4/32

这是可行的,但如果没有这Gateway条线,它就不会设置路线:

$ ip route show
1.2.3.4 dev eth0 proto static scope link

如果我取消注释该Gateway行,那么新路线根本不会出现!

使用systemd-networkd添加静态路由时如何指定网关?

答案1

不能说我知道修复是什么,但升级到版本 242 后,当您列出和选项systemd时,问题消失了,现在可以正常工作了。GatewayDestination

答案2

你应该看看这篇文章:

添加永久路由的最佳方法是什么?

它解释了您应该如何:

  1. 创建一个命名路由表,在下面的情况下,路由表名为“mgmt”并获取编号“200”。

    echo '200 mgmt' >> /etc/iproute2/rt_tables
    
    • 最初 /etc/iproute2/rt_tables 文件看起来像这样,有一些保留的数字:

      #
      # reserved values
      #
      255     local
      254     main
      253     default
      0       unspec
      #
      # local
      #
      
  2. 该帖子继续指定如何添加路线:

    下面,Debian 7/8 接口文件定义了 eth0 和 eth1。 eth1 是 172 网络。 eth0 也可以使用 DHCP。 172.16.100.10 是分配给 eth1 的 IP 地址。 172.16.100.1是路由器的IP地址。

    source /etc/network/interfaces.d/*
    
    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    # The production network interface
    auto eth0
    allow-hotplug eth0
    # iface eth0 inet dhcp 
    # Remove the stanzas below if using DHCP.
    iface eth0 inet static
      address 10.10.10.140
      netmask 255.255.255.0
      gateway 10.10.10.1
    
    # The management network interface
    auto eth1
    allow-hotplug eth1
    iface eth1 inet static
      address 172.16.100.10
      netmask 255.255.255.0
      post-up ip route add 172.16.100.0/24 dev eth1 src 172.16.100.1 table mgmt
      post-up ip route add default via 172.16.100.1 dev eth1 table mgmt
      post-up ip rule add from 172.16.100.10/32 table mgmt
      post-up ip rule add to 172.16.100.10/32 table mgmt
    

重新启动或重新启动网络。

感谢用户克里斯托弗对于这个答案。

相关内容