Static Multicast Routing
Настройка статической multicast-маршрутизации на дистрибутивах ALT Linux.
Ссылки
- Статья про Multicast на Wikipedia
- Multicast over TCP/IP HOWTO (англ.)
- Организация доступа к IPTV через NAT
- Multicast forward/routing Linux, OpenBSD (iptv)
- Как пробросить IPTV
Общие понятия
Рассмотрим типичную схему multicast-маршрутизации с выделенным сервером, имеющим два сетевых интерфейса:
- eth0 — публичный интерфейс, на который придет поток от провайдера;
- eth1 — интерфейс в локальную сеть, в которой находятся клиенты.
Примечание: интерфейсы в дистрибутивах на базе Пятой платформы будут соответственно breth0 и breth1, однако мы не рекомендуем делать на них маршрутизацию.
Подготовка шлюза
Для начала необходимо установить дистрибутив ALT Linux и пакет демона multicast-маршрутизации igmpproxy из соответствующего репозитория:
apt-get update apt-get install igmpproxy
Также необходимы пакеты iptables net-tools iproute2, в дистрибутивах ALT Linux они присутствуют по умолчанию.
Для мониторинга можно установить пакеты tcpdump и wireshark
Все манипуляции осуществляются под правами пользователя root.
Конфигурация
Файл /etc/igmpproxy.conf:
quickleave phyint eth0 upstream ratelimit 0 threshold 1 altnet 192.168.0.0/24 phyint eth1 downstream ratelimit 0 threshold 1 phyint lo disabled
В параметрах altnet обычно указываются маски сети, в которых разрешена маршрутизация. В примере 192.168.0.0/24 — маска локальной сети.
Для дистрибутивов на базе Пятой платформы файл /etc/igmpproxy.conf:
quickleave phyint breth0 upstream ratelimit 0 threshold 1 altnet 192.168.0.0/24 phyint breth1 downstream ratelimit 0 threshold 1 phyint lo disabled
Настройка маршрутизации
1. Шлюз должен быть настроен для маршрутизации сетевых пакетов:
- Находится в режиме "Шлюз" в модуле "Брандмауэр" в дистрибутивах на базе Пятой платформы;
- или настраиваем вручную:
echo 1 > /proc/sys/net/ipv4/conf/default/forwarding
Отключаем reverse path filtering:
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
Для ядер 2.6.x указываем версию IGMP (igmpproxy поддерживает только IGMPv1 и IGMPv2 на внутреннем интерфейсе):
echo 1 > /proc/sys/net/ipv4/conf/eth0/force_igmp_version echo 1 > /proc/sys/net/ipv4/conf/eth1/force_igmp_version
2. Проверяем готовность к маршрутизации:
[root@ham1 ~]# less /proc/config.gz | grep '\(MROUTE\|MULTICAST\)' CONFIG_IP_MULTICAST=y CONFIG_IP_MROUTE=y [root@ham1 ~]# cat /proc/sys/net/ipv4/conf/default/forwarding 1 [root@ham1 ~]# cat /proc/sys/net/ipv4/conf/eth0/rp_filter 0 [root@ham1 ~]# cat /proc/sys/net/ipv4/conf/eth0/force_igmp_version 1 [root@ham1 ~]# cat /proc/sys/net/ipv4/conf/eth1/force_igmp_version 1
3. Настраиваем цепочки iptables для работы со специальными multicast-подсетями:
iptables -I INPUT -d 224.0.0.0/4 -j ACCEPT iptables -I FORWARD -d 224.0.0.0/4 -j ACCEPT
4. Прописываем маршрут:
route add -net 224.0.0.0/4 dev eth1
5. Запускаем демона:
igmpproxy /etc/igmpproxy.conf
Журнал работы igmpproxy ведётся в /vat/log/messages. Для отладки можно запустить командой igmpproxy -d /etc/igmpproxy.conf
Проверка работы
После запуска igmpproxy должны появится соответствующие флаги:
[root@ham1 ~]# cat /proc/sys/net/ipv4/conf/breth0/mc_forwarding 1 [root@ham1 ~]# cat /proc/sys/net/ipv4/conf/breth1/mc_forwarding 1
В файлах состояния ядра появится записи:
cat /proc/net/igmp cat /proc/net/dev_mcast cat /proc/net/ip_mr_vif cat /proc/net/ip_mr_cache