Похоже, у меня общая проблема, но я не могу найти решения - все решения, которые я нашел до сих пор в Интернете, мне не подходят. Позвольте мне сначала попытаться объяснить, что я пытаюсь сделать - у меня есть 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, а также должен иметь статический адрес, используемый в качестве шлюза. Теперь вот проблема - если я нахожусь на шлюзе и пытаюсь проверить связь с ящиком в сегменте, прикрепленном к eth2 - все работает - arp разрешен и icmp потоки, но если я пытаюсь проверить что-то в сегменте eth1 - я вижу запросы arp на eth2 и явно ничего не происходит.
В общем, моя проблема в том, что мост использует только ОДИН 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.
Я не знаю насчет сетевых адаптеров USB, но карты WLAN обычно отбрасывают любые исходящие кадры с исходным MAC, который им не принадлежит.
Ваш широковещательный запрос ARP может оставлять br0 с исходным MAC-адресом a7
. eth2 также имеет MAC a7
поэтому он пересылает кадр, однако у eth1 есть MAC ae
поэтому он опускает рамку.
Вы можете подтвердить это, изменив MAC-адрес моста вручную (ip link set dev br0 address <MAC>
), сначала в ae
MAC и проверка, переключается ли ваш "рабочий" интерфейс с eth2 на eth1, затем на какой-то новый случайный MAC и проверяет, не перенаправляет ли ни один интерфейс трафик.