我有 2 个网络接口 - 1 个连接到内部网络,1 个连接到外部网络,两个接口都从 DHCP 获取其 IP。
默认情况下,流量通过内部网络,外部网络应通过名为“public”的路由表单独路由。我尝试使用 netplan 实现此目的,配置如下:
network:
version: 2
ethernets:
ens3:
dhcp4: yes
dhcp4-overrides:
route-metric: 99
ens4:
dhcp4: yes
dhcp4-overrides:
route-metric: 100
routing-policy:
- from: w.x.y.z
table: 201
- to: w.x.y.z
table: 201
routes:
- to: 0.0.0.0/0
via: w.x.v.1
table: 201
- to: w.x.v.0/23
via: w.x.v.1
table: 201
运行后netplan apply
我希望看到以下内容:
root@my-u18:~# ip route show table 201
default via w.x.v.1 dev ens4
x.y.v.0/23 dev ens4 scope link src w.x.y.z
但实际上路由表并没有填充
root@my-u18:~# ip route show table 201
root@my-u18:~#
但是,路由规则似乎适用:
root@my-u18:~# ip rule
0: from all lookup local
0: from w.x.y.z lookup public
0: from all to w.x.y.z lookup public
32766: from all lookup main
32767: from all lookup default
我错过了什么?
答案1
您是否已将表 201 添加到/etc/iproute2/rt_tables
(或/etc/iproute2/rt_tables.d/
)?
/etc/iproute2/rt_tables.d/foo.conf
如果还没有,请尝试添加包含以下内容的文件:
201 foo
然后运行netplan apply
,看看201中的路线是否出现。
答案2
我使用 Debian 11,但 Ubuntu 是 Debian 的衍生产品,所以我预计问题类似。
在 Debian 11 中,这是由于 netplan.io 中的错误造成的。
netplan.io 版本 0.101-4(Debian 11 中的默认版本)存在缺陷,并且没有填充策略路由表。
版本 0.105-2(可从 Debian 测试仓库获得)运行正常。然而,这也会从测试仓库中引入大量依赖项,这可能会带来风险。
Ubuntu 20.04 发行版有一个 netplan.io 0.104-0 更新,可以在 Debian 11 上安装而无需提取其他依赖项:
wget http://archive.ubuntu.com/ubuntu/pool/main/n/netplan.io/netplan.io_0.104-0ubuntu2~20.04.2_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/main/n/netplan.io/libnetplan0_0.104-0ubuntu2~20.04.2_amd64.deb
sudo apt install ./netplan.io_0.104-0ubuntu2~20.04.2_amd64.deb ./libnetplan0_0.104-0ubuntu2~20.04.2_amd64.deb