
Туннель, который преобразует UDP-трафик в зашифрованный UDP/FakeTCP/ICMP трафик, используя Raw Socket, помогает вам обходить UDP-файрволлы (или нестабильное окружение UDP)
Туннель, который преобразует UDP-трафик в зашифрованный трафик FakeTCP/UDP/ICMP с помощью Raw Socket, помогая обходить UDP-файерволы (или нестабильное UDP-окружение).
При самостоятельном использовании udp2raw туннелирует только UDP-трафик. Тем не менее, если вы используете udp2raw вместе с любым UDP-based VPN, вы можете туннелировать любой трафик (включая TCP/UDP/ICMP). В настоящее время подтверждена поддержка OpenVPN/L2TP/ShadowVPN и tinyfecVPN.

или

Хост Linux (включая настольный Linux, Android-телефон/планшет, маршрутизатор OpenWRT или Raspberry Pi) с root-аккаунтом или возможностью cap_net_raw.
Для пользователей Windows и MacOS используйте udp2raw из этого репозитория.
Заголовки ICMP/FakeTCP помогают обойти блокировку UDP, UDP QOS или некорректное поведение UDP NAT у некоторых провайдеров. В режиме заголовка ICMP udp2raw работает как ICMP-туннель.
Заголовки UDP также поддерживаются. В режиме заголовка UDP он ведет себя как обычный UDP-туннель, и вы можете просто использовать другие функции (такие как шифрование, защита от повторного воспроизведения или стабилизация соединения).
В режиме заголовка FakeTCP udp2raw симулирует трехстороннее рукопожатие при установлении соединения, симулирует seq и ack_seq во время передачи данных. Он также симулирует несколько TCP-опций, таких как: MSS, sackOk, TS, TS_ack, wscale. Файерволы будут считать FakeTCP TCP-соединением, но по сути это UDP: он поддерживает доставку в реальном времени/с нарушением порядка (как обычный UDP), без контроля перегрузки или повторной передачи. Поэтому не будет проблемы TCP over TCP при использовании OpenVPN.
Сбои соединения обнаруживаются с помощью heartbeat-пакетов. Если произошел тайм-аут, клиент автоматически сменит номер порта и переподключится. Если переподключение успешно, предыдущее соединение будет восстановлено, и все существующие UDP-сессии останутся действительными.
Например, если вы используете udp2raw + OpenVPN, OpenVPN не потеряет соединение после любого переподключения, даже если сетевой кабель будет переподключен или точка доступа Wi-Fi изменится.
make cross, и все готово. (Примечание: предварительно скомпилированные бинарные файлы для Desktop, Raspberry Pi, Android, некоторых маршрутизаторов OpenWrt уже включены в Релизы).Bypass UDP QoS Bypass UDP Blocking Bypass OpenVPN TCP over TCP problem OpenVPN over ICMP UDP to ICMP tunnel UDP to TCP tunnel UDP over ICMP UDP over TCP
Загрузите бинарный релиз с https://github.com/wangyu-/udp2raw-tunnel/releases
Предположим, ваш UDP заблокирован, или применяется QOS, или просто плохо поддерживается. Предположим, IP вашего сервера 44.55.66.77, и у вас есть служба, слушающая UDP-порт 7777.
# Run at server side:
./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -k "passwd" --raw-mode faketcp -a
# Run at client side
./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -k "passwd" --raw-mode faketcp -a
(The above commands need to be run as root. For better security, with some extra steps, you can run udp2raw as non-root. Check this link for more info )


Теперь между клиентом и сервером через TCP-порт 4096 установлен зашифрованный raw-туннель. Подключение к UDP-порту 3333 на стороне клиента эквивалентно подключению к порту 7777 на стороне сервера. Никакой UDP-трафик не будет раскрыт.
Для запуска на Android смотрите Android_Guide
-a опция автоматически добавляет для вас правило iptables (или несколько правил iptables), udp2raw полагается на это правило iptables для стабильной работы. Убедитесь, что вы не забыли -a (это частая ошибка). Если вы не хотите, чтобы udp2raw автоматически добавлял правило iptables, вы можете добавить его вручную (посмотрите опцию -g) и опустить -a.
udp2raw-tunnel
git version:4623f878e0 build date:Nov 3 2024 23:15:46
repository: https://github.com/wangyu-/udp2raw-tunnel
usage:
run as client : ./this_program -c -l local_listen_ip:local_port -r server_address:server_port [options]
run as server : ./this_program -s -l server_listen_ip:server_port -r remote_address:remote_port [options]
common options,these options must be same on both side:
--raw-mode <string> available values:faketcp(default),udp,icmp and easy-faketcp
-k,--key <string> password to gen symetric key,default:"secret key"
--cipher-mode <string> available values:aes128cfb,aes128cbc(default),xor,none
--auth-mode <string> available values:hmac_sha1,md5(default),crc32,simple,none
-a,--auto-rule auto add (and delete) iptables rule
-g,--gen-rule generate iptables rule then exit,so that you can copy and
add it manually.overrides -a
--disable-anti-replay disable anti-replay,not suggested
--fix-gro try to fix huge packet caused by GRO. this option is at an early stage.
make sure client and server are at same version.
client options:
--source-ip <ip> force source-ip for raw socket
--source-port <port> force source-port for raw socket,tcp/udp only
this option disables port changing while re-connecting
other options:
--conf-file <string> read options from a configuration file instead of command line.
check example.conf in repo for format
--fifo <string> use a fifo(named pipe) for sending commands to the running program,
check readme.md in repository for supported commands.
--log-level <number> 0:never 1:fatal 2:error 3:warn
4:info (default) 5:debug 6:trace
--log-position enable file name,function name,line number in log
--disable-color disable log color
--disable-bpf disable the kernel space filter,most time its not necessary
unless you suspect there is a bug
--dev <string> bind raw socket to a device, not necessary but improves performance
--sock-buf <number> buf size for socket,>=10 and <=10240,unit:kbyte,default:1024
--force-sock-buf bypass system limitation while setting sock-buf
--seq-mode <number> seq increase mode for faketcp:
0:static header,do not increase seq and ack_seq
1:increase seq for every packet,simply ack last seq
2:increase seq randomly, about every 3 packets,simply ack last seq
3:simulate an almost real seq/ack procedure(default)
4:similiar to 3,but do not consider TCP Option Window_Scale,
maybe useful when firewall doesnt support TCP Option
--lower-level <string> send packets at OSI level 2, format:'if_name#dest_mac_adress'
ie:'eth0#00:23:45:67:89:b9'.or try '--lower-level auto' to obtain
the parameter automatically,specify it manually if 'auto' failed
--wait-lock wait for xtables lock while invoking iptables, need iptables v1.4.20+
--gen-add generate iptables rule and add it permanently,then exit.overrides -g
--keep-rule monitor iptables and auto re-add if necessary.implys -a
--hb-len <number> length of heart-beat packet, >=0 and <=1500
--mtu-warn <number> mtu warning threshold, unit:byte, default:1375
--clear clear any iptables rules added by this program.overrides everything
--retry-on-error retry on error, allow to start udp2raw before network is initialized
-h,--help print this help message
-a и -gЭта программа отправляет пакеты через raw socket. В режиме FakeTCP обработка TCP-пакетов ядром Linux должна быть заблокирована правилом iptables с обеих сторон, иначе ядро будет автоматически отправлять RST для нераспознанного TCP-пакета, и вы столкнетесь с проблемами стабильности/производительности. Вы можете использовать опцию -a, чтобы программа автоматически добавляла/удаляла правило iptables при запуске/выходе. Вы также можете использовать опцию -g для генерации правила iptables и добавить его вручную.
--cipher-mode и --auth-modeРекомендуется использовать aes128cbc + hmac_sha1 для максимальной безопасности. Если вы хотите запустить программу на маршрутизаторе, вы можете попробовать xor + simple, которые в большинстве случаев могут обмануть проверку пакетов файерволами, но не защищают от серьезных атак. Режим none предназначен только для отладки. Не рекомендуется устанавливать cipher-mode или auth-mode в none.
--seq-modeРежим FakeTCP не ведет себя на 100% как реальное TCP-соединение. Интернет-провайдеры могут отличить симулированный TCP-трафик от реального (хотя это дорого). seq-mode может помочь немного изменить поведение увеличения seq. Если у вас возникают проблемы с соединением, попробуйте изменить значение.
--lower-level--lower-level позволяет отправлять пакеты на уровне 2 OSI (канальный уровень), что позволяет обходить любые локальные правила iptables. Если у вас сложные правила iptables, которые конфликтуют с udp2raw, и вы не можете (или слишком ленивы) редактировать правила iptables, --lower-level может быть очень полезен. Попробуйте --lower-level auto для автоматического определения параметров, вы можете указать их вручную, если auto не сработает.
Ручной формат: if_name#dest_mac_adress, например: eth0#00:23:45:67:89:b9.
--keep-ruleМониторинг iptables и автоматическое повторное добавление правил iptables (для блокировки обработки TCP ядром) при необходимости. Особенно полезно, когда правила iptables могут быть очищены другими программами (например, если вы используете OpenWRT, каждый раз при изменении и применении настройки правила iptables могут быть очищены и перестроены).
--conf-fileВы также можете загружать параметры из конфигурационного файла, чтобы скрыть секреты от команды ps.
Например, перепишите параметры для приведенного выше примера сервера (в разделе Начало работы) в конфигурационный файл:
server.conf
-s
# You can add comments like this
# Comments MUST occupy an entire line
# Or they will not work as expected
# Listen address
-l 0.0.0.0:4096
# Remote address
-r 127.0.0.1:7777
-a
-k passwd
--raw-mode faketcp
Обратите внимание на параметр -k: в режиме командной строки кавычки вокруг пароля будут удалены оболочкой. В конфигурационных файлах мы не удаляем кавычки.
Затем запустите сервер командой:
./udp2raw_amd64 --conf-file server.conf
--fifoИспользуйте fifo (именованный канал) для отправки команд работающей программе. Например, --fifo fifo.file.
На стороне клиента вы можете использовать echo reconnect >fifo.file, чтобы принудительно переподключить клиента. В настоящее время для сервера не реализовано ни одной команды.
iperf3 TCP через OpenVPN + udp2raw (Режим UDP iperf3 не используется из-за ошибки, упомянутой в этом issue: https://github.com/esnet/iperf/issues/296 . Вместо этого мы упаковываем TCP-трафик в UDP с помощью OpenVPN для тестирования производительности. Подробнее читайте в Application.
iperf3 -c 10.222.2.1 -P40
iperf3 -c 10.222.2.1 -P40 -R
raw_mode: faketcp cipher_mode: xor auth_mode: simple

(обратная скорость была аналогичной и не загружена)
raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5

(обратная скорость была аналогичной и не загружена)
Проверьте wiki для получения дополнительной информации: