具有两个接口并通过 netplan 配置,VM 无法连接到互联网

具有两个接口并通过 netplan 配置,VM 无法连接到互联网

我的 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.38oneth1时,您将创建具有最低度量的路由 - 因此具有最高优先级。

由于您提到这是一个私人网络,并且您不希望您的互联网流量通过此接口,那么您实际上不应该在这里指定网关,因为网关是默认路由的简写。

根据您的路由表,您也无法通过 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。

相关内容