通过使用原始套接字将 UDP 流量转换为加密的 FakeTCP/UDP/ICMP 流量的隧道可帮助您绕过 UDP 防火墙(或不稳定的 UDP 环境)。
单独使用时,udp2raw 仅传输 UDP 流量。不过,如果您同时使用 udp2raw + 任何基于 UDP 的 VPN,则可以隧道任何流量(包括 TCP/UDP/ICMP),目前已确认支持 OpenVPN/L2TP/ShadowVPN 和tinyfecVPN。
或者
udp2raw 维基
简体中文
具有 root 帐户或 cap_net_raw 功能的 Linux 主机(包括桌面 Linux、Android 手机/平板电脑、OpenWRT 路由器或 Raspberry PI)。
对于 Windows 和 MacOS 用户,请使用此存储库中的 udp2raw。
ICMP/FakeTCP 标头可帮助您绕过某些 ISP 上的 UDP 阻止、UDP QOS 或不正确的 UDP NAT 行为。在 ICMP 标头模式下,udp2raw 的工作方式类似于 ICMP 隧道。
还支持 UDP 标头。在 UDP 标头模式下,它的行为就像普通的 UDP 隧道一样,您可以使用其他功能(例如加密、防重放或连接稳定)。
在FakeTCP头模式下,udp2raw在建立连接时模拟3次握手,在数据传输时模拟seq和ack_seq。它还模拟一些 TCP 选项,例如: MSS
、 sackOk
、 TS
、 TS_ack
、 wscale
。防火墙会将 FakeTCP 视为 TCP 连接,但其本质上是 UDP:它支持实时/乱序传送(就像普通 UDP 一样),没有拥塞控制或重传。所以使用OpenVPN时不会出现任何TCP over TCP问题。
加密注意事项
通过心跳检测连接失败。如果超时,客户端将自动更改端口号并重新连接。如果重连成功,之前的连接将被恢复,并且所有现有的 UDP 会话将保持有效。
例如,如果您使用udp2raw + OpenVPN,OpenVPN在任何重新连接后都不会丢失连接,即使重新插入网线或更改WiFi接入点。
多路复用一个客户端可以处理多个 UDP 连接,所有这些连接共享相同的原始连接。
多个客户端一台服务器可以有多个客户端。
NAT 支持这 3 种模式均适用于 NAT 环境。
OpenVZ 支持已在 BandwagonHost VPS 上测试。
易于构建,无依赖关系。要交叉编译udp2raw,您只需下载一个工具链,修改makefile以指向工具链,运行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 被阻止或受到 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
(上述命令需要以root身份运行。为了更好的安全性,通过一些额外的步骤,您可以以非root身份运行udp2raw。查看此链接以获取更多信息)
现在,客户端和服务器之间已经通过 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 模式下,Linux 内核 TCP 数据包处理必须被双方的 iptables 规则阻止,否则内核将自动为未识别的 TCP 数据包发送 RST,并且您将面临稳定性/性能问题。您可以使用-a
选项让程序在启动/退出时自动添加/删除 iptables 规则。您还可以使用-g
选项生成 iptables 规则并手动添加。
--cipher-mode
和--auth-mode
建议使用aes128cbc
+ hmac_sha1
以获得最大的安全性。如果你想在路由器上运行该程序,你可以尝试xor
+ simple
,它大多数时候可以欺骗防火墙的数据包检查,但它不能保护你免受严重攻击。 none 模式仅用于调试目的。不建议将 cipher-mode 或 auth-mode 设置为 none。
--seq-mode
FakeTCP 模式的行为并不 100% 像真正的 TCP 连接。 ISP 或许能够区分模拟的 TCP 流量和真实的 TCP 流量(尽管成本很高)。 seq-mode 可以帮助您稍微改变 seq 增加行为。如果您遇到连接问题,请尝试更改该值。
--lower-level
--lower-level
允许您在 OSI 级别 2(链路级别)发送数据包,这样您就可以绕过任何本地 iptables 规则。如果您有一个与 udp2raw 冲突的复杂 iptables 规则,并且您无法(或懒得)编辑 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
参数:在命令行模式下,密码周围的引号将被 shell 删除。在配置文件中,我们不删除引号。
然后启动服务器
./udp2raw_amd64 --conf-file server.conf
--fifo
使用 fifo(命名管道)向正在运行的程序发送命令。例如--fifo fifo.file
。
在客户端,可以使用echo reconnect >fifo.file
强制客户端重新连接。目前服务器端还没有执行任何命令。
iperf3 TCP via OpenVPN + udp2raw (由于本期提到的 bug,没有使用 iperf3 UDP 模式: esnet/iperf#296 。相反,我们通过 OpenVPN 将 TCP 流量打包成 UDP 来测试性能。详细信息请阅读应用程序。
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
(倒车速度类似,未上传)
检查维基以获取更多信息:
https://github.com/wangyu-/udp2raw-tunnel/wiki