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

baj*_*baj -2 linux-networking

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

eth0 - 互联网

eth1 - 客户端 1

eth2 - 客户端 2

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

当我为它们使用不同的子网时,我才能让它工作。

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

ysd*_*sdx 8

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

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

        eth1    eth2
[ IP  ]<---------->[IP  ]
[ Eth ]<->[Eth ]<->[Eth ]
 Client1  bridge   Client2
Run Code Online (Sandbox Code Playgroud)

基于 IP 地址的客户端 ( br0) 和 Internet之间涉及路由eth0

        br0   eth0
[ IP  ]<->[IP ]<->[IP  ]
[ Eth ]<->[Eth]<->[Eth ]
Client1   router  to internet
Run Code Online (Sandbox Code Playgroud)

从命令行:

brctl addbr br0
brctl addif br0 eth1 eth2
ip link up br0
ip addr add br0 $ip/$netmask
Run Code Online (Sandbox Code Playgroud)

或在/etc/network/interfaces

iface br0 inet static
    bridge_ports eth1 eth2
    address ...
    netmaks ...
    broadcast ...
Run Code Online (Sandbox Code Playgroud)

  • @Cameron Kerr:我看不出别名或绑定在这里是如何相关的(也许我误解了这个问题)。如果您可以添加详细信息,它可能会有所帮助。 (2认同)