Udp proxy настройка в linux

Обновлено: 07.07.2024

Следует отметить, что не все устройства такие как смартфоны, планшеты, IPTV-приставки, телевизоры Smart TV и Android TV, а также игровые консоли и различные онлайн ТВ-плееры способны воспроизводить мультикаст трафик (multicast) напрямую. В таких случаях необходимо указывать в настройках самих устройств, или в установленных на них приложениях и программах для просмотра IPTV непосредственно IP-адрес и порт прокси (proxy), указанные в настройках Wi-Fi роутера (маршрутизатора), или прокси-сервера (proxy-server) в локальной (домашней) сети. В роли такого сервера может выступать не только роутер, но и один из ваших персональных компьютеров, подключенных к такой малой сети. Например этот адрес может выглядеть так: 192.168.1.1:1234 .

И начнём мы с роутеров, так как в первую очередь организация домашней сети начинается именно с них и именно от их возможностей зависит, сможете вы смотреть IPTV вашего провайдера, или нет.

Настройка Proxy на Wi-Fi роутере (маршрутизаторе)

Имейте в виду, что при наличии и возможности включения IGMP Proxy , как в роутерах Zyxel Keenetic, его нужно обязательно включить.

Пример настройки UDPXY на роутере D-Link DIR-615

Настройка UDPXY на роутере D-Link DIR-615

Пример настройки UDPXY на роутере SNR-CPE-W4N

Настройки UDPXY на роутере SNR-CPE-W4N

Пример настройки UDP-прокси на интернет-центре Keenetic Ultra

  • Выбираем в настройках пункт Управление, а затем Общие настройки.

Общие настройки системы

  • Нажимаем кнопку Изменить набор компонентов.

Изменить набор компонентов в системе

Компонент операционной системы UDP-HTTP (UDPXY)

  • После установки компонента и перезагрузки устройства открываем пункт настроек Управление, затем Приложения.

Найти установленный компонент UDP-прокси в списке приложений

  • Ищем установленный компонент UDP-прокси.
  • Включаем прокси-сервер (переводим ползунок в правое положение).
  • Переходим в настройки компонента, нажав на ссылку UDP-прокси.

Включить UDP-прокси и перейти к настройкам

Назначить порт для UDP-proxy и выбрать нужный интерфейс

  • Сохраняем внесённые данные нажатием соответствующей кнопки.

После всех соответствующих настроек интернет-центра нужно указать (прописать) вручную IP-адрес и номер порта в настройках ваших устройств (виджетов, приложений, или программ), через которые вы хотите смотреть IPTV посредством прокси-сервера домашнего роутера. Если все данные указаны и введены вами верно, то телеканалы будут доступны для просмотра уже не по протоколу UDP, а по TCP.

Настройка Proxy на компьютере (прокси-сервер в домашней локальной сети)

Помочь в выборе подходящего Wi-Fi маршрутизатора вам помогут статьи на нашем сайте:


В особых сценариях с высокими требованиями в реальном времени простой протокол UDP по-прежнему является нашим основным методом. Протокол UDP не имеет механизма повторной передачи и также подходит для одновременной широковещательной передачи на несколько хостов, поэтому он очень подходит для таких сценариев, как конференции с несколькими людьми, игры в режиме реального времени, запросы DNS и т. Д. Каждый кадр видео и аудио может быть потерян, но абсолютно не передан повторно. , Когда сеть не в порядке, пользователи могут терпеть черный или звуковой сигнал, если вы неожиданно воспроизведете видеокадр или зазвучите несколько секунд назад, он испортится. При использовании протокола UDP в качестве протокола транспортного уровня для переноса информации мы должны столкнуться с проблемой выбора обратного прокси-сервера. Как правило, у нас есть несколько серверов интрасети для предоставления услуг клиентам. В настоящее время нам необходим обратный прокси-сервер перед нижестоящими пользователями для пересылки пакетов UDP и балансировки нагрузки в соответствии с состоянием каждого сервера в режиме реального времени. Введение использования сервера редко встречается в Интернете. В этой статье мы расскажем о принципе механизма сеанса протокола udp и о том, как настроить обратный прокси-сервер на основе протокола ugin nginx, в том числе о том, как поддерживать сеанс, прозрачную передачу ip клиента в службу восходящего потока приложений 3 вида решений.

Многие считают, что в протоколе udp отсутствует концепция обратного прокси-сервера и распределения нагрузки. В конце концов, UDP просто добавляет заголовок всего 8 байтов в IP-пакет.Как 8 байтов этой области могут описать функцию сеанса?


Рисунок 1 Протокол многоуровневой передачи пакетов UDP

В семислойной модели сети TCP / IP или OSI задачи каждого уровня настолько ясны:

Рисунок 2 заголовок IP-пакета


4. Транспортный уровень в основном включает в себя протокол TCP и протокол UDP. Основная задача этого уровня - обеспечить доступность порта, поскольку порт может принадлежать процессу. Когда GET-запрос chrome достигает хоста linux в соответствии с IP-адресом назначения уровня IP, операционная система linux находит его в соответствии с портом назначения в заголовке транспортного уровня. Процесс nginx, который слушает или recvfrom. Следовательно, независимо от того, какой протокол имеет транспортный уровень, заголовок должен иметь активный порт и порт назначения. Например, заголовок UDP на рисунке ниже:

Рисунок 3 UDP заголовок

Заголовок пакета TCP намного сложнее, чем UDP, потому что помимо достижения доступности порта TCP также обеспечивает надежный канал передачи данных, включая расширенные функции, такие как управление потоком, упорядоченная повторная сборка и мультиплексирование. Поскольку разделение пакетов и повторная сборка упомянутого выше уровня IP осуществляются на уровне IP, а уровень IP ненадежен, все массивы неэффективны, поэтому уровень TCP также определяет максимальную длину пакета MSS (максимальный размер сегмента). Эта MSS определенно меньше, чем MTU всех сетей в линии, поэтому TCP предпочитает разбивать пакеты на маленькие пакеты на уровне IP, чтобы избежать пакетирования на уровне IP. Заголовок пакета протокола UDP слишком прост, чтобы обеспечить такую ​​функцию, поэтому программа, разработанная на основе протокола UDP, требует, чтобы разработчик понял, что нет необходимости отправлять избыточные данные сразу.

С помощью вышеупомянутого резерва знаний мы можем выяснить, как UDP поддерживает сеансовое соединение. Диалог - это разговор. A может говорить с B, а B может возвращать другое предложение на основе содержания этого предложения. Это предложение может достигать A. Если этот механизм можно сохранить, естественно, будет разговор. UDP в порядке? конечно может. Например, клиент (инициатор запроса) сначала прослушивает порт Lc, как и его ухо, а поставщик услуг также прослушивает порт Ls на хосте для приема клиентских запросов. Клиент выбирает порт источника для отправки пакетов UDP на порт Ls сервера, а поставщик услуг отправляет порт ответа на порт Lc клиента, выбирая порт источника, чтобы можно было установить сеанс. Но каковы проблемы с этим механизмом?

Проблема должна рассматриваться вместе со сценой. Например: 1. Если клиент является браузером Chrome в Windows, как ему разрешить прослушивать порт? Порты будут конфликтовать. Если есть другие процессы, занимающие этот порт, он все еще не будет работать? 2. Если открыто несколько окон Chrome, что ответ на запрос, отправленный первым окном, должен быть получен вторым окном? 3. Что если процесс просто зависает после отправки запроса, а новое открытое окно получает старый ответ? и многое другое. Можно видеть, что это решение не подходит для взаимодействия пользовательских служб с сервером, поэтому видеоконференции и т.п. не работают.

Есть ли другой путь? Есть! Если исходный порт, используемый клиентом, также используется для получения ответа, отправленного сервером, вышеупомянутая проблема не существует. Как и протокол TCP, случайный исходный порт на стороне соединения всегда будет использоваться для передачи данных по соединению, пока соединение не будет закрыто.

Это решение предъявляет следующие требования к клиенту: не используйте метод, подобный sendto, практически любой язык обеспечивает инкапсуляцию такого метода для протокола UDP. Сначала вы должны использовать метод connect для получения сокета, а затем вызвать метод send для отправки запроса. Причина этого заключается в том, что 5 кортежей (исходный IP-адрес, исходный порт, целевой IP-адрес, целевой порт, протокол UDP) могут быть сохранены в ядре, так что исходный порт может принимать только пакеты UDP, отправленные целевым IP-адресом и портом, Вы можете использовать метод send несколько раз, чтобы передавать параметры IP-адреса и порта назначения каждый раз, когда отправляете.

Далее мы поговорим о том, как nginx использует обратный прокси-протокол протокола udp.

По сравнению с методом recvfrom, есть дополнительная структура msghdr, как показано ниже:

Msg_name - это исходный IP-адрес и исходный порт узла (указывающий на структуру sockaddr). Выше приведено определение библиотеки C. Подобные методы в других языках высокого уровня будут проще. Например, метод с тем же именем в Python определяется следующим образом:

Четвертый элемент возвращаемого кортежа - это равноправный IP-адрес и порт.

Выше показано, как nginx работает с обратным прокси-сервером udp. Фактическая конфигурация очень проста:

Опция udp в конфигурации прослушивания сообщает nginx, что это обратный прокси-сервер udp. Proxy_timeout и proxy_responses являются основными параметрами для поддержки механизма сеанса udp.

Наконец, давайте поговорим о том, как вышестоящий сервис может получить адрес клиента после обратного прокси-сервера nginx. Как показано на рисунке ниже, nginx отличается от переадресации IP-адресов, фактически он устанавливает новое соединение, поэтому при нормальных условиях восходящий поток не может получить адрес клиента:


Рисунок 4 Обратный прокси-сервер nginx маскирует IP-адрес клиента


Однако для поддержки разрешения прокси-протокола требуются вышестоящие сервисы, которые по-прежнему остаются нишей. Самое главное, что в настоящее время поддержка прокси-протокола в nginx ограничена только протоколом tcp и не поддерживает протокол udp. Мы можем посмотреть на его код:


Видно, что nginx в настоящее время не поддерживает прокси-протокол протокола udp (версия nginx под автором - 1.13.6).


Хотя протокол прокси поддерживает протокол UDP. Как это сделать?

Вариант 1: прозрачная передача IP-адреса

Вы можете использовать прозрачную передачу IP-адреса. Как показано ниже:


Рисунок 5 nginx в качестве четырехслойного обратного прокси для восходящей восходящей клиентской IP-схемы прозрачной передачи IP

Вот некоторые взломы между nginx и вышестоящими сервисами:

Это решение действительно применимо к TCP.

Вариант 2: DSR (восходящая служба не имеет общедоступной сети)

В дополнение к вышеприведенному решению, существует также решение Direct Server Return, то есть процесс nginx больше не вмешивается, когда восходящий поток возвращает пакеты. Это решение DSR подразделяется на два типа: первый предполагает отсутствие общедоступной сетевой карты на вышестоящем компьютере. Решение состоит в следующем:


Рисунок 6 Схема DSR, когда nginx действует как обратный прокси-сервер udp (восходящий без общедоступной сети)

Это решение делает следующие хаки:

1. Свяжите исходный ip и порт клиента с nginx одновременно, потому что апстрим не будет проходить процесс nginx после возврата пакета. В то же время proxy_responses также должен быть установлен в 0.

2. Как и в первом решении, измените шлюз по умолчанию в восходящем направлении на машину, на которой расположен nginx (подойдет любая машина с публичной сетью).

3. Измените iptables на хосте nginx, чтобы nginx мог переслать ответ, отправленный восходящим потоком, и в то же время изменить исходный ip и порт с восходящего на nginx. Например:

Вариант 3: DSR (восходящая служба имеет общедоступную сеть)

Другое решение DSR состоит в том, чтобы предполагать, что в восходящем направлении есть линия общего доступа, так что обратные пакеты восходящего направления могут быть отправлены непосредственно клиенту, как показано на следующем рисунке:


Рис. 6. Решение DSR, когда nginx является обратным прокси-сервером udp (у апстрима есть общедоступная сеть)

Вышеупомянутые три решения могут использовать версию nginx с открытым исходным кодом для передачи реального IP-адреса клиента в серверную службу, но все они требуют, чтобы рабочий процесс nginx запускался с правами root, что неприемлемо для эксплуатации и обслуживания. На уровне протокола можно ожидать, что последующие версии будут поддерживать прокси-протокол для передачи ip клиента для решения этой проблемы. Во многих современных прикладных сценариях, если бизнес-сценарий явно не отвергает механизм повторной передачи тайм-аута, протокол TCP все равно следует использовать. Его идеальный контроль трафика и перегрузок - все возможности, которые мы должны иметь. Если мы переопределим это на уровне UDP Механизм не стоит потерь.

Когда хост хочет начать получать широковещательный UDP трафик, то он должен принадлежать к группе «UDP multicast group». Контроль для широковещательных групп базируется на протоколе IGMP. Как только хост подписан, весь трафик для этой группы посылается ей используя broadcast L2 frames. Это важно, потому как многие роутеры направляют весь широковещательный трафик на все порты. В домашних сетях вы обычно используете Linux для управления проводными и беспроводными сетями, и если вы получаете широковещательный трафик по проводному каналу, то вы будете забивать им и беспроводные каналы тоже. К счастью в версии ядра Linux 2.6.34 есть возможность «IMGP snooping», которая отслеживает подобные ситуации и по умолчанию присутствует в OpenWrt. Таким образом у вас не будет нежелательного трафика на портах, который не были вами заданы для получения.

Ещё одним важным фактором является так же то, что из-за использования низкого уровня скорости (чтобы все клиенты могли «слушать»), а так же хитрых режимов энергосбережения – широковещание в беспроводных сетях работает не так, как этого от него ожидаешь. Зачастую широковещание бесполезно для IPTV .

Решение

Благодаря «IGMP snooping», утилита igmpproxy больше не должна создавать проблемы в беспроводных сетях. Теперь вы можете одновременно запускать обе утилиты igmpproxy и udpxy.

Проверьте, что поддержка «IGMP snooping» присутствует в вашей прошивке OpenWrt и включена!

Если файл существует, то вывод команды выдаст либо « 1 », либо « 0 ». Если выдается « 1 », то ничего делать не надо, а если « 0 », то для включения «IGMP snooping» в файл /etc/config/network , в конфигурации интерфейса «lan», необходимо добавить строку:

Примечание: В версии OpenWrt Attitude Adjustment 12.09, «IGMP snooping» по умолчанию включен, поэтому никакие изменения в /etc/config/network для OpenWrt AA 12.09 не нужны! Однако начиная с ревизии r36463, «IGMP snooping» по умолчанию отключен и для его включения требуются вышеупомянутые действия.

IGMP proxy

Установка igmpproxy

Выполните команды устанавливающие igmpproxy:

После установки пакета, необходимо отредактировать файл конфигурации /etc/config/igmpproxy :

Настройки Firewall

Запуск igmpproxy

После добавления правил, необходимо перезапустить фаервол, добавить igmpproxy в автостарт и естественно запустить сам igmpproxy. Выполните следующие команды:

В дальнейшем igmpproxy будет сразу стартовать автоматически в процессе загрузки роутера.

Проверка сервиса igmpproxy

При отсутствии строки “/usr/sbin/igmpproxy /var/etc/igmpproxy.conf”, отладка сервиса из командной строки

В случае падений сервиса, можно добавить в cron команду

Подсети провайдера из которых идет вещание

Если вы не уверены, что надо написать в строках list altnet файла конфигурации /etc/config/igmpproxy , то закомментируйте эти строки и посмотрите на вывод igmpproxy в логе роутера. Пытайтесь после запуска igmpproxy подписываться на какие-либо каналы с помощью VLC или каким-нибудь другим клиентом (проигрывателем). Если в файле конфигурации не будет хватать сетей, то вы увидите в логе, что-то типа: « Warn: The source address 10.254.16.66 for group 233.32.240.222, is not in any valid net for upstream VIF ». Адрес, указанный после source address необходимо прописать в list altnet файла конфигурации /etc/config/igmpproxy . В случае нескольких адресов, прописать соответсвующую маску.

Для универсальности можно разрешить igmpproxy слушать все возможные адреса, прописав

Однако в этом случае возможна нестабильность.

Также следует учитывать, что значение 0.0.0.0/0 поддерживается начиная с ревизии r40729. На старых ревизиях igmpproxy откажется запускаться с данным значением, выдав ошибку: « The bits part of the address is invalid : 4286488 ».

udpxy

Альтернативным путем, который позволяет получить доступ к широковещательным UDP потокам, является утилита udpxy. Работает довольно хорошо, как на проводных, так и на беспроводных соединениях.

Установка udpxy

Выполните команды устанавливающие udpxy:

После установки пакета, возможно вам понадобится отредактировать стартовый скрипт /etc/init.d/udpxy в соответствии с вашими требованиями. Вас должна интересовать только строка OPTIONS=“-T -S -p 4022” . Вы можете ее оставить так, как она есть, но если вас что-то будет не устраивать в работе udpxy, то вы можете изменить ключи для запуска udpxy в соответствии с руководством по использованию данной утилиты.

Пример изменения стартового скрипта /etc/init.d/udpxy

Настройки Firewall

Для того, чтобы udpxy мог работать с IGMP, вы должные добавить соответствующие правила в файл /etc/config/firewall :

Запуск udpxy

После добавления правил, необходимо перезапустить фаервол, добавить udpxy в автостарт и естественно запустить сам udpxy. Выполните следующие команды:

В дальнейшем udpxy будет сразу стартовать автоматически в процессе загрузки роутера.

Примечание по совместному использованию igmpproxy и udpxy

Если вы планируете использовать одновременно igmpproxy и udpxy, то в файле конфигурации фаервола – /etc/config/firewall у вас в итоге должно быть два правила:

Self-registration in the wiki has been disabled.
If you want to contribute to the OpenWrt wiki, please post HERE in the forum or ask on IRC for access.

Except where otherwise noted, content on this wiki is licensed under the following license:
CC Attribution-Share Alike 4.0 International

Прокси UDP даёт возможность смотреть открытые ТВ-каналы IPTV на специальных плеерах, не принимающих мультикастовые потоки. Эта функция необходима для бесперебойного вещания IPTV на телефонах, некоторых Смарт-TB и приставках для игр. Поговорим о ней и её настройке подробнее.

Что такое UDP-прокси?

Прокси-сервер UDP был создан для преобразования многоадресного трафика UDP IP-телевидения в одноадресный ТСР. Если вы хотите комфортно смотреть IPTV на телефонах с ОС Андроид, планшетах, смарт-TB и игровых консолях с помощью Wi-Fi, эта функция будет очень полезна.

Смотрит ТВ

У этой программы существуют две цели:

  • передача IP-ТВ в локальной сети на базе OC Windows;
  • непрерывная передача IP-ТВ через роутер в качестве НТТР-трафика.

Прокси UDP появился в микропрограммах с версии V2.02 (ХХХ.1) В2, где была добавлена функция для просмотра интерактивного TB на домашних устройствах и плеерах, не поддерживающих мультикастовые потоки.

Если в обычном плеере есть IPTV, абонент может его смотреть, но трансляция будет осуществляться через НТТР. Поэтому и был разработан прокси UDP.

Большим преимуществом использования UDP-прокси на роутерах и ПК является надежность передачи пакетов трафика IP-ТВ, возможность просмотра фактически на любом устройстве и качественное телевидение высокой четкости. Канал также более стабильный.

Как узнать свой адрес прокси-сервера и порт?

Есть 3 распространённых способа определить эти данные:

Что такое непроксированный UDP?

Непроксированный UDP — это прокси, защищённый от утечки реального IP-адреса через WebRTC.

WebRTC (от английского real-time communications — коммуникации в реальном времени) — это технология, обеспечивающая организацию потоковой передачи данных между приложениями в режиме реального времени. Использование этой техники может выявить ваш реальный IP-адрес.

Настройка UDP прокси

Далеко не все устройства (например, смартфоны, Смарт-TB и TB с ОС Android, приставки для игр, проигрыватели и т.д.) могут сами по себе воспроизводить многоадресный трафик.

Здесь требуется напрямую указать прокси в персональных параметрах роутера, сервера, самого устройства либо в имеющемся на этом устройстве плеере. Сетевой адрес и порт находятся в локальной сети.

Как серверы могут действовать не только маршрутизаторы, но и домашние компьютеры с подключением к интернету.

Wi-Fi роутер

Иногда в маршрутизаторах, поддерживающих многоадресную потоковую передачу, может быть включен встроенный прокси.

Обычно элементы расположены во вкладках «параметры локальной сети», «UDP to НТРР», «НТТР Proxy», «Enable Proxy» либо имеющих аналогичные имена.

Если есть возможность активировать прокси IGMP (управление данных в сетях, основанных на протоколе IP), это необходимо сделать.

В качестве IP-адреса иногда по умолчанию используется 192.168.0.1, реже — 192.168.10.1. Уточните информацию в инструкции к своему роутеру. IP-данные обычно печатаются на нижней части либо задней стенке корпуса.

Маршрутизатор Eltex WB-2

Для настройки данного маршрутизатора выполните следующее:

Маршрутизатор Eltex WB-2

Роутер D-Link DIR-615

Для настройки данного маршрутизатора выполните следующее:

Роутер D-Link DIR-615

Роутер SNR-CPE-W4N

Для настройки данного маршрутизатора выполните следующее:

Роутер SNR-CPE-W4N

Интернет-центр Keenetic Ultra

Для настройки через интернет-центр выполните следующее:

После завершения настройки Keenetic необходимо зарегистрировать сетевой адрес и порт на том устройстве (виджете либо в программе), на котором предполагается смотреть IPTV через прокси-сервер вашего роутера.

Настройка

Если всё сделано правильно, канал будет доступен не по UDP, а по ТСР.

Настройка на компьютере

Тип соединения неважен: подключение по проводу либо беспроводное.

Запустите UDP to НТТР Proxy.exe и преступайте к настройке:

  1. Установите интерфейс мультикаста и НТТР-сервера, это одно и то же значение: 192.168.1.2.
  2. Укажите НТТР-порт: 1234 или иной, и сохраните данные.
  3. Запустите программу, нажав нужную кнопку, либо настройте её запуск как серверной службы. Во таком случае программа станет запускаться в авторежиме при каждом запуске ПК.

Запустить

Самостоятельно укажите IP и порт в параметрах самого устройства, виджета, либо программы, и свободно смотрите IP-TB, используя прокси на ПК. Если всё указано правильно, телеканалы начнут воспроизводиться.

Установка на ОС Android и ОС Windows

Для просмотра такого TB на смартфоне или компьютере необходимо установить и настроить специальные программы.

На OC Android

Для просмотра такого ТВ на смартфоне, вам необходимо скачать приложение из Гугл Плей. Например, «IPTV». Это позволит загружать TB-каналы в стандартном формате m3u и воспроизводить их с другими видеоплейерами.

Когда приложение будет скачено и установлено, вам нужно будет настроить прокси на телефоне. Для этого откройте программу и выполните такие действия:

Настройка благополучно завершена, и уже можно смотреть имеющиеся в плейлисте TB-каналы.

Для OC Windows

Для просмотра IP-TB на компьютере можно обратиться к специальной программе IP-TV Player. Скачайте её и установите как обычно — как любую другую. Затем запустите и выполните следующее:

Всё, можно начать смотреть каналы IP-TV на своем ПК.

Функция прокси UDP необходима для воспроизведения TB-каналов IPTV на плеерах, не принимающих мультикастовые потоки. Процесс их настройки зависит от устройства, на котором вы планируете смотреть IPTV, а также от типа маршрутизатора, если просмотр будет проходить на телевизоре.

Читайте также: