服务器双网卡配置同一IP段地址发生冲突?

新手上路,请多包涵

我有一个装了Ubuntu系统的服务器带有两个网口eth0和eth1。eth0的IP是192.168.2.178/24, eth1的IP是192.168.2.179。

通过netplan配置网络,内容如下:

network:
  ethernets:
    eth0:
      addresses:
      - 192.168.2.178/24
      dhcp4: false
      gateway4: 192.168.2.1
      nameservers:
        addresses:
        - 192.168.2.1
      optional: true
    eth1:
      addresses:
      - 192.168.2.179/24
      dhcp4: false
      optional: true
  renderer: networkd
  version: 2

当我完成这个网络配置后,系统的路由表中会自动添加两条路由,如下所示:

DestinationGatewayGenmaskFlagsMetricRefUseIface
192.168.2.00.0.0.0255.255.255.0U000eth0
192.168.2.00.0.0.0255.255.255.0U000eth1

在服务器上访问192.168.2.0/24这个内网段其他IP时会发生冲突。
我希望服务器在访问192.168.2.100的时候通过eth1网口,访问其他IP的时候通过eth0网口。

image.png

我应该怎么在系统中进行路由相关的配置,或者在netplan中配置能够永久生效。
我试过手动进行如下配置能够达到效果。

$ route del -net 192.168.2.0 netmask 255.255.255.0 dev eth1
$ route add -host 192.168.2.100 dev eth1

但是当Ubuntu重启的时候或者插拔服务器的网线时,路由表就会被重置,上面手动配置的路由就会消失。

阅读 1.9k
avatarAI BotBETA

你需要使用 ip 命令来配置永久的路由。你可以在 /etc/network/interfaces 文件中添加以下内容:

up ip route add -net 192.168.2.0 netmask 255.255.255.0 via 192.168.2.1 dev eth1
up ip rule add from 192.168.2.100 table 2
up ip route add default via 192.168.2.1 dev eth0 table 2

上述配置的含义是:

  • 第一条命令添加了一条永久路由,使得所有发送到 192.168.2.0/24 网络的数据包都会通过 eth1 网络接口发送出去。
  • 第二条命令添加了一条规则,使得所有源 IP 为 192.168.2.100 的数据包都会使用名为 table 2 的路由表。
  • 第三条命令在 table 2 中添加了一条默认路由,所有没有明确指定路由规则的数据包都会通过 eth0 网络接口发送出去。

然后,你需要在 /etc/network/interfaces.d/ 目录下创建一个名为 50-ip-table-routes 的文件,并在其中添加以下内容:

up ip rule add from 192.168.2.100 table 2
up ip route add default via 192.168.2.1 dev eth0 table 2

这样,即使重启 Ubuntu 或者插拔服务器的网线,路由表也不会被重置。因为这些路由规则和路由表都是使用 ip 命令永久配置的。

1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题