Пытаюсь настроить компьютер с Linux как роутер. Сейчас пока пробую на виртуальных машинах это сделать, потом в случае успеха перенесу на реальные. Сейчас загвоздка возникла на этапе раздачи Multicast-потоков.
Имеем: сервер на бубунту 11.10
eth0 — смотрит во внешнюю сеть, eth1 — во внутреннюю (в моём случае это «внутренняя сеть» virtualbox'а).
Unicast работает. Для iptables пока задавал только следующие правила:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 ! -d 192.168.0.0/24 -j MASQUERADE
iptables -t mangle -A FORWARD -p tcp -m tcp --tcp-flags RST,SYN SYN -j TCPMSS --clamp-mss-to-pmtu
На самом сервере мультикаст работает. Пытаюсь запустить igmpproxy со следующим конфигом:
quickleave
phyint eth0 upstream ratelimit 0 threshold 1
altnet 192.168.0.0/16
altnet 16.16.16.4/24
phyint eth1 downstream ratelimit 0 threshold 1
Для того, чтобы понять, откуда вещаются multicast-потоки, смотрел tcpdump'ом, он выдаёт:
01:15:16.824235 IP (tos 0x0, ttl 3, id 0, offset 0, flags [DF], proto UDP (17), length 1344)
16.16.16.4.0 > 224.0.61.1.1235: [no cksum] UDP, length 1316
То есть. этот канал (224.0.61.1:1235), если я правильно понял, вещается с 16.16.16.4. Соответственно, исходя из этого, добавил строку altnet 192.168.0.0/16.
Запускаю igmpproxy. В результате на клиенте ничего не показывает.
Пробовал на сервере добавлять маршрут route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0, принудительно указывать ядру версию igmp — ничего не помогает.
Собственно, куда копать? Где я что мог упустить?
И если получится, то нет ли решения, чтобы не нужно было искать, с каких адресов идёт вещание и указывать их, в нашем случае в igmpproxy.conf? На аппаратных роутерах ведь обычно ничего такого не надо указывать.