Назад | Перейти на главную страницу

Как запретить Linux отбрасывать входящие пакеты с неправильным MAC-адресом (неразборчивые связи не работают)

Я настроил три машины статическим образом, как proxy_arp:

----------------------+   +-----------------------------------------------+   +----------------------
    Machine A         |   |                   Machine B                   |   |     Machine C
----------------------+   +-----------------------------------------------+   +----------------------
                  eth0|---|tap0                                       tap1|---|eth0  
mac: 52:54:00:12:34:56|   |mac: b6:e0:11:97:fd:5f   mac: 36:46:74:b1:92:71|   |mac: 52:54:00:22:22:22
   ip: 192.168.12.2/24|   |ip: 0.0.0.0                         ip: 0.0.0.0|   |ip: 192.168.12.4/24
                      |   |promisc up                           promisc up|   |

Machine A:
arp -i eth0 -s 192.168.12.4 b6:e0:11:97:fd:5f

Machine C:
arp -i eth0 -s 192.168.12.2 36:46:74:b1:92:71

Machine B:
echo 1 > /proc/sys/net/ipv4/ip_forward
route add 192.168.12.4 dev tap1
route add 192.168.12.2 dev tap0

С этой конфигурацией я могу успешно пропинговать 192.168.12.4 с машины A.

Вопрос в том, заменю ли я статический маршрут arp на машине C на:

arp -i eth0 -s 192.168.12.2 22:22:22:22:22:22

Почему перестает работать? ответ ping получен tap1 на машине B (появляется на wirehark), но по какой-то причине, хотя tap1 является беспорядочным режимом, пакет не передается на уровень IP и не пересылается на tap0, как должен!

Знаете ли вы, какой компонент ядра отвечает за отбрасывание такого входящего пакета на основе MAC-адреса назначения, даже если интерфейс находится в беспорядочном режиме?

Сетевой уровень принимает пакет для MAC 22: 22: 22: 22: 22, но поскольку MAC-адрес не принадлежит tap1, пакет игнорируется. Установка неразборчивого интерфейса не отключает эту проверку, а только перемещает ее на более позднюю позицию в сетевом коде.

Пересылка пакетов, адрес MAC которых не совпадает с адресом интерфейса, на котором был получен пакет, называется мостом. Если вы переадресуете пакеты через машину B, вы сможете нормально настроить машины A и C без статических маршрутов ARP, и, похоже, именно это вы и хотите.