![仅使用一个NIC的Linux桥接静态IP](https://linux22.com/image/612151/%E4%BB%85%E4%BD%BF%E7%94%A8%E4%B8%80%E4%B8%AANIC%E7%9A%84Linux%E6%A1%A5%E6%8E%A5%E9%9D%99%E6%80%81IP.png)
似乎我遇到了一个普遍的问题,但找不到任何解决方案 - 到目前为止我在互联网上找到的所有解决方案都不适合我。首先让我试着解释一下我想做什么 - 我有一个带有三个接口的 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>
),首先更改ae
MAC 并查看您的“工作”接口是否从 eth2 切换到 eth1,然后切换到某个新的随机 MAC 并查看两个接口是否都不转发流量。