Привет на всички.
Наскоро (сряда, 5-ти) МЕГАЛАН смениха софтуера на някои свои рутери от ЛИНУКС на BSD. Явно неговия TCP стек е по-стриктен от този на Linux, и веднага "цъфна" 1 проблемче. След половин ден ровене в Гугъл се пообразовах малко и успях да го реша. Сега споделям опита си - може на някой да му е от полза.
По подразбиране ЛИНУКС отговаря на ARP заявки относно всеки дефиниран локален IP-адрес, независимо през кой интерфейс е дошла заявката. Това води до разпространение на вътрешни адреси (обикновено 192.168 и 172.16, но важи и за всички останали) по външната мрежа.
Например, моята конфигурация беше такава:
eth0 - 192.168.0.1/24
eth1 - 192.168.2.1/24
eth2 - 78.90.xx.yy/24
И когато получаваше ARP заявки за 192.168.0.1 през
ETH2, системата ми отговаряше на тях - а това не е редно, защото трябва да отговаря само ако заявката е дошла през
ETH0.
Понеже съм с 2.6 ядро, това лесно се коригира в SYSCTL:
Примерен код |
sysctl -w "net.ipv4.conf.all.arp_announce=2" sysctl -w "net.ipv4.conf.all.arp_ignore=2"
|
Вместо all може да специфицирате конкретен интерфейс (eth0/1/2...)
За повече подробности (описание на стойностите за ARP_ANNOUNCE и ARP_IGNORE) може да прочетете ТУК