Static Multicast Routing: различия между версиями

Материал из ALT Linux Wiki
 
(не показано 16 промежуточных версий 5 участников)
Строка 5: Строка 5:
=== Ссылки ===
=== Ссылки ===


* [http://ru.wikipedia.org/wiki/Multicast Статья про Multicast на Wikipedia]
* [[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-маршрутизации]]


На шлюзе должен должен быть разрешена пересылка сетевых пакетов (forwarding) и запущен демон multicast-маршрутизации. Мы рекомендуем использовать в качестве такого демона '''igmpproxy'''.
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 и пакет демона multicast-маршрутизации [http://sisyphus.ru/ru/srpm/Sisyphus/igmpproxy igmpproxy] из соответствующего репозитория:
Для начала необходимо установить дистрибутив 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''' и '''wireshark'''
Для мониторинга можно установить пакеты '''tcpdump''', '''wireshark''' и '''iperf'''


Все манипуляции осуществляются под правами пользователя ''root''.
Все манипуляции осуществляются под правами пользователя ''root''.
Строка 42: Строка 44:
  quickleave
  quickleave
  phyint eth0 upstream  ratelimit 0  threshold 1
  phyint eth0 upstream  ratelimit 0  threshold 1
        altnet 192.168.0.0/24
  phyint eth1 downstream  ratelimit 0  threshold 1
  phyint eth1 downstream  ratelimit 0  threshold 1
  phyint lo disabled
  phyint lo disabled


В параметрах altnet обычно указываются маски сети, в которых разрешена маршрутизация. В примере ''192.168.0.0/24'' — маска локальной сети.


Для дистрибутивов на базе Пятой платформы файл '''/etc/igmpproxy.conf''':


quickleave
 
phyint breth0 upstream  ratelimit 0  threshold 1
Для дистрибутивов на базе Пятой платформы файл '''/etc/igmpproxy.conf''' вместо eth0 и eth1 исполь-зуйте breth0 и breth1 соответственно.
        altnet 192.168.0.0/24
phyint breth1 downstream  ratelimit 0  threshold 1
phyint lo disabled


=== Настройка маршрутизации ===
=== Настройка маршрутизации ===
Строка 99: Строка 95:
  igmpproxy /etc/igmpproxy.conf
  igmpproxy /etc/igmpproxy.conf


Журнал работы igmpproxy ведётся в /vat/log/messages. Для отладки можно запустить командой ''igmpproxy -d /etc/igmpproxy.conf''
Журнал работы igmpproxy ведётся в /var/log/messages. Для отладки можно запустить командой ''igmpproxy -d /etc/igmpproxy.conf''


=== Проверка работы ===
=== Проверка работы ===
Строка 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_vif
 
  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

Текущая версия от 12:29, 26 ноября 2019


Настройка статической multicast-маршрутизации на дистрибутивах ALT Linux.

Ссылки

Общие понятия

Рассмотрим типичную схему multicast-маршрутизации с выделенным сервером, имеющим два сетевых интерфейса:

  • eth0 — публичный интерфейс, на который придет поток от провайдера;
  • eth1 — интерфейс в локальную сеть, в которой находятся клиенты.


Типовая схема multicast-маршрутизации

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