Compare commits

...

11 Commits

Author SHA1 Message Date
wangyu
2251947278 Merge branch 'master' of https://github.com/wangyu-/udp2raw-tunnel 2017-08-09 21:30:10 +08:00
wangyu
c48c619002 added mtu warning 2017-08-09 21:29:54 +08:00
wangyu-
0cac945a26 Update kcptun_step_by_step.md 2017-08-09 06:04:18 -07:00
wangyu-
97738ab3ce Update finalspeed_step_by_step.md 2017-08-09 06:03:25 -07:00
wangyu-
a6bb0b50cf Update finalspeed_step_by_step.md 2017-08-09 06:02:30 -07:00
wangyu-
e7530fa7f9 Update README.zh-cn.md 2017-08-09 05:15:03 -07:00
wangyu-
cec1257474 Update README.zh-cn.md 2017-08-08 19:09:51 -07:00
wangyu
c97f09f534 Merge branch 'master' of https://github.com/wangyu-/udp2raw-tunnel 2017-08-09 09:18:41 +08:00
wangyu
92581be9a1 generates udp2raw_binaries.tar.gz in makefile 2017-08-09 09:18:27 +08:00
wangyu-
58ab1f6b15 Update README.zh-cn.md 2017-08-08 08:57:07 -07:00
wangyu-
1b0d4f6d08 Update README.zh-cn.md 2017-08-08 01:24:34 -07:00
5 changed files with 23 additions and 6 deletions

View File

@@ -7,6 +7,10 @@ Udp2raw-tunnel
[udp2raw+kcptun step_by_step教程](kcptun_step_by_step.md) [udp2raw+kcptun step_by_step教程](kcptun_step_by_step.md)
[udp2raw+finalspeed step_by_step教程](finalspeed_step_by_step.md) [udp2raw+finalspeed step_by_step教程](finalspeed_step_by_step.md)
如果你需要加速跨国网游、网页浏览解决方案在另一个repo
https://github.com/wangyu-/UDPspeeder
### 把udp流量伪装成tcp /icmp ### 把udp流量伪装成tcp /icmp
用raw socket给udp包加上tcp/icmp包头可以突破udp流量限制或Udp QOS。或者在udp nat有问题的环境下提升稳定性。  另外也支持用raw 发udp包这样流量不会被伪装只会被加密。 用raw socket给udp包加上tcp/icmp包头可以突破udp流量限制或Udp QOS。或者在udp nat有问题的环境下提升稳定性。  另外也支持用raw 发udp包这样流量不会被伪装只会被加密。
@@ -18,12 +22,14 @@ Udp2raw-tunnel
### 模拟TCP3次握手 ### 模拟TCP3次握手
模拟TCP3次握手模拟seq ack过程。另外还模拟了一些tcp optionMSS,sackOk,TS,TS_ack,wscale用来使流量看起来更像是由普通的linux tcp协议栈发送的。 模拟TCP3次握手模拟seq ack过程。另外还模拟了一些tcp optionMSS,sackOk,TS,TS_ack,wscale用来使流量看起来更像是由普通的linux tcp协议栈发送的。
### 连接保持,连接快速恢复 ### 连接保持,连接快速恢复,单向链路失效检测
心跳机制检查连接是否中断一旦心跳超时。client会立即换raw socket的端口重连重连成功后会恢复之前中断的连接。虽然raw端的端口变了但是udp端的所有连接都会继续有效。udp这边感觉不到raw端的重连只会感觉到短暂断流,这跟普通的短暂丢包是类似的,不会导致上层应用重连。 心跳机制检查连接是否中断一旦心跳超时。client会立即换raw socket的端口重连重连成功后会恢复之前中断的连接。虽然raw端的端口变了但是udp端的所有连接都会继续有效。udp这边感觉不到raw端的重连只会感觉到短暂断流,这跟普通的短暂丢包是类似的,不会导致上层应用重连。
另一个优化是,重连只需要client发起就可以立即被server处理不需要等到server端的连接超时后。这个在单向连接失效的情况下有用。 Client能用单倍的超时时间检测到单向链路的失效不管是上行还是下行只要有一端失效就能被client检测到。重连只需要client发起就可以立即被server处理不需要等到server端的连接超时后。
对于有大量client的情况对于不同client,server发送的心跳是错开时间发送的不会因为短时间发送大量的心跳而造成拥塞和延迟抖动。
另外对于有大量client的情况对于不同client,server发送的心跳是错开时间发送的不会因为短时间发送大量的心跳而造成拥塞和延迟抖动。
### 其他特性 ### 其他特性
信道复用client的udp端支持多个连接。 信道复用client的udp端支持多个连接。
@@ -36,7 +42,7 @@ NAT 穿透 tcp icmp udp模式都支持nat穿透。
支持Openwrt,没有编译依赖容易编译到任何平台上。release中提供了ar71xx版本的binary 支持Openwrt,没有编译依赖容易编译到任何平台上。release中提供了ar71xx版本的binary
单进程,纯异步,无锁,高并发,除了回收过期连接外,所有操作的时间复杂度都跟连接数无关。回收过期连接这个操作是个批量操作会定期进行但是会保证一次回收的数量不超过总数的1/10可配置不会造成延迟抖动。 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

View File

@@ -15,7 +15,7 @@ udp2raw也支持把udp流量包装成Icmp发送本教程不做演示。
### 环境要求 ### 环境要求
服务器主机是linux有root权限。  可以是openvz架构的vps。 也可以是openwrt路由器。 服务器主机是linux有root权限。  可以是openvz架构的vps。 也可以是openwrt路由器。
本地主机是windows,安装了wmware,安装了linux虚拟机网卡设置为桥接模式 本地主机是windows,本地有openwrt路由器或树莓派或安装了linux虚拟机网卡设置为桥接模式
(如果嫌给虚拟机安装linux麻烦可以下载别人提供好的linux虚拟机镜像比如https://www.kali.org/downloads/ ,不过我没有测试过这个镜像,我用的是debian 7) (如果嫌给虚拟机安装linux麻烦可以下载别人提供好的linux虚拟机镜像比如https://www.kali.org/downloads/ ,不过我没有测试过这个镜像,我用的是debian 7)

View File

@@ -4,7 +4,7 @@
本教程会一步一步演示用udp2raw+kcptun加速SSH流量的过程。加速任何其他tcp流量也一样。 本教程会一步一步演示用udp2raw+kcptun加速SSH流量的过程。加速任何其他tcp流量也一样。
### 环境要求 ### 环境要求
两边的主机都是linux有root权限。 windows上桥接模式的虚拟机可用 两边的主机都是linux有root权限。 可以是openwrt路由器或树莓派windows上桥接模式的虚拟机可用
### 安装 ### 安装

View File

@@ -38,6 +38,7 @@ int disable_anti_replay=0;
char key_string[1000]= "secret key"; char key_string[1000]= "secret key";
char key[16];//,key2[16]; char key[16];//,key2[16];
int mtu_warn=1375;
//uint64_t current_time_rough=0; //uint64_t current_time_rough=0;
@@ -2039,6 +2040,10 @@ int client_event_loop()
myexit(1); myexit(1);
}; };
if(recv_len>=mtu_warn)
{
mylog(log_warn,"huge packet,data len=%d (>=%d).strongly suggested to set a smaller mtu at upper level,to get rid of this warn\n ",recv_len,mtu_warn);
}
mylog(log_trace,"Received packet from %s:%d,len: %d\n", inet_ntoa(udp_new_addr_in.sin_addr), mylog(log_trace,"Received packet from %s:%d,len: %d\n", inet_ntoa(udp_new_addr_in.sin_addr),
ntohs(udp_new_addr_in.sin_port),recv_len); ntohs(udp_new_addr_in.sin_port),recv_len);
@@ -2312,6 +2317,11 @@ int server_event_loop()
continue; continue;
} }
if(recv_len>=mtu_warn)
{
mylog(log_warn,"huge packet,data len=%d (>=%d).strongly suggested to set a smaller mtu at upper level,to get rid of this warn\n ",recv_len,mtu_warn);
}
//conn_info.conv_manager->update_active_time(conv_id); server dosnt update from upd side,only update from raw side. (client updates at both side) //conn_info.conv_manager->update_active_time(conv_id); server dosnt update from upd side,only update from raw side. (client updates at both side)
if(conn_info.state.server_current_state==server_ready) if(conn_info.state.server_current_state==server_ready)

View File

@@ -19,4 +19,5 @@ release:
g++ main.cpp -o udp2raw_amd64 -static -ggdb -I. lib/aes.c lib/md5.c encrypt.cpp log.cpp network.cpp common.cpp -lrt -std=c++11 ${FLAGS} ${FLAGS2} g++ main.cpp -o udp2raw_amd64 -static -ggdb -I. lib/aes.c lib/md5.c encrypt.cpp log.cpp network.cpp common.cpp -lrt -std=c++11 ${FLAGS} ${FLAGS2}
g++ main.cpp -o udp2raw_x86 -static -ggdb -I. lib/aes.c lib/md5.c encrypt.cpp log.cpp network.cpp common.cpp -lrt -std=c++11 ${FLAGS} ${FLAGS2} -m32 g++ main.cpp -o udp2raw_x86 -static -ggdb -I. lib/aes.c lib/md5.c encrypt.cpp log.cpp network.cpp common.cpp -lrt -std=c++11 ${FLAGS} ${FLAGS2} -m32
${ccmips} main.cpp -o udp2raw_ar71xx -lrt -I. lib/aes.c lib/md5.c encrypt.cpp log.cpp network.cpp common.cpp -std=c++11 ${FLAGS} ${FLAGS2} ${ccmips} main.cpp -o udp2raw_ar71xx -lrt -I. lib/aes.c lib/md5.c encrypt.cpp log.cpp network.cpp common.cpp -std=c++11 ${FLAGS} ${FLAGS2}
tar -zcvf udp2raw_binaries.tar.gz udp2raw_amd64 udp2raw_x86 udp2raw_ar71xx