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

Различные MAC-адреса в пакете и таблице ARP

Что произойдет, если хост в сети получит IP-пакет с MAC-адресом источника, который отличается от MAC-адреса в локальной таблице ARP для этого исходного IP-адреса?

Запись в таблице ARP для этого IP-адреса была и будет заполняться с помощью действительного ответа ARP.

Теперь я заметил, что принимающий хост (Ubuntu 18.04) не отправляет ответный пакет (эхо-ответ ICMP или TCP SYN / ACK ... и т. Д.). Ни один ответный пакет не покидает интерфейс.

Теперь вопрос в том, по каким причинам хост так себя ведет. Какие проверки выполняются с MAC- и IP-адресами пакетов, локальной таблицей arp, таблицей маршрутизации и т. Д.?

Редактировать:

Чтобы прояснить сценарий:

Если хост Hb отправляет запрос ping на 10.2.0.5 (хост Ha), Ha получает ICMP-пакет с исходным IP-адресом 10.1.0.3, а исходный MAC-адрес является MAC-адресом маршрутизатора. Но в таблице ARP хоста Ha есть запись: 10.1.0.3 -> MAC-адрес Hb. Таким образом, MAC-адреса различаются!

Такое поведение вполне ожидаемо и связано с конфигурацией маршрутизации Hb хост, который, вероятно, имеет только маршрут по умолчанию через маршрутизатор. Итак, если вы не настроили дополнительный маршрут, пакеты на N2 сеть (10.2.0.0/24) отправляются по маршруту по умолчанию.

Таким образом, проблема вызвана включением фильтра обратного пути на Ha хост, который отбрасывает входящие пакеты по ограничениям на адрес источника.

Чтобы устранить эту проблему, вы должны проверить вывод следующих команд на Ha хост:

  • ip netconf show dev <iface-N2> - проверить rp_filter стоимость. Скорее всего strict.
  • ip route get 10.2.0.5 from 10.1.0.3 iif <iface-N2> - скорее всего, это покажет что-то вроде invalid cross-device link.
  • nstat -az TcpExtIPReversePathFilter - скорее всего, он будет иметь ненулевое значение.

Есть три незаметных способа решить проблему:

  • Просто отключите rp_filter на Ha хост с sysctl (sysctl -w net.ipv4.conf.all.rp_filter=0 и sysctl -w net.ipv4.conf.<iface-N2>.rp_filter=0). Также вам следует отредактировать /etc/sysctl.conf файл, чтобы сделать эти изменения постоянными.

  • Просто добавьте маршрут на Hb принимать 10.2.0.5 через 10.1.0.5 адрес (команда для linux ip route add 10.2.0.5 via 10.1.0.5, для окон route add 10.2.0.5 mask 255.255.255.255 10.1.0.5)

  • Настройте преобразование адресов источника (NAT) на маршрутизаторе, чтобы переписать адрес Hb на адрес роутера. Правило iptables для этого:

iptables -t nat -A POSTROUTING -o <iface-N2> --src 10.1.0.3 --dst 10.2.0.5 -j MASQUERADE