Получение многоадресной рассылки на сервере с несколькими интерфейсами (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 сокетов.