我的 yaml 文件如下所示
network:
renderer: networkd
ethernets:
eth0:
dhcp4: yes
addresses: [192.168.1.209/24]
gateway4: 192.168.1.1
nameservers:
addresses: [1.1.1.1, 8.8.8.8]
dhcp4-overrides:
route-metric: 100
routes:
- to: 0.0.0.0/0
via: 192.168.1.1
metric: 3
eth1:
dhcp4: yes
addresses: [169.254.0.39/24]
dhcp4-overrides:
route-metric: 200
gateway: 169.254.0.38
version: 2
我的ip route get
是
ip route get 1.1.1.1
1.1.1.1 via 169.254.0.38 dev eth1 src 169.254.0.39 uid 1000
cache
我ip route
的如下
default via 169.254.0.38 dev eth1 proto static
default via 192.168.1.1 dev eth0 proto static
default via 192.168.1.1 dev eth0 proto static metric 3
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.11 metric 100
169.254.0.0/24 dev eth1 proto kernel scope link src 169.254.0.39
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.209
192.168.1.1 dev eth0 proto dhcp scope link src 192.168.1.11 metric 100
当我访问192
网关时,它工作正常,但互联网访问要经过169
一个私有网络。我也尝试使用路由度量,但失败了。
有人能告诉我我做错了什么吗?
答案1
当未另行指定时,默认路由度量为 0;这意味着在您的配置中,当您指定gateway: 169.254.0.38
oneth1
时,您将创建具有最低度量的路由 - 因此具有最高优先级。
由于您提到这是一个私人网络,并且您不希望您的互联网流量通过此接口,那么您实际上不应该在这里指定网关,因为网关是默认路由的简写。
根据您的路由表,您也无法通过 DHCP 获取此默认路由,而只能通过您的gateway
声明获取。
以下配置可能就足够了:
network:
renderer: networkd
ethernets:
eth0:
dhcp4: yes
addresses: [192.168.1.209/24]
nameservers:
addresses: [1.1.1.1, 8.8.8.8]
eth1:
addresses: [169.254.0.39/24]
version: 2
差异:
- 不要在任何地方指定网关或路由;您的
ip route
输出显示您已经通过 dhcp 获取所需的路由 - 不要在 eth1 上运行 dhcp,没有迹象表明它为你做了任何事情(但显示的输出
ip a
会确认) - 不必担心 dhcp 覆盖;现在您只在一个接口上获取路由,因此无需更改指标
这确实会保留您在 eth0 上手动指定的地址 192.168.1.209/24,该地址与 dhcp 提供给您的地址 (192.168.1.11) 不同。我假设您有意为该接口分配两个 IP。