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

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

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

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

Теперь я заметил, что принимающий хост (Ubuntu 18.04) не отправляет ответный пакет (ICMP echo response или 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-адреса различаются!

решение1

Такое поведение вполне ожидаемо и связано с конфигурацией маршрутизации хоста 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, для Windows 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

Связанный контент