Инструкция для желающих настроить 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 1
|