Static Multicast Routing: различия между версиями
Нет описания правки |
|||
(не показано 8 промежуточных версий 5 участников) | |||
Строка 5: | Строка 5: | ||
=== Ссылки === | === Ссылки === | ||
* [ | * [[ruwp:Multicast|Статья про Multicast на Wikipedia]] | ||
* [http://tldp.org/HOWTO/Multicast-HOWTO.html Multicast over TCP/IP HOWTO] (англ.) | * [http://tldp.org/HOWTO/Multicast-HOWTO.html Multicast over TCP/IP HOWTO] (англ.) | ||
* [http://www.opennet.ru/tips/info/2235.shtml Организация доступа к IPTV через NAT] | * [http://www.opennet.ru/tips/info/2235.shtml Организация доступа к IPTV через NAT] | ||
Строка 20: | Строка 20: | ||
[[Файл:Multicast-scheme.png|frame|center|Типовая схема multicast-маршрутизации]] | [[Файл:Multicast-scheme.png|frame|center|Типовая схема multicast-маршрутизации]] | ||
Multicast-маршрутизация осуществляется по протоколу [ | Multicast-маршрутизация осуществляется по протоколу [[ruwp:IGMP|IGMP]]. IGMP (англ. Internet Group Management Protocol — протокол управления группами Интернета) — протокол управления групповой (multicast) передачей данных в сетях, основанных на протоколе IP. В данном руководстве используется IGMP версии 1. | ||
На шлюзе | На шлюзе должна быть разрешена пересылка сетевых пакетов (forwarding) и запущен демон multicast-маршрутизации. Мы рекомендуем использовать в качестве такого демона '''igmpproxy'''. При этом клиенты должны явно присоединиться к MC-группе. Вы можете явно назначить multicast-маршруты без этого требования к клиентам, если используете пакет '''smcroute'''. | ||
Примечание: интерфейсы в дистрибутивах на базе Пятой платформы будут соответственно breth0 и breth1, однако мы не рекомендуем делать на них маршрутизацию. | Примечание: интерфейсы в дистрибутивах на базе Пятой платформы будут соответственно breth0 и breth1, однако мы не рекомендуем делать на них маршрутизацию. | ||
Строка 28: | Строка 28: | ||
=== Подготовка шлюза === | === Подготовка шлюза === | ||
Для начала необходимо установить дистрибутив ALT Linux и пакет демон multicast-маршрутизации [http:// | Для начала необходимо установить дистрибутив ALT Linux и пакет демон multicast-маршрутизации [http://packages.altlinux.org/ru/Sisyphus/srpms/igmpproxy igmpproxy] и программу настройки статических маршрутов [http://packages.altlinux.org/ru/Sisyphus/srpms/smcroute smcroute] из соответствующего репозитория: | ||
apt-get update | apt-get update | ||
apt-get install igmpproxy smcroute | apt-get install igmpproxy smcroute | ||
Строка 95: | Строка 95: | ||
igmpproxy /etc/igmpproxy.conf | igmpproxy /etc/igmpproxy.conf | ||
Журнал работы igmpproxy ведётся в / | Журнал работы igmpproxy ведётся в /var/log/messages. Для отладки можно запустить командой ''igmpproxy -d /etc/igmpproxy.conf'' | ||
=== Проверка работы === | === Проверка работы === | ||
Строка 120: | Строка 120: | ||
=== Настройка статической маршрутизации === | === Настройка статической маршрутизации === | ||
Для статической маршрутизации демон igmpproxy запускать не нужно. | |||
1. Запускаем демон: | |||
smcroute -d | |||
2. Настраиваем маршруты: | |||
smcroute -a eth0 10.1.0.18 224.2.2.2 eth1 | |||
где | |||
* eth0 — входящий интерфейс для трафика | |||
* 10.1.0.18 — адрес интерфейса-источника трафика (можно получить по команде ''tcpdump -i eth0 dst host 224.2.2.2'') | |||
* 224.2.2.2 — MC-группа в сети 224.0.0.0/4 | |||
* eth1 — один или несколько внешних интерфейсов | |||
3. Присоединяем машину в MC-группу: | |||
smcroute -j breth1 224.2.2.2 | |||
4. Просмотр маршрутов: | |||
[root@ham1 ~]# ip mroute show | |||
(10.1.0.18, 224.2.2.2) Iif: eth0 Oifs: eth1 | |||
[root@ham1 ~]# cat /proc/net/ip_mr_cache | |||
Group Origin Iif Pkts Bytes Wrong Oifs | |||
020202E0 1200010A 0 0 0 0 1:1 |
Текущая версия от 15:29, 26 ноября 2019
Настройка статической multicast-маршрутизации на дистрибутивах ALT Linux.
Ссылки
- Статья про Multicast на Wikipedia
- Multicast over TCP/IP HOWTO (англ.)
- Организация доступа к IPTV через NAT
- Multicast forward/routing Linux, OpenBSD (iptv)
- Как пробросить IPTV
Общие понятия
Рассмотрим типичную схему multicast-маршрутизации с выделенным сервером, имеющим два сетевых интерфейса:
- eth0 — публичный интерфейс, на который придет поток от провайдера;
- eth1 — интерфейс в локальную сеть, в которой находятся клиенты.
Multicast-маршрутизация осуществляется по протоколу IGMP. IGMP (англ. Internet Group Management Protocol — протокол управления группами Интернета) — протокол управления групповой (multicast) передачей данных в сетях, основанных на протоколе IP. В данном руководстве используется IGMP версии 1.
На шлюзе должна быть разрешена пересылка сетевых пакетов (forwarding) и запущен демон multicast-маршрутизации. Мы рекомендуем использовать в качестве такого демона igmpproxy. При этом клиенты должны явно присоединиться к MC-группе. Вы можете явно назначить multicast-маршруты без этого требования к клиентам, если используете пакет smcroute.
Примечание: интерфейсы в дистрибутивах на базе Пятой платформы будут соответственно breth0 и breth1, однако мы не рекомендуем делать на них маршрутизацию.
Подготовка шлюза
Для начала необходимо установить дистрибутив ALT Linux и пакет демон multicast-маршрутизации igmpproxy и программу настройки статических маршрутов smcroute из соответствующего репозитория:
apt-get update apt-get install igmpproxy smcroute
Также необходимы пакеты iptables net-tools iproute2, в дистрибутивах ALT Linux они присутствуют по умолчанию.
Для мониторинга можно установить пакеты tcpdump, wireshark и iperf
Все манипуляции осуществляются под правами пользователя root.
Конфигурация
Файл /etc/igmpproxy.conf:
quickleave phyint eth0 upstream ratelimit 0 threshold 1 phyint eth1 downstream ratelimit 0 threshold 1 phyint lo disabled
Для дистрибутивов на базе Пятой платформы файл /etc/igmpproxy.conf вместо eth0 и eth1 исполь-зуйте breth0 и breth1 соответственно.
Настройка маршрутизации
1. Шлюз должен быть настроен для маршрутизации сетевых пакетов:
- Находится в режиме "Шлюз" в модуле "Брандмауэр" в дистрибутивах на базе Пятой платформы;
- или настраиваем вручную: в файле /etc/net/sysctl.conf параметр net.ipv4.ip_forward должен быть установлен в "1":
net.ipv4.ip_forward = 1
Также в файл /etc/net/sysctl.conf добавляем параметры: отключаем reverse path filtering для eth0 и для ядер 2.6.x указываем версию IGMP (igmpproxy поддерживает только IGMPv1 и IGMPv2 на внутреннем интерфейсе):
net.ipv4.conf.eth0.rp_filter=0 net.ipv4.conf.eth0.force_igmp_version=1 net.ipv4.conf.eth1.force_igmp_version=1
Примечание: после внесения изменений в этот файл необходимо перезагрузить компьютер.
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 ведётся в /var/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
Маршруты можно найти в файлах:
Активные маршруты:
/proc/net/ip_mr_cache
Виртуальные интерфейсы для маршрутизации:
/proc/net/ip_mr_vif
Настройка статической маршрутизации
Для статической маршрутизации демон igmpproxy запускать не нужно.
1. Запускаем демон:
smcroute -d
2. Настраиваем маршруты:
smcroute -a eth0 10.1.0.18 224.2.2.2 eth1
где
- eth0 — входящий интерфейс для трафика
- 10.1.0.18 — адрес интерфейса-источника трафика (можно получить по команде tcpdump -i eth0 dst host 224.2.2.2)
- 224.2.2.2 — MC-группа в сети 224.0.0.0/4
- eth1 — один или несколько внешних интерфейсов
3. Присоединяем машину в MC-группу:
smcroute -j breth1 224.2.2.2
4. Просмотр маршрутов:
[root@ham1 ~]# ip mroute show (10.1.0.18, 224.2.2.2) Iif: eth0 Oifs: eth1 [root@ham1 ~]# cat /proc/net/ip_mr_cache Group Origin Iif Pkts Bytes Wrong Oifs 020202E0 1200010A 0 0 0 0 1:1