Route

如何使用 systemd-networkd 在同一網關上設置附加路由

  • April 30, 2019

由於涉及 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 添加靜態路由時如何指定網關?

不能說我知道修復是什麼,但是在升級到systemd版本 242 後問題就消失了,現在它可以工作了,當您同時列出GatewayDestination選項時。

你應該看看這個文章:

添加永久路線的最佳方法是什麼?

它解釋了您應該如何:

  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




> 
> 重新啟動或重新啟動網路。
> 
> 
> 


感謝使用者[Christopher](https://unix.stackexchange.com/users/29678/christopher)的回答。

引用自:https://unix.stackexchange.com/questions/460978