mirror of
https://github.com/wangyu-/udp2raw.git
synced 2025-01-19 22:39:31 +08:00
Merge branch 'master' of https://github.com/wangyu-/udp2raw-tunnel
This commit is contained in:
commit
3a1bacc11e
@ -1,7 +1,7 @@
|
|||||||
# Udp2raw-tunnel
|
# Udp2raw-tunnel
|
||||||
![image0](images/image0.PNG)
|
![image0](images/image0.PNG)
|
||||||
|
|
||||||
An Encrpyted,Anti-Replay,Multiplexed Udp Tunnel,tunnels udp traffic through raw socket
|
An Encrpyted,Anti-Replay,Multiplexed Udp Tunnel,tunnels udp traffic through fake-tcp or icmp by using raw socket
|
||||||
|
|
||||||
[简体中文](/doc/README.zh-cn.md)
|
[简体中文](/doc/README.zh-cn.md)
|
||||||
### Send/Recv Udp Packet as Raw Packet with TCP header,ICMP header
|
### Send/Recv Udp Packet as Raw Packet with TCP header,ICMP header
|
||||||
@ -26,7 +26,7 @@ Openwrt Supported,no dependence package,easy to compile,ar71xx binary included i
|
|||||||
bypass udp qos,bypass udp blocking,openvpn tcp over tcp problem,openvpn over icmp,udp to icmp tunnel,udp to tcp tunnel,udp via icmp,udp via tcp
|
bypass udp qos,bypass udp blocking,openvpn tcp over tcp problem,openvpn over icmp,udp to icmp tunnel,udp to tcp tunnel,udp via icmp,udp via tcp
|
||||||
# Getting Started
|
# Getting Started
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
linux host,root access. if you want to use it on window,you can use VMware in bridged mode.
|
linux host,root access. if you want to use it on window,you can use VMware(both bridged mode and nat mode are supported).
|
||||||
### Installing
|
### Installing
|
||||||
download binary release from https://github.com/wangyu-/udp2raw-tunnel/releases
|
download binary release from https://github.com/wangyu-/udp2raw-tunnel/releases
|
||||||
### Running
|
### Running
|
||||||
|
@ -22,15 +22,13 @@ https://github.com/wangyu-/UDPspeeder
|
|||||||
### 模拟TCP3次握手
|
### 模拟TCP3次握手
|
||||||
模拟TCP3次握手,模拟seq ack过程。另外还模拟了一些tcp option:MSS,sackOk,TS,TS_ack,wscale,用来使流量看起来更像是由普通的linux tcp协议栈发送的。
|
模拟TCP3次握手,模拟seq ack过程。另外还模拟了一些tcp option:MSS,sackOk,TS,TS_ack,wscale,用来使流量看起来更像是由普通的linux tcp协议栈发送的。
|
||||||
|
|
||||||
### 连接保持,连接快速恢复,单向链路失效检测
|
### 心跳保活、自动重连,连接快速恢复,单向链路失效检测
|
||||||
心跳机制检查连接是否中断,一旦心跳超时。client会立即换raw socket的端口重连,重连成功后会恢复之前中断的连接。虽然raw端的端口变了,但是udp端的所有连接都会继续有效。udp这边感觉不到raw端的重连,只会感觉到短暂断流,这跟普通的短暂丢包是类似的,不会导致上层应用重连。
|
心跳保活、自动重连,udp2raw重连可以恢复上次的连接,重连后上层连接继续有效,底层掉线上层不掉线。有效解决上层连接断开的问题。 (功能借鉴自[kcptun-raw](https://github.com/Chion82/kcptun-raw))
|
||||||
|
|
||||||
Client能用单倍的超时时间检测到单向链路的失效,不管是上行还是下行,只要有一端失效就能被client检测到。重连只需要client发起,就可以立即被server处理,不需要等到server端的连接超时后。
|
Client能用单倍的超时时间检测到单向链路的失效,不管是上行还是下行,只要有一个方向失效就能被client检测到。重连只需要client发起,就可以立即被server处理,不需要等到server端的连接超时后。
|
||||||
|
|
||||||
对于有大量client的情况,对于不同client,server发送的心跳是错开时间发送的,不会因为短时间发送大量的心跳而造成拥塞和延迟抖动。
|
对于有大量client的情况,对于不同client,server发送的心跳是错开时间发送的,不会因为短时间发送大量的心跳而造成拥塞和延迟抖动。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 其他特性
|
### 其他特性
|
||||||
信道复用,client的udp端支持多个连接。
|
信道复用,client的udp端支持多个连接。
|
||||||
|
|
||||||
@ -40,9 +38,9 @@ NAT 穿透 ,tcp icmp udp模式都支持nat穿透。
|
|||||||
|
|
||||||
支持Openvz,配合finalspeed使用,可以在openvz上用tcp模式的finalspeed
|
支持Openvz,配合finalspeed使用,可以在openvz上用tcp模式的finalspeed
|
||||||
|
|
||||||
支持Openwrt,没有编译依赖,容易编译到任何平台上。release中提供了ar71xx版本的binary
|
支持Openwrt,没有编译依赖,容易编译到任何平台上。release中提供了ar71xx版本的binary
|
||||||
|
|
||||||
epoll纯异步,高并发,除了回收过期连接外,所有操作的时间复杂度都跟连接数无关。回收过期连接的操做也是一点一点进行的,不会因为消耗太多cpu时间造成延迟抖动。
|
epoll纯异步,高并发,除了回收过期连接外,所有操作的时间复杂度都跟连接数无关。回收过期连接的操做也是柔和进行的,不会因为消耗太多cpu时间造成延迟抖动。
|
||||||
|
|
||||||
### 关键词
|
### 关键词
|
||||||
突破udp qos,突破udp屏蔽,openvpn tcp over tcp problem,openvpn over icmp,udp to icmp tunnel,udp to tcp tunnel,udp via icmp,udp via tcp
|
突破udp qos,突破udp屏蔽,openvpn tcp over tcp problem,openvpn over icmp,udp to icmp tunnel,udp to tcp tunnel,udp via icmp,udp via tcp
|
||||||
@ -50,7 +48,7 @@ epoll纯异步,高并发,除了回收过期连接外,所有操作的时间
|
|||||||
# 简明操作说明
|
# 简明操作说明
|
||||||
|
|
||||||
### 环境要求
|
### 环境要求
|
||||||
Linux主机,有root权限。主机上最好安装了iptables命令(apt/yum很容易安装)。在windows和mac上可以开虚拟机(桥接模式测试可用)。
|
Linux主机,有root权限。主机上最好安装了iptables命令(apt/yum很容易安装)。在windows和mac上可以开虚拟机(桥接模式和NAT模式经测试都可用)。
|
||||||
|
|
||||||
### 安装
|
### 安装
|
||||||
下载编译好的二进制文件,解压到任意目录。
|
下载编译好的二进制文件,解压到任意目录。
|
||||||
@ -110,7 +108,7 @@ other options:
|
|||||||
-h,--help print this help message
|
-h,--help print this help message
|
||||||
```
|
```
|
||||||
### iptables 规则
|
### iptables 规则
|
||||||
用raw收发tcp包本质上绕过了linux内核的tcp协议栈。linux碰到raw socket发来的包会不认识,如果一直收到不认识的包,会回复大量RST,造成不稳定或性能问题。所以强烈建议添加iptables规则屏蔽Linux内核的对指定端口的处理。用-a选项,udp2raw会在启动的时候自动帮你加上Iptables规则,退出的时候再自动删掉。如果你不信任-a选项的可靠性,可以用-g选项来生成相应的Ip规则再自己手动添加。
|
用raw收发tcp包本质上绕过了linux内核的tcp协议栈。linux碰到raw socket发来的包会不认识,如果一直收到不认识的包,会回复大量RST,造成不稳定或性能问题。所以强烈建议添加iptables规则屏蔽Linux内核的对指定端口的处理。用-a选项,udp2raw会在启动的时候自动帮你加上Iptables规则,退出的时候再自动删掉。如果长期使用,可以用-g选项来生成相应的Iptables规则再自己手动添加,这样规则不会在udp2raw退出时被删掉,可以避免停掉udp2raw后内核向对端回复RST。
|
||||||
|
|
||||||
用raw收发udp包也类似,只是内核回复的是icmp unreachable。而用raw 收发icmp,内核会自动回复icmp echo。都需要相应的iptables规则。
|
用raw收发udp包也类似,只是内核回复的是icmp unreachable。而用raw 收发icmp,内核会自动回复icmp echo。都需要相应的iptables规则。
|
||||||
### cipher-mode 和 auth-mode
|
### cipher-mode 和 auth-mode
|
||||||
@ -154,6 +152,8 @@ raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5
|
|||||||
[udp2raw+kcptun step_by_step教程](kcptun_step_by_step.md)
|
[udp2raw+kcptun step_by_step教程](kcptun_step_by_step.md)
|
||||||
### 中转 finalspeed
|
### 中转 finalspeed
|
||||||
[udp2raw+finalspeed step_by_step教程](finalspeed_step_by_step.md)
|
[udp2raw+finalspeed step_by_step教程](finalspeed_step_by_step.md)
|
||||||
|
# 如何自己编译
|
||||||
|
[编译教程](build_guide.zh-cn.md)
|
||||||
# 相关repo
|
# 相关repo
|
||||||
### kcptun-raw
|
### kcptun-raw
|
||||||
this project was inspired by kcptun-raw,which modified kcptun to support tcp mode.
|
this project was inspired by kcptun-raw,which modified kcptun to support tcp mode.
|
||||||
|
72
doc/build_guide.zh-cn.md
Normal file
72
doc/build_guide.zh-cn.md
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# udp2raw编译方法
|
||||||
|
本文演示怎么把udp2raw编译到自己所需的平台。
|
||||||
|
|
||||||
|
## 可以本地编译的linux平台
|
||||||
|
比如电脑、树莓派
|
||||||
|
|
||||||
|
##### 首先安装git
|
||||||
|
debian/ubuntun执行:
|
||||||
|
```
|
||||||
|
sudo apt-get install git
|
||||||
|
```
|
||||||
|
redhat/centos执行:
|
||||||
|
```
|
||||||
|
sudo yum install git
|
||||||
|
```
|
||||||
|
##### 用git把源码clone至本地
|
||||||
|
|
||||||
|
在任意目录执行:
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://github.com/wangyu-/udp2raw-tunnel.git
|
||||||
|
cd udp2raw-tunnel
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 安装g++ make 等工具
|
||||||
|
debian/ubuntun执行:
|
||||||
|
```
|
||||||
|
sudo apt-get install build-essential
|
||||||
|
```
|
||||||
|
|
||||||
|
redhat/centos执行:
|
||||||
|
```
|
||||||
|
sudo yum groupinstall 'Development Tools'
|
||||||
|
```
|
||||||
|
|
||||||
|
然后运行make,编译完成。 生成的udp2raw就是编译好的bianry。
|
||||||
|
|
||||||
|
## 需要交叉编译的平台
|
||||||
|
比如各种openwrt路由器
|
||||||
|
|
||||||
|
##### 首先安装git
|
||||||
|
debian/ubuntun执行:
|
||||||
|
```
|
||||||
|
sudo apt-get install git
|
||||||
|
```
|
||||||
|
redhat/centos执行:
|
||||||
|
```
|
||||||
|
sudo yum install git
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 下载安装交叉编译工具包
|
||||||
|
去downloads.openwrt.org上找到自己的openwrt版本和cpu型号对应的SDK。通常openwrt版本号不一样也问题不大,最主要是cpu型号。
|
||||||
|
|
||||||
|
比如我的tplink wdr4310运行的是chaos_calmer 15.05,ar71xx cpu,应该下载这个包:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/OpenWrt-SDK-15.05-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
|
||||||
|
```
|
||||||
|
解压到本地任意目录,比如:/home/wangyu/OpenWrt-SDK-ar71xx-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2
|
||||||
|
|
||||||
|
让后依次进入,staging_dir ,toolchain-xxxxx ,bin 目录,找到后缀是g++的软链,比如我的是mips-openwrt-linux-g++ ,记下这个文件的完整路径:
|
||||||
|
|
||||||
|
```
|
||||||
|
/home/wangyu/Desktop/OpenWrt-SDK-15.05-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-g++
|
||||||
|
```
|
||||||
|
##### 编译
|
||||||
|
把makefile的第一行 cross_cc=后面的内容改成你刚才记下的完整路径:
|
||||||
|
```
|
||||||
|
cc_cross=/home/wangyu/Desktop/OpenWrt-SDK-15.05-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-g++
|
||||||
|
```
|
||||||
|
|
||||||
|
执行make cross,目录下生成udp2raw文件。编译完成。
|
@ -18,6 +18,9 @@ assume server ip is 45.66.77.88
|
|||||||
|
|
||||||
#### client side config
|
#### client side config
|
||||||
```
|
```
|
||||||
|
client
|
||||||
|
dev tun100
|
||||||
|
proto udp
|
||||||
|
|
||||||
remote 127.0.0.1 3333
|
remote 127.0.0.1 3333
|
||||||
resolv-retry infinite
|
resolv-retry infinite
|
||||||
|
Loading…
x
Reference in New Issue
Block a user