Допустим есть такая сеть:
Шлюз, у которого на eth0 два адреса: x.x.1.1/24 и x.x.2.1/24.
send_redirect=1, ip_forward=1, iptables ACCEPT на всё.
Хост 1: x.x.1.2/24, у него прописан шлюз: x.x.1.1
Хост 2: x.x.2.2/24, у него прописан шлюз: x.x.2.1
И всё это находится в одном L2-сегменте.
Если 1.2 пытается связываться c 2.2, то шлюз посылает ICMP-Redirect, что адрес 2.2 доступен через 2.2. Linux(не знаю как оффтопик) нормально реагирует на такой пакет и шлёт всё на 2.2 мимо шлюза.
Я не понимаю с какой стати шлюз отправляет редирект и почему хост нормально на это реагирует.
Судя по RFC-792 по ICMP, шлюз не должен так делать.
The gateway sends a redirect message to a host in the following
situation. A gateway, G1, receives an internet datagram from a
host on a network to which the gateway is attached. The gateway,
G1, checks its routing table and obtains the address of the next
gateway, G2, on the route to the datagram’s internet destination
network, X. If G2 and the host identified by the internet source
address of the datagram are on the same network, a redirect
message is sent to the host. The redirect message advises the
host to send its traffic for network X directly to gateway G2 as
this is a shorter path to the destination. The gateway forwards
the original datagram’s data to its internet destination.
For datagrams with the IP source route options and the gateway
address in the destination address field, a redirect message is
not sent even if there is a better route to the ultimate
destination than the next address in the source route.
Может кто-нибудь знает где можно точно прочитать про подобное поведение Linux шлюза?; или просто прояснить ситуацию...
Ну и как отключить такую фичу, не отключая send_redirect?