Получение многоадресной рассылки на сервере с несколькими интерфейсами (linux)

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

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

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

2 ответа

Решение

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам