我已经尝试了很多个小时来寻找解决我的问题的方法,但似乎找不到永久的解释 - 我也是一名超级菜鸟,所以如果我对基础知识有误,请原谅我。
我有一台在 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
您已经声明过希望eno1
和eno2
位于不同的子网上,但它们实际上位于同一个子网上: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。
最后,如果您的系统上配置了防火墙,那么您可能也需要更新它以允许流量。