Инструкция для желающих настроить Multicast Routing на Linux шлюзе, обеспечивающем работу клиентов через NAT.
Для переброса IGMP-трафика между подсетями будем использовать демон igmpproxy (http://sourceforge.net/projects/igmpproxy)Ставим IGMP Proxy из пакетов используемого дистрибутива или устанавливаем из исходных текстов:
# tar -zxf igmpproxy-src-0.1.tar.gz
# cd igmpproxy/
# less README
# cd src/
# make && make installПравим файл конфигурации /etc/igmpproxy.conf. В представленном примере, интерфейс eth0 смотрит в публичную сеть провайдера Mig Telecom, а eth1 в домашнюю сеть.
# Enable Quickleave mode (Sends Leave instantly)
# Эту строчку раскомментируют только в том случае,
# если внути всего лишь один клиент IP TV#quickleave
# Configuration for eth0 (Upstream Interface)
# Здесь указаны параметры для публичного интерфейса,
# на который придет поток от провайдераphyint eth0 upstream ratelimit 0 threshold 1
altnet 10.20.0.0/16
altnet 88.210.40.0/24
altnet 80.240.211.0/22# Configuration for eth1 (Downstream Interface)
# Типовая конфигурация для внутреннего интерфейсаphyint eth1 downstream ratelimit 0 threshold 1
# Configuration for eth2 (Disabled Interface)
# eth2 в системе есть, но не используется никем, отключаемphyint eth2 disabled
Запускаем igmpproxy и переходим к небольшой конфигурации IPTables.
Вот этот набор правил понадобился для корректной работы пакетного фильтра, разрешается весь входящий мультикст, разрешается его форвардинг и плюс ко всему добавляем в TTL 1, без этого добавления не работает если пакеты от провайдера приходят с минимально выставленным TTL.modprobe ipt_TTL
iptables -t filter -A INPUT -d 224.0.0.0/240.0.0.0 -i eth0 -j ACCEPT
iptables -t filter -A INPUT -s 224.0.0.0/240.0.0.0 -i eth0 -j ACCEPT
iptables -t filter -A FORWARD -d 224.0.0.0/240.0.0.0 -j ACCEPT
iptables -t filter -A FORWARD -s 224.0.0.0/240.0.0.0 -j ACCEPT
iptables -t mangle -A PREROUTING -d 224.0.0.0/240.0.0.0 -p udp -j TTL --ttl-inc 1URL: http://www.tonchik.ru/pub/over/Linux%20Multicast%2...
Обсуждается: http://www.opennet.me/tips/info/2235.shtml
> iptables -t filter -A INPUT -d 224.0.0.0/240.0.0.0 -i eth0 -j ACCEPT
> iptables -t filter -A INPUT -s 224.0.0.0/240.0.0.0 -i eth0 -j ACCEPTэто не надо
iptables -t filter -A INPUT -d 224.0.0.0/240.0.0.0 -i eth0 -j ACCEPT
надо, без этого не заработает.
Где же здесь NAT???
ну вообще видимо в eth1 воткнута локалка
а eth0 смотрит на провайдера, вот и нат
в данном случае NAT для iptv не используется.
У меня на работе уже год igmpproxy стоит, ничего так - но некоторые каналы тормозят, и сетка забивается....
Для pf
http://un.geeig.net/openbsd-vdsl.html#igmp
Спасибо, попробую на FreeBSD'овом шлюзе такой набор.
Без IPTV уже 3 года сижу. Никак pf не хочет пропускать multicast. Выключаешь его pfctl -d и всё работает :)
И да, во FreeBSD 8.0 вроде появилась поддержка IGMPv3 из каропки, надо попробовать :)
pass on $ext_if inet proto igmp to any allow-opts
pass in on $ext_if inet proto udp to any port {1234, 9875}pass on $int_if inet proto igmp to any allow-opts
pass out on $int_if inet proto udp to any port {1234, 9875}
udpxy решает :)
И ненадо париться и возиться с мультикастом внутри локалки.
Особливо в плане мелких девайсов наподобии тогоже асус роутера 500.
Не пойму я что-то. Зачем нам igmpproxy, если мы увеличиваем TTL? Ведь смысл igmpproxy и заключается в том, чтобы получать от пользователя igmp-запросы и пересылать их провайдеру и наоборот, принимать от провайдера и передавать пользователю.
Никак не могу понять что мешает igmpproxy запуститься. Он сам ругается так MC-Router API already in use; Errno(48): Address already in useНо других копий igmpproxy не запущено:
[3|root@gw| ~ ] ps ax |grep igmpproxy
30015 p0 R+ 0:00,00 grep igmpproxy
[3|root@gw| ~ ]
Так же не занят порт 1234:
[3|root@gw| ~ ] sockstat -4 -l |grep 1234
[3|root@gw| ~ ]Куда ещё копать? Нифига не понятно даже точно ли на этот порт ругается софтина, поскольку она ничего не пишет про порт и интерфейс.
Он сам ругается так MC-Router API already in use; Errno(48): Address already in useвыключи другие программы роутинга.....
Если это дополнение к программному роутеру, то вероятно надо исключить прохождение этого трафика через него. В данном случае запрос наружу пойдёт через NAT роутера.