Static Multicast Routing
Материал из ALT Linux Wiki
(→Проверка работы) |
Yaleks (обсуждение | вклад) м |
||
(15 промежуточных версий не показаны.) | |||
Строка 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-маршрутизация осуществляется по протоколу [[ruwp:IGMP|IGMP]]. IGMP (англ. Internet Group Management Protocol — протокол управления группами Интернета) — протокол управления групповой (multicast) передачей данных в сетях, основанных на протоколе IP. В данном руководстве используется IGMP версии 1. |
+ | |||
+ | На шлюзе должна быть разрешена пересылка сетевых пакетов (forwarding) и запущен демон multicast-маршрутизации. Мы рекомендуем использовать в качестве такого демона '''igmpproxy'''. При этом клиенты должны явно присоединиться к MC-группе. Вы можете явно назначить multicast-маршруты без этого требования к клиентам, если используете пакет '''smcroute'''. | ||
Примечание: интерфейсы в дистрибутивах на базе Пятой платформы будут соответственно breth0 и breth1, однако мы не рекомендуем делать на них маршрутизацию. | Примечание: интерфейсы в дистрибутивах на базе Пятой платформы будут соответственно breth0 и breth1, однако мы не рекомендуем делать на них маршрутизацию. | ||
Строка 26: | Строка 28: | ||
=== Подготовка шлюза === | === Подготовка шлюза === | ||
- | Для начала необходимо установить дистрибутив ALT Linux и пакет | + | Для начала необходимо установить дистрибутив 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 | + | apt-get install igmpproxy smcroute |
Также необходимы пакеты '''iptables net-tools iproute2''', в дистрибутивах ALT Linux они присутствуют по умолчанию. | Также необходимы пакеты '''iptables net-tools iproute2''', в дистрибутивах ALT Linux они присутствуют по умолчанию. | ||
- | Для мониторинга можно установить пакеты '''tcpdump''' | + | Для мониторинга можно установить пакеты '''tcpdump''', '''wireshark''' и '''iperf''' |
Все манипуляции осуществляются под правами пользователя ''root''. | Все манипуляции осуществляются под правами пользователя ''root''. | ||
Строка 42: | Строка 44: | ||
quickleave | quickleave | ||
phyint eth0 upstream ratelimit 0 threshold 1 | phyint eth0 upstream ratelimit 0 threshold 1 | ||
- | |||
phyint eth1 downstream ratelimit 0 threshold 1 | phyint eth1 downstream ratelimit 0 threshold 1 | ||
phyint lo disabled | phyint lo disabled | ||
- | |||
- | |||
- | + | ||
- | + | Для дистрибутивов на базе Пятой платформы файл '''/etc/igmpproxy.conf''' вместо eth0 и eth1 исполь-зуйте breth0 и breth1 соответственно. | |
- | + | ||
- | + | ||
- | + | ||
=== Настройка маршрутизации === | === Настройка маршрутизации === | ||
Строка 114: | Строка 110: | ||
cat /proc/net/igmp | cat /proc/net/igmp | ||
cat /proc/net/dev_mcast | cat /proc/net/dev_mcast | ||
- | + | ||
- | cat /proc/net/ip_mr_cache | + | Маршруты можно найти в файлах: |
+ | |||
+ | Активные маршруты: | ||
+ | /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 |
Текущая версия на 10:25, 18 октября 2015
Настройка статической 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 ведётся в /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
Маршруты можно найти в файлах:
Активные маршруты:
/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