LINUX.ORG.RU
решено ФорумAdmin

Знатоки сетей и ARP, помогайте плз :)


0

3

Итак, есть машина с linux и 3 сетевыми интерфейсами:

ath0      Link encap:Ethernet  HWaddr 00:1B:11:B1:A6:69  
          inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0

eth0      Link encap:Ethernet  HWaddr 00:02:44:BF:8A:B6 с внешним честным айпи

eth1      Link encap:Ethernet  HWaddr 00:19:5B:87:19:F9  
          inet addr:192.168.0.1  Bcast:192.168.0.255  

Настроен обычный нат:
SNAT       all  --  192.168.0.0/24       anywhere            to:extip 
SNAT       all  --  10.0.0.0/24          anywhere            to:extip 

Естественно включен форвард и т.д. Основная проблема такова:

10:40:36.434726 arp who-has 10.0.0.1 tell 213.109.83.17
10:40:36.434773 arp reply 10.0.0.1 is-at 00:02:44:bf:8a:b6

с какой радости на арп-запрос по 10.0.0.1 моя машина возвращает мак внешнего интерфейса, т.е eth0 00:02:44:BF:8A:B6. И как заставить ее этого не делать? Провайдерскому свичу это не нравится.

Нагугленые рецепты не помогли:

net.ipv4.conf.lo.arp_filter = 1
net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.default.arp_filter = 1
net.ipv4.conf.wifi0.arp_filter = 1
net.ipv4.conf.eth0.arp_filter = 1
net.ipv4.conf.eth1.arp_filter = 1
net.ipv4.conf.ath0.arp_filter = 1

# cat /proc/sys/net/ipv4/conf/eth0/proxy_arp
0

★★★★★

Ну, похоже, что логика такая:
Где находится получатель? В сети, которая смотрит в строну провайдера. У нас есть такой IP? - Есть и мы ему поэтому ответим! (Не спрашивайте меня зачем). С какого интерфейса мы ему ответим? - С того, где находится получатель, то есть с интерфейса провайдера.

По-моему самый безболезненный вариант - выбрать другую подсеть.

fivepm ()

что самое характерное:

11:15:10.372041 arp who-has 192.168.0.1 tell 192.168.0.253
11:15:17.575379 arp who-has 10.0.0.1 tell 213.109.83.17
11:15:17.575419 arp reply 10.0.0.1 is-at 00:02:44:bf:8a:b6

Когда какой-то хост 192.168.0.253 спрашивает мак 192.168.0.1 - моя машина ничего не отвечает. А когда спрашивают 10.0.0.1 - отвечает. Теперь я окончательно запутался.

Komintern ★★★★★ ()
Ответ на: комментарий от Komintern

Действительно, очень странно. Может проблема в том, как ты выполняешь мониторинг? Она-то отвечает, но ты этого не видишь, не?

fivepm ()
Ответ на: комментарий от Komintern

По-моему нужно написать
tcpdump -i eth0 arp and \( host 213.109.83.17 or host 10.0.0.1 or host 192.168.0.1 or host 192.168.0.253 \) -n
Тогда должно показать тот arp-ответ.

fivepm ()
Ответ на: комментарий от fivepm

С какого перепугу? 192.168.0.253 принадлежит подсети 192.168.0.0/24 и соответственно интерфейсу eth1, а мониторится интерфейс eth0

gfh ★★★ ()
Ответ на: комментарий от Komintern

http://blog.steve-miller.org/2010/03/tweaking-arp-behavior-in-linux.html

# arp_ignore - Define different modes for sending replies in response to received ARP requests that resolve local target IP addresses:

* 2 - reply only if the target IP address is local address configured on the incoming interface and both with the sender's IP address are part from same subnet on this interface.

gfh ★★★ ()
Ответ на: комментарий от gfh

Огромное спасибо :)
net.ipv4.conf.eth0.arp_ignore = 2
зарешало.

Komintern ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.