ДатаграммаТуннелер
Простая кросс-платформенная клиент-серверная программа, пересылающая датаграммы UDP через TCP-соединение (т.н. туннель). Клиент присоединяется к группе многоадресной рассылки и пересылает полученные дейтаграммы на сервер, который, в свою очередь, передает их в свою подсеть.
- Разработан с учетом простоты
- Протестировано на OSX 10.13.3 , Ubuntu 16.04 и Centos 7.4.
- НЕ совместим с Windows
Содержание
Требования
Установка
Краткое содержание
Примеры
Как это работает?
Протокол DTEP
Лицензирование
Требования
- Компьютер под управлением дистрибутива Linux или Mac OS.
- Компилятор С++
Установка за 10 секунд
- Загрузите или клонируйте репозиторий.
- Заходим в репозиторий:
cd <path_to_the_repo>/DatagramTunneler
- Соберите DatagramTunneler, просто запустив make:
- Вы готовы запустить двоичный файл DatagramTunneler:
./bin/DatagramTunneler -h
Для получения дополнительной информации о том, как его запустить, ознакомьтесь с кратким описанием ниже.
Краткое содержание
Чтобы использовать DatagramTunneler, вам необходимо сначала запустить серверную часть, а затем клиентскую часть. Если вы этого не сделаете, клиент просто не сможет подключиться к серверу и сразу же завершит работу.
Сервер
dgramtunneler --server -i <udp_iface_ip> -t <tcp_listen_port> [-u <udp_dst_ip>:<port>]
- <udp_iface_ip> : интерфейс, используемый для публикации пересылаемых датаграмм.
- <tcp_listen_port> : TCP-порт, используемый для прослушивания клиентских подключений.
- <udp_dst_ip>:<port> : (необязательно) IP-адрес и порт назначения udp, на котором сервер публикует пересылаемые датаграммы. Если не указано иное, дейтаграммы публикуются на том же канале, к которому подключен клиент.
Клиент
dgramtunneler --client -i <udp_iface_ip> -t <tcp_srv_ip>:<tcp_srv_port> -u <udp_dst_ip>:<port>
- <udp_iface_ip> : интерфейс, используемый для присоединения к каналу многоадресной рассылки, предоставленному -u
- <tcp_srv_ip>:<port> : IP и порт сервера, на который будет перенаправлена датаграмма.
- <udp_dst_ip> : <port> : IP-адрес назначения udp и порт канала, к которому мы хотим присоединиться.
Примеры
(Не забудьте поставить звездочку, если этот инструмент вам полезен:]) Серверная часть:
./bin/datagramtunneler --server -i 192.168.0.104 -u 228.14.28.52:1234 -t 28052
клиентская сторона:
./bin/datagramtunneler --client -i 192.168.0.105 -u 228.1.2.3:7437 -t 192.168.0.104:28052
Как это работает?
Целью DatagramTunneler является передача многоадресных данных из одной подсети A в другую подсеть B, где этот многоадресный канал недоступен. Для этого DatagramTunneler разделен на две части: клиентскую и серверную, как показано на схеме ниже:
Клиентская сторона
Клиентская часть должна работать в подсети, к которой можно подключиться к многоадресному каналу. После запуска он сделает следующее:
- подключиться к серверу DatagramListener (TCP)
- присоединиться к многоадресному каналу (UDP)
- пересылать все полученные датаграммы на сервер, используя установленное TCP-соединение. Дейтаграммы передаются через TCP с использованием протокола инкапсуляции дейтаграмм-туннелера (или DTEP).
Серверная часть
Серверная часть должна работать в подсети, где многоадресная рассылка недоступна. После запуска он сделает следующее:
- прослушивать клиентское соединение (обратите внимание, что за время существования экземпляров Сервера/Клиента принимается только одно соединение. Как только туннель отключается, оба конца завершаются.
- как только соединение с клиентом будет установлено, оно опубликует все датаграммы, отправленные клиентом, в многоадресный канал. Этот канал может быть любым, указанным при запуске сервера, или, если он не указан, он будет использовать тот же канал многоадресной рассылки, закодированный в полученной дейтаграмме (см. DTEP).
Протокол инкапсуляции туннеля дейтаграмм (DTEP)
Протокол туннелирования датаграмм или DTEP — это простой двоичный протокол, который описывается следующей схемой:
Пакет DTEP имеет заголовок длиной 1 байт, определяющий тип содержащейся в нем полезной нагрузки.
Тип пакета 0x00 = СЕРДЦЕ
Этот тип пакета не имеет полезной нагрузки. Он отправляется клиентом на сервер и помогает гарантировать, что оба конца соединения знают, активен ли другой конец.
Тип пакета 0x01 = ДАТАГРАММА
Этот пакет инкапсулирует датаграмму, наблюдаемую клиентом. Вот его полное описание:
Хотя эта диаграмма не требует пояснений, вот разбивка всех полей:
- Длина дейтаграммы : количество байтов инкапсулированной дейтаграммы (длина заголовка DTEP НЕ включена).
- Адрес канала UDP : адрес назначения группы многоадресной рассылки, к которой присоединился клиент для получения этой дейтаграммы.
- Порт канала UDP : порт назначения группы многоадресной рассылки, к которой присоединился клиент для получения этой дейтаграммы.
- Инкапсулированная датаграмма UDP : фактическая датаграмма, полученная клиентом из многоадресного канала.
Лицензирование
См. ЛИЦЕНЗИЮ