仅使用一个NIC的Linux桥接静态IP

仅使用一个NIC的Linux桥接静态IP

似乎我遇到了一个普遍的问题,但找不到任何解决方案 - 到目前为止我在互联网上找到的所有解决方案都不适合我。首先让我试着解释一下我想做什么 - 我有一个带有三个接口的 Linux 机器 - 一个是上行链路到提供商,另外两个应该是单个逻辑网络的两个物理部分。所以我有以下内容:

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1488
    inet 10.0.0.1  netmask 255.0.0.0  broadcast 10.255.255.255
    ether 00:24:9b:04:3b:a7  txqueuelen 0  (Ethernet)
    RX packets 102156  bytes 8545914 (8.1 MiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 44194  bytes 7959306 (7.5 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
eth1: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1488
    ether 00:24:9b:04:3f:ae  txqueuelen 1000  (Ethernet)
    RX packets 56553  bytes 4992101 (4.7 MiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 15920  bytes 4418268 (4.2 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
eth2: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1488
    ether 00:24:9b:04:3b:a7  txqueuelen 1000  (Ethernet)
    RX packets 56298  bytes 7582661 (7.2 MiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 64175  bytes 8148316 (7.7 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br0 桥接 eth1 和 eth2,并且应该有一个用作网关的静态地址。现在问题来了 - 如果我位于网关上,并尝试 ping 连接到 eth2 的段中的盒子 - 一切正常 - arp 已解析并且 icmp 流动,但如果我尝试 ping eth1 段中的某个东西 - 我看到 eth2 上的 arp 请求,显然什么也没发生。

所以总的来说,我的问题是网桥只使用一个 MAC 地址 - eth2 所拥有的那个。任何我可能遗漏的文档指针或建议都欢迎提供!

谢谢!

根据要求提供的其他信息:

# ip r sh
default dev ppp0  scope link
10.0.0.0/8 dev br0  proto kernel  scope link  src 10.0.0.1
192.168.101.115 dev ppp0  proto kernel  scope link  src 192.168.6.59

# ip link sh
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 1000
link/ether da:f3:53:e3:69:84 brd ff:ff:ff:ff:ff:ff
3: tunl0: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT
link/ipip 0.0.0.0 brd 0.0.0.0
4: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1488 qdisc pfifo_fast master br0 state UP mode DEFAULT qlen 1000
link/ether 00:24:9b:04:3f:ae brd ff:ff:ff:ff:ff:ff
5: eth2: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1488 qdisc pfifo_fast master br0 state UP mode DEFAULT qlen 1000
link/ether 00:24:9b:04:3b:a7 brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1488 qdisc noqueue state UP mode DEFAULT
link/ether 00:24:9b:04:3b:a7 brd ff:ff:ff:ff:ff:ff
12: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 3
link/ppp

# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.00249b043ba7       no              eth1
                                                    eth2

好的,根据 ifconfig/brctl addif 的顺序进行简短更新 - 我可以让它通过 eth1 或 eth2 发送数据包。

答案1

我不了解 USB NIC,但 WLAN 卡通常会丢弃任何源 MAC 不属于自己的传出帧。

您广播的 ARP 请求可能会让 br0 带有源 MAC。eth2a7也恰好具有 MAC,a7因此它会转发该帧,但是 eth1 具有 MAC ae,因此它会丢弃该帧。

您可以通过手动更改网桥的 MAC 来确认这一点(ip link set dev br0 address <MAC>),首先更改aeMAC 并查看您的“工作”接口是否从 eth2 切换到 eth1,然后切换到某个新的随机 MAC 并查看两个接口是否都不转发流量。

相关内容