получение многоадресной рассылки на сервере с несколькими интерфейсами (linux) - PullRequest
8 голосов
/ 30 марта 2011

Чтобы получить многоадресную рассылку на моем сетевом адаптере не по умолчанию (dvb), я делаю следующее:

  • открываем сокет (AF_INET, SOCK_DGRAM)
  • присоединяем адрес многоадресной рассылки с IP_ADD_MEMBERSHIP наинтерфейс dvb
  • связывает адрес многоадресной рассылки (обратите внимание, что распространенной ошибкой является привязка "0.0.0.0", а затем получение на этом сокете даже многоадресной рассылки, которая вам не интересна) и порт

на данный момент единственный способ получить необходимые многоадресные пакеты - это добавить в таблицу маршрутизации правило для доступа к сети, в которой отправитель (другая сеть) проходит через dvb, как если бы dvb должен ответить на многоадресную рассылку.отправитель;скажем, своего рода режим многоадресной рассылки отправителя.Кто-нибудь знает, что происходит?Проблема меня раздражает, потому что в принципе я не знаю ip отправителя.

Ответы [ 2 ]

11 голосов
/ 30 марта 2011

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

Вы можете отключить его для каждого интерфейса с помощью sysctl /proc/sys/net/ipv4/conf/<if>/rp_filter.

0 голосов
/ 30 марта 2011

связать адрес многоадресной рассылки

Это определенно неправильно.Вы должны связать с реальным IP-адресом реального адаптера, или 0.0.0.0.

обратите внимание, что распространенная ошибка заключается в связывании "0.0.0.0"

не ошибкаЭто правильная процедура, если только вы не хотите прослушивать только один IP-адрес.

, а затем получать по этому сокету даже многоадресную рассылку, которая вас не интересует

Я незнаю, что это значит.

в принципе я не знаю ip отправителя

IP-адрес отправителя любой дейтаграммы UDP доступен через API сокетов.

...