同一网络上的两个 NIC - 一个用于互联网,一个用于 LAN

同一网络上的两个 NIC - 一个用于互联网,一个用于 LAN

我的家庭服务器中有两个 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]

相关内容