具有两个接口的路由表度量

具有两个接口的路由表度量

我已经尝试了很多个小时来寻找解决我的问题的方法,但似乎找不到永久的解释 - 我也是一名超级菜鸟,所以如果我对基础知识有误,请原谅我。

我有一台在 LTS Ubuntu 22.04 上运行的服务器,它有两个接口,eno1 和 eno2 - 一个接口有互联网连接 (eno1),我希望它优先于没有互联网连接的接口 (eno2)。我之所以有此设置,是因为我想在利用 eno1 网络的同时通过 eno2 在 LAN 之间传输文件。

我遇到的问题是,在启动服务器或建立与 eno2 的连接时,会自动生成一个路由条目,为 eno2 接口提供 0 的度量;根据我的研究,这意味着我的网络流量将利用该接口而不是其他接口 - 这反过来又使我无法使用互联网。

这是 Ubuntu 的服务器安装,我希望两个接口位于不同的子网上,因为通过 LAN 连接到服务器的 PC 具有单独的互联网连接接口。

我不需要连接到 eno2 的主机能够访问互联网,只需要将 eno1 作为服务器的默认连接。

我尝试过的方法

  • 执行命令: sudo ip route del 192.168.0.0/24 dev eno 2 proto kernel scope link src 192.168.0.88解决了该问题,但是,这不是永久性的,因为当系统重新启动或通过接口建立连接时,它只会重新创建度量为 0 的路由。
  • 我尝试添加相同的路线条目,/etc/netplan/00-installer-config.yaml但这只会创建具有不同度量的新条目。
  • 我尝试创建一个脚本,该脚本会在系统启动时自动删除该路由 - 但是,当与服务器的 eno2 接口建立连接时,该路由会被添加回来。

ip route

default        via 192.168.0.1 dev   eno1   proto dhcp src 192.168.0.2  metric 100
192.168.0.0/24 dev eno2        proto kernel scope link src 192.168.0.88
192.168.0.0/24 dev eno1        proto kernel scope link src 192.168.0.2  metric 100
192.168.0.1    dev eno1        proto dhcp   scope link src 192.168.0.2  metric 100
194.168.4.100  via 192.168.0.1 dev   eno1   proto dhcp src 192.168.0.2  metric 100
194.168.8.100  via 192.168.0.1 dev   eno1   proto dhcp src 192.168.0.2  metric 100

route -n

Destination     Gateway       Genmask           Flags Metric Ref Use Iface
0.0.0.0         192.168.0.1   0.0.0.0           UG    100    0   0   eno1
192.168.0.0     0.0.0.0       255.255.255.0     U     0      0   0   eno2
192.168.0.0     0.0.0.0       255.255.255.0     U     100    0   0   eno1
192.168.0.1     0.0.0.0       255.255.255.255   UH    100    0   0   eno1
192.168.4.100   192.168.0.1   255.255.255.255   UGH   100    0   0   eno1
192.168.8.100   192.168.0.1   255.255.255.255   UGH   100    0   0   eno1

/etc/netplan/00-installer-config.yaml

network:
  ethernets:
    eno1:
      dhcp4: true
    eno2:
      dhcp4: false
      addresses: [192.168.0.88/24]
  version: 2

ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdic noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
        valid_lft forever preferred_lft forever
   inet ::1/128 scope host
        valid_lft forever preferred_lft forever
2: eno1: <BROADCAST.MULTICAST.UP.LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
   link/ether (MAC) brd ff:ff:ff:ff:ff:ff
   altname enp3s0f0
   inet 192.168.0.2/24 metric 100 brd 192.168.0.255 scope global dynamic eno1
        valid_lft 86395sec preferred_lft 86395sec
   inet6 fe80::2fd:35ff:fefc:5648/64 scope link
        valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
   link/ether (MAC) brd ff:ff:ff:ff:ff:ff
   altname emp3s0f1
   inet 192.168.0.88/24 brd 192.168.0.255 scope global eno2
        valid_lft forever preferred_lft forever
   inet6 fe80::2fd:45ff:fefc:5649/64 scope link
        valid_lft forever preferred_lft forever

如果您能提供任何帮助,我将不胜感激。此外,如果您需要更多信息,我很乐意提供帮助。

谢谢。

答案1

经过一番深刻的探索和疯狂的反复试验后,我找到了解决问题的方法 - @mpboden 可能对此有所贡献。

在 netplan 中设置通向路由器的默认路由时 - 我需要添加名称服务器以使互联网正常运行。

有效的网络计划:

network:
  ethernets:
    eno1:
      dhcp4:false
      addresses: [192.168.0.2/24]
      routes:
        - to: default
          via: 192.168.0.1
          metric: 0
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]
    eno2:
      dhcp4: false
      addresses: [192.168.1.88/24]
  version: 2

保存文件后,执行操作netplan apply以应用 netplans 更改。

答案2

您已经声明过希望eno1eno2位于不同的子网上,但它们实际上位于同一个子网上:192.168.0.0/24。所以这似乎是你的问题。

我的建议是更新您的 Netplan YAML 文件,使其eno2位于不同的子网中。当然,这意味着后面的所有主机eno2也需要配置为位于此子网中。

如果您希望允许流量在eno1和之间转发eno2,则需要启用 IP 转发。

要检查 IP 转发是否启用,请使用sysctl

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

在此示例中,net.ipv4.ip_forward设置为0。这意味着它已关闭。如果设置为1,则意味着它已启用。

要启用,请使用以下命令:

sysctl -w net.ipv4.ip_forward=1

或者…

echo 1 > /proc/sys/net/ipv4/ip_forward

要使更改持久化,请编辑/etc/sysctl.conf并添加以下内容:

net.ipv4.ip_forward = 1

然后重新启动系统或运行sysctl -p以加载新设置/etc/sysctl.conf

最后,如果您的系统上配置了防火墙,那么您可能也需要更新它以允许流量。

相关内容