高級概述是這樣的:我有一個 Impish Ubuntu 伺服器,有兩個接口,地址為172.16.2.103/24
和10.1.2.10/24
。我希望預設流量通過網關172.16.2.254
。但是,當我指定 的來源位址時,10.1.2.10
我希望它具有 的網關10.1.2.254
。下面的內容在 99% 的情況下都有效,但我希望核心172.16.2.103
即使在聯繫時也能選擇來源 IP 10.1.2.0/24
。這是可能的,/etc/networks/interfaces
但我無法使用 netplan 弄清楚它。
這是我的 netplan 配置中的內容:
network:
ethernets:
ens160:
addresses:
- 172.16.2.103/24
routes:
- to: 0.0.0.0/0
via: 172.16.2.254
nameservers:
addresses:
- 10.1.2.1
search:
- localdomain
optional: yes
ens192:
addresses:
- 10.1.2.10/24
routing-policy:
- from: 10.1.2.10
table: 10
routes:
- to: 0.0.0.0/0
via: 10.1.2.254
table: 10
optional: yes
version: 2
正如我所說,這大多數情況下效果很好。我有一個路由策略(又稱 ip 規則),這意味著如果我更改資料包的來源位址,我會尋找 10 路由表。但是,我希望從主路由中刪除一條附加路由。
這是我檢查路由表時得到的:
IN1: me@host:~$ ip route
OUT1: default via 172.16.2.254 dev ens160 proto static
OUT2: 172.16.2.0/24 dev ens160 proto kernel scope link src 172.16.2.103
OUT3: 10.1.2.0/24 dev ens192 proto kernel scope link src 10.1.2.10
IN2: me@host:~$ ip route list table 10
OUT5: default via 10.1.2.254 dev ens192 proto static
我想將 OUT3 刪除,或更準確地說移到 10 路由表中,以便主路由表中沒有到 10.1.2.0/24 的第 2 層連結。我可以這樣手動完成:
me@host:~$ sudo ip route del 10.1.2.0/24 dev ens192
但我不知道如何將其嵌入 netplan 中。以前我會新增一個 up 語句,/etc/network/interfaces
但這不再是選項。
提前致謝。
答案1
我不會稱其為解決方案,而是一種解決方法。我的問題是我想刪除不需要的路線:解決方法是創建其他優先權更高的路由!
network:
ethernets:
ens160:
addresses:
- 172.16.2.103/24
routes:
- to: 0.0.0.0/0
via: 172.16.2.254
# ** ADDITIONAL ROUTE **
- to: 0.0.0.0/0
via: 172.16.2.254
table: 172
# **********************
nameservers:
addresses:
- 10.1.2.1
search:
- localdomain
optional: yes
ens192:
addresses:
- 10.1.2.10/24
routing-policy:
- from: 10.1.2.10
table: 10
# ** ADDITIONAL ROUTING POLICY **
- to: 172.16.2.0/24
table: 172
# *******************************
routes:
- to: 0.0.0.0/0
via: 10.1.2.254
table: 10
optional: yes
version: 2
請注意 ens160 介面的附加路由策略和路由。這將建立另一個名為 172 的路由表,並且該表具有與主表的預設路由 (172.16.2.254) 相同的預設路由。現在當我路由時到172.16.2.0/24,它不會通過錯誤路由的主表,而是透過 172 路由表。
我仍然很想知道是否有辦法刪除主表中的路線,但我現在有一個正常運行的系統,所以在兩週內我會將其標記為可接受的解決方案。