Остановить дублирование ответов ICMP Echo при подключении к фиктивному интерфейсу?

Остановить дублирование ответов ICMP Echo при подключении к фиктивному интерфейсу?

Недавно я настроил мост br0с членами eth0(real if) и dummy0( dummy.ko if).

Когда я пингую эту машину, я получаю дублирующиеся ответы:

  # ping SERVERA
  PING SERVERA.domain.local (192.168.100.115) 56(84) bytes of data.
  64 bytes from SERVERA.domain.local (192.168.100.115): icmp_seq=1 ttl=62 time=113 ms
  64 bytes from SERVERA.domain.local (192.168.100.115): icmp_seq=1 ttl=62 time=114 ms (DUP!)
  64 bytes from SERVERA.domain.local (192.168.100.115): icmp_seq=2 ttl=62 time=113 ms
  64 bytes from SERVERA.domain.local (192.168.100.115): icmp_seq=2 ttl=62 time=113 ms (DUP!)

Используя tcpdumpon SERVERA, я смог увидеть, как эхо-ответы icmp отправляются от eth0самого br0себя следующим образом (как ни странно, два пакета эхо-запросов приходят «от» моего компьютера с Windows myhost):

  23:19:05.324192 IP myhost.domain.local > SERVERA.domain.local: ICMP echo request, id 512, seq 43781, length 40
  23:19:05.324212 IP SERVERA.domain.local > myhost.domain.local: ICMP echo reply, id 512, seq 43781, length 40
  23:19:05.324217 IP myhost.domain.local > SERVERA.domain.local: ICMP echo request, id 512, seq 43781, length 40
  23:19:05.324221 IP SERVERA.domain.local > myhost.domain.local: ICMP echo reply, id 512, seq 43781, length 40
  23:19:05.324264 IP SERVERA.domain.local > myhost.domain.local: ICMP echo reply, id 512, seq 43781, length 40
  23:19:05.324272 IP SERVERA.domain.local > myhost.domain.local: ICMP echo reply, id 512, seq 43781, length 40

Стоит отметить, что тестирование показывает, что хосты на одном физическом коммутаторе не видят DUP icmp echo responses(хост в той же VLAN на другом коммутаторе видит dup icmp echo response).

Я читал, что это может быть связано с ARPтаблицей коммутатора, но не могу найти никакой информации, напрямую связанной с bridges, просто bonds. У меня такое чувство, что моя проблема кроется в стеке Linux, а не в коммутаторе, но я открыт для любых предложений.

Система работает под управлением ядра centos6/el6 2.6.32-71.29.1.el6.i686.

Как остановить отправку дубликатов ответов ICMP echo при работе с интерфейсом моста/мостовыми интерфейсами?

Спасибо,

Мэтт

[редактировать]

Краткое примечание: в #linux было рекомендовано:

[08:53] == mbrownnyc [gateway/web/freenode/] has joined ##linux
[08:57] <lkeijser> mbrownnyc: what happens if you set arp_ignore to 1 for the dummy interface?
[08:59] <lkeijser> also set arp_announce to 2 for that interface
[09:24] <mbrownnyc> lkeijser: I set arp_annouce to 2, arp_ignore to 2 in /etc/sysctl.conf and rebooted the machine... verifying that the bits are set after boot... the problem is still present

Я сделал это и ничего не вышло. Та же проблема с дубликатами.

Я отойду от включения фиктивного интерфейса в мост, поскольку:

[09:31] == mbrownnyc [gateway/web/freenode/] has joined #Netfilter
[09:31] <mbrownnyc> Hello all... I'm wondering, is it correct that even with an interface in PROMISC that the kernel will drop /some/ packets before they reach applications?
[09:31] <whaffle> What would you make think so?
[09:32] <mbrownnyc> I ask because I am receiving ICMP echo replies after configuring a bridge with a dummy interface in order for ipt_netflow to see all packets, only as reported in it's documentation: http://ipt-netflow.git.sourceforge.net/git/gitweb.cgi?p=ipt-netflow/ipt-netflow;a=blob;f=README.promisc
[09:32] <mbrownnyc> but I do not know if PROMISC will do the same job
[09:33] <mbrownnyc> I was referred here from #linux.  any assistance is appreciated
[09:33] <whaffle> The following conditions need to be met: PROMISC is enabled (bridges and applications like tcpdump will do this automatically, otherwise they won't function).
[09:34] <whaffle> If an interface is part of a bridge, then all packets that enter the bridge should already be visible in the raw table.
[09:35] <mbrownnyc> thanks whaffle PROMISC must be set manually for ipt_netflow to function, but
[09:36] <whaffle> promisc does not need to be set manually, because the bridge will do it for you.
[09:36] <whaffle> When you do not have a bridge, you can easily create one, thereby rendering any kernel patches moot.
[09:36] <mbrownnyc> whaffle: I speak without the bridge
[09:36] <whaffle> It is perfectly valid to have a "half-bridge" with only a single interface in it.
[09:36] <mbrownnyc> whaffle: I am unfamiliar with the raw table, does this mean that PROMISC allows the raw table to be populated with packets the same as if the interface was part of a bridge?
[09:37] <whaffle> Promisc mode will cause packets with {a dst MAC address that does not equal the interface's MAC address} to be delivered from the NIC into the kernel nevertheless.
[09:37] <mbrownnyc> whaffle: I suppose I mean to clearly ask: what benefit would creating a bridge have over setting an interface PROMISC?
[09:38] <mbrownnyc> whaffle: from your last answer I feel that the answer to my question is "none," is this correct?
[09:39] <whaffle> Furthermore, the linux kernel itself has a check for {packets with a non-local MAC address}, so that packets that will not enter a bridge will be discarded as well, even in the face of PROMISC.
[09:46] <mbrownnyc> whaffle: so, this last bit of information is quite clearly why I would need and want a bridge in my situation
[09:46] <mbrownnyc> okay, the ICMP echo reply duplicate issue is likely out of the realm of this channel, but I sincerely appreciate the info on the kernels inner-workings
[09:52] <whaffle> mbrownnyc: either the kernel patch, or a bridge with an interface. Since the latter is quicker, yes
[09:54] <mbrownnyc> thanks whaffle

[править2]

После удаления моста и удаления фиктивного модуля ядра у меня остался только один интерфейс, который остывает в одиночестве. Я все еще получал дублирующиеся ответы icmp echo... на самом деле я получал случайное количество:http://pastebin.com/2LNs0GM8

То же самое не происходит на нескольких других хостах на том же коммутаторе, так что это связано с самим Linux Box. Я, скорее всего, закончу его перестройкой на следующей неделе. А потом... вы знаете... то же самое произойдет снова.

[править3] Угадайте что? Я пересобрал коробку, и я все еще получаю дублирующиеся эхо-ответы ICMP. Должно быть, это сетевая инфраструктура, хотя таблицы ARP не содержат множественных записей.

[править4] Как смешно.

Машина была сетевым зондом, поэтому я (вход и выход) зеркалировал порт восходящей линии связи на узел, который был NIC. Итак, поток (должен был) был таким:

  1. ICMP echo requestпоступает через mirrored uplink port.
  2. (реальный) ICMP echo requestпринимается NIC
  3. (зеркальный) ICMP echo requestпринимается сетевой картой
  4. ICMP echo replyотправляется за обоими.

Мне стыдно за себя, но теперь я знаю. Было предложено #networkingлибо изолировать зеркалируемый трафик на интерфейсе, на котором не включен IP. Другое решение — создать административную VLAN и удалить зеркалирование пакетов в административную VLAN (к сожалению, на моем коммутаторе это не предусмотрено).

решение1

Понятно. То, что вы ищете, — это связь. То, что вы имеете с вашим мостом, — это несколько интерфейсов, которые действуют независимо от пакетов, которые они получают, унаследовав адрес интерфейса моста. Это хорошо, когда вы соединяете два сетевых коммутатора через свою машину. Когда вы подключаете их оба к одному коммутатору, вы видите это поведение множественных ответов.

С другой стороны, связки предлагают поведение, которое гарантирует, что только один автомобиль в связке будет обрабатывать трафик. Это может быть через активное / пассивное аварийное переключение, связывание с коммутатором или ротацию через карты в зависимости от того, как вы настроите интерфейс связи.

Ваш коммутатор на самом деле не является здесь частью уравнения, поскольку у вас есть только один кабель, подключенный к интерфейсу связи.

решение2

Я сделал клон VM (с помощью VMware) и у меня возникла та же проблема. Сетевая карта из новой VM имела новый MAC-адрес. Есть способ исправить это (я уже делал это в прошлом), но поскольку я торопился, я удалил новую VM, и когда я снова клонировал ее со старым MAC-адресом, все было в порядке.

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