高级概述如下:我有一个 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 的二层链接。我可以手动执行此操作:
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 路由表。
我仍然很想知道是否有办法删除主表内的路线,但我现在有一个正常运行的系统,因此在两周内我会将其标记为可接受的解决方案。