Я проводил эксперимент с Linux-мостом, и моя сетевая топология выглядит так:
Как видите, в локальной сети есть два хоста: Host1(10.74.68.58) и Host2(10.74.68.47). На Host1 я создал мост br0 и назначил ему IP (192.168.3.101). Затем я прикрепил eth0 к мосту:
[root@10.74.68.58:~] # bridge link
2: eth0 state UP : <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 2
Я установил маршрут по умолчанию как br0, и это нормально, чтобы ping 10.74.68.47
:
[root@10.74.68.58:~] # ip r
default dev br0 scope link
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1
192.168.3.0/24 dev br0 proto kernel scope link src 192.168.3.101
Но все стало необъяснимым, когда я установил маршрут по умолчанию в eth0 :
[root@10.74.68.58:~] # ip r
default dev eth0 scope link
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1
192.168.3.0/24 dev br0 proto kernel scope link src 192.168.3.101
Когда eth0 является интерфейсом маршрута по умолчанию, я пытаюсь пропинговать host2 двумя различными способами:
1, ping 10.74.68.47
Не удалось. После того, как я проверил файл tcpdump (захваченный на интерфейсе br0), я обнаружил, что br0 только получил ответ ARP. Таким образом, нет никакой информации ARP на интерфейсе eth0, таким образом это не может получить макинтош host2. Я думаю, что это правильное поведение, верно ли мое понимание?
2, тогда я попробовал ping -I br0 10.74.68.47
Я хотел использовать опцию -I, чтобы избежать маршрута по умолчанию, но также потерпел неудачу. После того, как я проверил файл tcpdump (захваченный на интерфейсе br0), я обнаружил, что уже есть пара эхо-запроса icmp и пакет эхо-ответа. Это меня сильно смутило. Теперь, когда br0 получил эхо-ответ, почему я не могу успешно пропинговать host2?
[root@10.74.68.58:~] # ping -I br0 10.74.68.47
2 packets transmitted, 0 received, 100% packet loss, time 1006ms
Ребята, вы можете дать мне несколько советов?