Туннель, который превращает UDP-трафик в зашифрованный FakeTCP/UDP/ICMP-трафик с помощью Raw Socket, помогает вам обойти межсетевые экраны UDP (или нестабильную среду UDP).
При использовании отдельно udp2raw туннелирует только UDP-трафик. Тем не менее, если вы использовали udp2raw + любую VPN на основе UDP вместе, вы можете туннелировать любой трафик (включая TCP/UDP/ICMP), в настоящее время подтверждена поддержка OpenVPN/L2TP/ShadowVPN и tinyfecVPN.
или
udp2raw вики
简体中文
Хост 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), без контроля перегрузки или повторной передачи. Таким образом, при использовании OpenVPN не будет проблем TCP over TCP.
Примечания по шифрованию
Сбои соединения обнаруживаются по тактовым сигналам. Если время ожидания истекло, клиент автоматически изменит номер порта и повторно подключится. Если переподключение пройдет успешно, предыдущее соединение будет восстановлено, и все существующие UDP-сообщения останутся действительными.
Например, если вы используете udp2raw + OpenVPN, OpenVPN не потеряет соединение после любого повторного подключения, даже если сетевой кабель переподключен или будет изменена точка доступа Wi-Fi .
Мультиплексирование Один клиент может обрабатывать несколько UDP-соединений, все из которых используют одно и то же необработанное соединение.
Несколько клиентов На одном сервере может быть несколько клиентов.
Поддержка NAT Все три режима работают в средах NAT.
Поддержка OpenVZ протестирована на VPS BandwagonHost.
Легко построить. Никаких зависимостей. Для кросс-компиляции udp2raw все, что вам нужно сделать, это просто загрузить цепочку инструментов, изменить make-файл, чтобы он указывал на цепочку инструментов, запустить make cross
, и все готово. (Примечание: предварительно скомпилированные двоичные файлы для рабочего стола, RaspberryPi, 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 заблокирован, имеет качество обслуживания или просто плохо поддерживается. Предположим, что 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
(Вышеупомянутые команды необходимо запускать от имени пользователя root. Для большей безопасности, выполнив некоторые дополнительные действия, вы можете запустить udp2raw от имени пользователя без полномочий root. Для получения дополнительной информации перейдите по этой ссылке)
Теперь между клиентом и сервером установлен зашифрованный необработанный туннель через TCP-порт 4096. Подключение к UDP-порту 3333 на стороне клиента эквивалентно подключению к порту 7777 на стороне сервера. Никакой UDP-трафик не будет раскрыт.
Для запуска на Android проверьте Android_Guide
Опция -a
автоматически добавляет для вас правило iptables (или несколько правил iptables), udp2raw использует это правило iptables для стабильной работы. Помните, что вы не забыли -a
(это распространенная ошибка). Если вы не хотите, чтобы udp2raw автоматически добавлял правило iptables, вы можете добавить его вручную (обратите внимание на параметр -g
) и опустите -a
.
udp2raw-tunnel
git version:6e1df4b39f build date:Oct 24 2017 09:21:15
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> avaliable values:faketcp(default),udp,icmp
-k,--key <string> password to gen symetric key,default:"secret key"
--cipher-mode <string> avaliable values:aes128cbc(default),xor,none
--auth-mode <string> avaliable 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
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
--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
--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
--clear clear any iptables rules added by this program.overrides everything
-h,--help print this help message
-a
и -g
Эта программа отправляет пакеты через необработанный сокет. В режиме FakeTCP обработка TCP-пакетов ядра Linux должна быть заблокирована правилом iptables с обеих сторон, в противном случае ядро автоматически отправит RST для несогласованного TCP-пакета, и вы столкнетесь с проблемами стабильности и производительности. Вы можете использовать опцию -a
, чтобы программа автоматически добавляла/удаляла правило iptables при запуске/выходе. Вы также можете использовать опцию -g
для создания правила iptables и добавить его вручную.
--cipher-mode
и --auth-mode
Предлагается использовать aes128cbc
+ hmac_sha1
для достижения максимальной безопасности. Если вы хотите запустить программу на маршрутизаторе, вы можете попробовать xor
+ simple
, который в большинстве случаев может обмануть проверку пакетов брандмауэрами, но не сможет защитить вас от серьезных атак. Режим none предназначен только для целей отладки. Не рекомендуется устанавливать для режима шифрования или режима аутентификации значение none.
--seq-mode
Режим FakeTCP не ведет себя на 100% как настоящее TCP-соединение. Интернет-провайдеры могут отличить симулированный TCP-трафик от реального TCP-трафика (хотя это дорого). seq-mode может помочь вам немного изменить поведение увеличения seq. Если у вас возникли проблемы с подключением, попробуйте изменить значение.
--lower-level
--lower-level
позволяет отправлять пакеты на уровне OSI 2 (уровень канала), чтобы вы могли обойти любые локальные правила 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
(в разделе «Начало работы») в файл конфигурации:
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 (режим iperf3 UDP не используется из-за ошибки, упомянутой в этом выпуске: esnet/iperf#296 . Вместо этого мы упаковываем TCP-трафик в UDP с помощью OpenVPN для проверки производительности. Подробнее см. в разделе «Приложение».
iperf3 -c 10.222.2.1 -P40
iperf3 -c 10.222.2.1 -P40 -R
raw_mode: faketcp cipher_mode: xor auth_mode: простой
(скорость заднего хода была аналогична и не загружалась)
raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5
(скорость заднего хода была аналогична и не загружалась)
Проверьте вики для получения дополнительной информации:
https://github.com/wangyu-/udp2raw-tunnel/wiki