Получение UDP-только VPN для работы через TCP

607
Breus

Для моего проекта я ищу возможности для VPN с поддержкой только UDP, работающей через TCP (предпочтительно на порту 443 или 80). Я нашел следующее во время некоторых исследований:

  • Это возможно с socat, однако это ненадежно, поскольку UDP-соединение может продолжать передавать трафик, в то время как буфер TCP будет перегружен.
  • Я подозреваю, что это возможно с Secure Socket Funneling (SSF) [1], однако я не уверен, работает ли он на 100% надежно и толкает ли он трафик по TCP или они нашли какой-то способ использовать TLS по UDP (кажется, что путь для меня).

Что касается причины, по которой я хочу, чтобы VPN только для UDP работала по протоколу TCP: различные корпоративные брандмауэры или общегосударственные брандмауэры блокируют трафик UDP на (случайных) портах UDP. Конечно, существуют назначенные порты UDP (скажем, 53 DNS), которые в основном открыты, но действительно легко распознать VPN по обычному трафику на этих портах. Я знаю, как имитировать трафик, но это подразумевает чрезмерную нагрузку на VPN. Протокол, используемый для этого проекта, является WireGuard вместо OpenVPN, где TCP-fallback является встроенным.

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

[1] https://securesocketfunneling.github.io/ssf/#home

2
OpenVPN не имеет резервного механизма. Это либо UDP, либо TCP, как установлено. К сожалению, я не вижу другого пути, кроме как просто использовать OpenVPN. Его универсальность в противопожарных средах не имеет себе равных. Daniel B 5 лет назад 0
@DanielB Я на самом деле сказал неправильно о запасном варианте. Я имею в виду, что клиенты OpenVPN могут иметь резервный механизм, поскольку OpenVPN поддерживает как UDP, так и TCP. Тем не менее, мы в настоящее время используем OpenVPN для этого проекта, но рассматриваем варианты использования WireGuard (только для UDP), но при этом сохраняем эту опцию (откат к TCP, когда UDP заблокирован). Breus 5 лет назад 0
Посмотрите на https://www.softether.org/ возможно. Patrick Mevzek 5 лет назад 0
@Patrick Mevzek спасибо, однако, суть моего вопроса в том, чтобы заставить его работать на WireGuard любым способом. Breus 5 лет назад 0

1 ответ на вопрос

0
harrymc

Я не могу помочь вам с прямым ответом, но вы можете найти хорошую информацию в источниках ниже.

Zebedee (с открытым исходным кодом с 2005 года)

Zebedee - это простая программа для создания зашифрованного сжатого «туннеля» для передачи данных по TCP / IP или UDP между двумя системами. Это позволяет защитить трафик, такой как telnet, ftp и X, от отслеживания, а также потенциально повысить производительность в сетях с низкой пропускной способностью от сжатия.

Некоторая дополнительная информация может быть найдена здесь .

udptunnel

Это доступно в виде пакета Linux ( ссылка на Debian ).

Его источник находится на GitHub, где он описывается как:

Этот проект туннелирует данные TCP через туннель UDP. Исполняемый файл может выступать в роли сервера или клиента. Сервер действует как прокси для клиента, прослушивая указанный порт UDP и создавая соединение с сервером TCP, который указывает клиент. Клиент прослушивает порт TCP, выступая в роли сервера, к которому подключается какой-либо клиент TCP. Клиент получает все данные TCP через этот порт и отправляет данные на сервер udpserver, который отправляет их на соединение TCP, которое он установил с нужным сервером TCP.

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