Вопрос или проблема
Я пытаюсь перевести мультикаст трафик в юникаст для отправки через Интернет.
Я включил ip forwarding и попробовал использовать следующее правило:
iptables -t nat -A PREROUTING -i eth0 -d 239.0.0.0 -j DNAT --to-destination 192.0.2.1
Однако трафик никогда не отправляется.
Есть ли способ сделать то, что я пытаюсь, без настройки туннеля?
Одним словом, нет. 😀
К сожалению, мультикаст немного особенный.
Также, вероятно, вы не добьетесь успеха, передавая его через туннель IPsec VPN.
Тем не менее, ваш лучший вариант — использовать GRE туннель, и если вам нужна безопасность, вы можете передавать туннель GRE через туннель IPsec.
Хорошее руководство по настройке GRE на Linux: здесь
Netcat loopback relay
Алекс прав в традиционном смысле, но мы все же можем обойти это ограничение для небольших случаев использования.
Я не уверен, насколько успешно это будет для разных протоколов, но я смог получить UDP мультикаст данные в пользовательском пространстве, используя netcat на хосте, а затем повторно упаковать данные для проводного юникаста на другой хост, направляя данные обратно в netcat. Вам нужно будет
iptables -A INPUT -p icmp --icmp-type destination-unreachable -s 10.0.0.2 -j DROP
иначе nc разорвет соединение, если приемник выйдет из строя
nc -klu 1234 | nc -us 10.0.0.1 10.0.0.2 5678
.
Ответ или решение
Перевод мультикастового трафика в уникастовый — задача, которая требует глубокого понимания сетевых технологий и использования особых инструментов. По существу, мультикаст и уникаст представляют собой два различных сетевых подхода: мультикаст используется для передачи данных сразу нескольким получателям в локальной сети, в то время как уникаст ориентирован на доставку данных от одного отправителя к одному получателю, часто через различные сети, в том числе и Интернет.
Теория
На теоретическом уровне, мультикаст-трафик распределяется по специальным адресам в диапазоне от 224.0.0.0 до 239.255.255.255 и не предполагается для пересылки через Интернет обычными методами, поскольку он требует поддержки маршрутизации мультикаста сетевым оборудованием на пути следования. По сети Интернет предполагается в основном уникастовое взаимодействие.
Использование правила DNAT (Destination Network Address Translation) в iptables, как показано в вашем примере:
iptables -t nat -A PREROUTING -i eth0 -d 239.0.0.0 -j DNAT --to-destination 192.0.2.1
не сможет самостоятельно обеспечить преобразование мультикаст трафика в уникаст. Причина в том, что это правило изменяет только адрес назначения в заголовке IP пакета, но не трансформирует способ передачи или протокол.
Пример
Давайте рассмотрим более практический пример, взяв во внимание рекомендации по использованию GRE-туннеля:
GRE (Generic Routing Encapsulation) туннель — это метод инкапсуляции любого другого протокола в IP для пересылки через сети, которые не поддерживают требуемый протокол нативно. GRE способен инкапсулировать как мультикаст, так и уникаст пакеты, тем самым обеспечивая необходимую транспортировку между университетскими сетями.
Применение
Для настройки GRE туннеля на Linux-сервере вам понадобится:
-
Настроить GRE-интерфейс:
Сначала необходимо создать GRE-интерфейс. Это можно сделать с помощью командыip
.ip tunnel add gre1 mode gre remote [IP-адрес удаленной стороны] local [Ваш IP-адрес] ttl 255 ip link set gre1 up ip addr add [Локальный GRE IP] dev gre1
-
Пропустить немаршрутизируемый трафик через туннель:
После создания туннеля, любые пакеты, которые вам необходимо переслать через Интернет, должны быть направлены через этот туннель. Это достигается с использованием правил маршрутизации:ip route add [Мультикаст-сеть] dev gre1
-
Сети GRE и IPsec для безопасности:
В случае если требуются дополнительные меры безопасности, GRE-туннель может быть защищён с помощью IPsec. Основная задача IPsec в данном контексте — обеспечить безопасность передачи данных путём шифрования содержимого и обеспечения аутентификации.Настройка IPsec может быть выполнена с использованием инструментов как
Strongswan
илиOpenswan
, которые предоставляют обширный функционал для настройки безопасных трансляций.
Заключение
Для решения задачи преобразования мультикаст в уникаст для передачи через Интернет рекомендуется использовать туннельные технологии. GRE представляет собой наиболее подходящее решение, позволяющее обойти ограничения на транспортировку мультикаст-трафика стандартными средствами через Интернет. Без использования туннелирования решить данную задачу будет проблематично. Сетевые администраторы должны быть готовы работать с инструментами, поддерживающими настройку и мониторинг таких туннелей, а также угрозы безопасности, если они передают конфиденциальную информацию.