我的家庭服务器中有两个 NIC - 都连接到同一个网络。一个是 2.5Gbps(我想将其用于 LAN -eth0),另一个是 1Gbps(我只想用它来上网 -enp0s25)。
我想要做的是将所有互联网流量通过其中一个路由,另一个仅用于 LAN 连接。
我的想法是仅将第二个 NIC 用于本地流量,以免中断用于互联网连接的第一个 NIC(以免造成瓶颈)。
我该怎么做?我正在使用 netplan 运行 Ubuntu 22.04。
我当前的配置:
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s25:
dhcp4: no
addresses: [192.168.1.184/24]
routes:
- to: 0.0.0.0/0
via: 192.168.1.1
答案1
理想的
理想的解决方案是使用 VLAN。您知道您的交换机是否支持 VLAN 吗?
您可以将互联网连接到一个端口,在该端口上将其设置为 vlan(例如 5)上的访问端口,然后您可以在连接到 enp0s25 的端口上执行相同操作。这会将所有互联网流量放在其自己的 vlan 上。
下面的配置在有或没有 VLAN 的情况下都可以工作,如果不使用 VLAN,则必须注意网络上只有一个 DHCP 服务器。使用 VLAN,每个 VLAN 可以有一个 DHCP 服务器。
设置
然后,您可以通过在 netplan 配置底部添加以下内容来设置具有静态 IP 的 eth0:
eth0:
dhcp4: no
addresses: [192.168.2.1/24]
如果您希望在 LAN 上使用 dhcp 服务器,则需要设置该服务。使用 LAN 接口的 IP 作为网关,即 192.168.2.1。或者,如果您使用的是静态 IP,则让 dhcp 服务发送 192.168.2.1 作为网关。
转发
您需要启用转发。
echo net.ipv4.conf.all.forwarding = 1 > /etc/sysctl.conf
将为所有未来的重启启用转发,若要为当前会话启用它,请运行:
sysctl -f
读取 /etc/sysctl.conf 文件中的所有设置,或者
sysctl net.ipv4.conf.all.forwarding=1
仅启用转发选项。
NAT 路由
最后,假设您正在对其他内部设备使用 NAT,您将需要添加 iptables 防火墙条目。
iptables -t nat -I POSTROUTING -s 192.168.2.0/24 -o enp0s25 -j MASQUERADE
为了使此规则适用于将来的重新启动,您可以使用 iptables-persistent 包,运行 cmd
iptables-save > /etc/iptables/rules.v4
或者通过更新 systemd 中设置网络配置和链接的众多脚本之一。
答案2
您可以配置 eth0,不使用 DHCP 和同一范围(192.168.1.185/24)内的静态 IP,但没有到 0.0.0.0 的默认路由。然后将 enp0s25 地址更改为 /32,为其提供与您的互联网路由器同一范围内的地址,并在链接上添加到 192.168.1.1 的主机路由以查找默认路由。
路由决定由您的主机决定,使用 enp0s25 处理任何非本地内容,但由于 /32 是单个主机,因此它不会创建到任何本地内容的路由。但由于它需要在本地找到您的路由器,因此您需要一个 onlink 路由。
我怀疑这个解决方案是否会给你带来任何真正的好处,因为我会努力让链接完全饱和足够长的时间,让我能够为此烦恼。
enp0s25:
dhcp4: no
addresses: [192.168.1.184/32]
routes:
- to: 192.168.1.1
scope: link
- to: 0.0.0.0/0
via: 192.168.1.1
eth0:
dhcp4: no
addresses: [192.168.1.185/24]