Linux 网络:如何使路由与同一子网上的两个网络接口一起工作?

Linux 网络:如何使路由与同一子网上的两个网络接口一起工作?

我有一台启用了 ip_forwarding 的 Ubuntu 机器。iptables 也会转发。我有 3 个网卡。

eth0-互联网

eth1-客户端1

eth2-客户端2

我希望 eth1 和 eth2 位于同一子网,相互通信并访问互联网。

只有当我使用不同的子网时,我才能使其工作。

实现这一目标的标准方法是什么?

答案1

您希望 eth1 和 eth2 位于同一子网,因此它们应该位于同一以太网链路上:您应该将您的 Linux 机器配置为在 eth1 和 eth2 之间。

这将创建一个新的网络接口(名称br0如下):内核将充当桥接您的eth1eth2(在第 2 层)的交换机。IP 配置将在br0而不是eth1和上完成(基于 MAC 地址)。它不会在 client1和 client2eth2之间路由。eth1eth2

        eth1    eth2
[ IP  ]<---------->[IP  ]
[ Eth ]<->[Eth ]<->[Eth ]
 Client1  bridge   Client2

br0客户端( )和 Internet之间eth0基于 IP 地址进行路由:

        br0   eth0
[ IP  ]<->[IP ]<->[IP  ]
[ Eth ]<->[Eth]<->[Eth ]
Client1   router  to internet

从命令行:

brctl addbr br0
brctl addif br0 eth1 eth2
ip link up br0
ip addr add br0 $ip/$netmask

或者/etc/network/interfaces

iface br0 inet static
    bridge_ports eth1 eth2
    address ...
    netmaks ...
    broadcast ...

答案2

只是为了解释为什么需要一座桥......

Aeth1在两个第 2 层网络(在您的例子中)之间创建链接,eth2以充当单个第 2 层网络。这就是交换。

A路由器在两个第 3 层网络之间创建链接(在您的情况eth0br0,一旦您创建了网桥)。这就是路由。

如果两个客户端位于同一子网中,则无需路由。由于您需要同一个子网,因此它们是相同的第 3 层,因此您需要一个共同的第 2 层网络。

答案3

纽带它们的可靠性、速度和实用性别名到绑定接口。

答案4

您通常会使用别名来执行此操作(至少对于 IPv4)

您将看到三个接口,每个接口都有不同的 IP 地址。

eth0 eth0:1 eth0:2

使用单独的设备执行此操作是……极其痛苦的,特别是当您最终遇到不对称路由/防火墙问题时(添加一些外部 NAT 设备——例如一些负载平衡器),您会非常开心(如果您是受虐狂)。我尝试(非常努力,尽管基于策略的路由对我来说很新)来使类似的东西工作,即数据包将返回到它们进入的同一接口。

希望这是可能的,但不值得为此头疼。尽管我很乐意证明我错了。

相关内容