Назад | Перейти на главную страницу

Почему пакеты, отправленные через libpcap, фильтруются для локального хоста?

У меня есть программное обеспечение-симулятор, работающее на Linux (linux_host) в котором еще один линукс (linux_sim) это работает. Симулятор использует libpcap для доступа к Ethernet, чтобы обеспечить имитацию сети на linux_sim. Сеть запущена linux_host и linux_sim ХОРОШО. Я могу связаться с любым хостом в локальной сети из linux_sim (он использует DHCP, например, для настройки IP).

Проблема в том, что пакеты, отправленные из linux_sim не доходить linux_host, однако они движутся в обратном направлении, нормально. Последнее я могу доказать с помощью wirehark, работающего на linux_host: если я пингую linux_sim на linux_host - Я вижу запросы и ответы ICMP (от linux_sim) которые не достигают linux_host, если пингую наоборот - вижу только ICMP запросы (от linux_sim).

Следующее изображает примерно мою архитектуру:

                   LAN
                    |
   linux_host-----[eth0]
                    |              
                  libpcap         
                    |
                 simulator
                    |
                linux_sim

PS

linux_host и linux_sim имеют разные MAC-адреса, IP-адреса и из локальной сети выглядят как независимые хосты Linux.

Я пробовал на трех разных Linux-машинах с одинаковым результатом (с Debian, CentOS и Gentoo).

Итак, что вы можете порекомендовать для проверки / настройки / настройки в этой ситуации? Поскольку я полагаю, что требуется необычная конфигурация маршрутизации / фильтрации для linux_host в таком случае.

ОБНОВИТЬ

Широковещательный трафик идет из linux_sim к linux_host поскольку я вижу, что IP-адрес разрешен с помощью ARP (на широковещательные запросы отправляются ответы), ОК, когда начинается пинг.

Я думаю, что отличным тестом было бы разместить linux_host и linux_sim в разных подсетях. Поместите маршрутизатор (возможно, другой Linux-бокс) в эту VLAN и дайте ему там два субинтерфейса с IP-адресами в обеих подсетях, чтобы он мог маршрутизировать между блоками. Я думаю, вы столкнулись с какой-то проблемой с обнаружением обратного пути. Вы это уже отключили?

http://www.wlug.org.nz/ReversePathFiltering

У вас мало информации о том, как настроена ваша сеть. Если ваш симулятор получает доступ к внешнему миру через интерфейс моста, вы должны учитывать, что делает оборудование NIC (и его драйвер). Например, на большинстве новых сетевых адаптеров Intel вам необходимо отключить GRO, чтобы TCP работал с виртуальными машинами, подключенными к мосту. Также часто возникают проблемы с разгрузкой оборудования NIC и IO-SRV. Просмотрите документацию к драйверам, чтобы узнать о мостах.