Compare commits
47 Commits
20171125.0
...
20171111.0
Author | SHA1 | Date | |
---|---|---|---|
|
28e182cea4 | ||
|
65cacab30a | ||
|
fb330f3700 | ||
|
bf9a98edab | ||
|
8cee48bd69 | ||
|
6f2a286168 | ||
|
2610760b61 | ||
|
1988bff9ba | ||
|
2a16a198b3 | ||
|
400e148bce | ||
|
58eae7736a | ||
|
9dc2e5a391 | ||
|
e41accc38c | ||
|
1628c15fcb | ||
|
79855b445d | ||
|
9e010c7f97 | ||
|
dce81b3fbf | ||
|
24310edd35 | ||
|
2e1d4f001d | ||
|
ae82925a74 | ||
|
f953d6d702 | ||
|
9e522f79b8 | ||
|
72c6240716 | ||
|
aac9453518 | ||
|
b24784b26c | ||
|
5660eed366 | ||
|
4c92c29948 | ||
|
cadb142455 | ||
|
fcb418f5ea | ||
|
63eb7f1f7f | ||
|
66b2bb87c5 | ||
|
6b27f8624d | ||
|
ce7b89f6b6 | ||
|
a0bfa86699 | ||
|
e332cabfed | ||
|
9798bf496a | ||
|
7aa4b8745e | ||
|
ea6a41ebb3 | ||
|
77ba1161f5 | ||
|
7858c4d832 | ||
|
71152ffbe3 | ||
|
b06e979dc8 | ||
|
5300f98b0a | ||
|
063d133463 | ||
|
4c88df9c0e | ||
|
52cb20ec20 | ||
|
7aede9edd0 |
@@ -1,6 +0,0 @@
|
||||
For English speaking user:
|
||||
https://github.com/wangyu-/UDPspeeder/wiki/Issue-Guide
|
||||
|
||||
中文用户请看:
|
||||
https://github.com/wangyu-/UDPspeeder/wiki/发Issue前请看
|
||||
(否则Issue可能被忽略,或被直接关掉)
|
@@ -3,9 +3,11 @@
|
||||
|
||||
A Tunnel which turns UDP Traffic into Encrypted FakeTCP/UDP/ICMP Traffic by using Raw Socket, helps you Bypass UDP FireWalls(or Unstable UDP Environment). It can defend Replay-Attack and supports Multiplexing. It also acts as a Connection Stabilizer.
|
||||
|
||||
When used alone,udp2raw tunnels only UDP traffic. Nevertheless,if you used udp2raw + any UDP-based VPN together,you can tunnel any traffic(include TCP/UDP/ICMP),currently OpenVPN/L2TP/ShadowVPN and [tinyFecVPN](https://github.com/wangyu-/tinyFecVPN) are confirmed to be supported.
|
||||
|
||||

|
||||
|
||||
When used alone,udp2raw tunnels only UDP traffic. Nevertheless,if you used udp2raw + any UDP-based VPN together,you can tunnel any traffic(include TCP/UDP/ICMP),currently OpenVPN/L2TP/ShadowVPN and [tinyFecVPN](https://github.com/wangyu-/tinyFecVPN) are confirmed to be supported.
|
||||
or
|
||||
|
||||

|
||||
|
||||
|
@@ -16,7 +16,7 @@ u64_t get_current_time()
|
||||
{
|
||||
timespec tmp_time;
|
||||
clock_gettime(CLOCK_MONOTONIC, &tmp_time);
|
||||
return ((u64_t)tmp_time.tv_sec)*1000llu+((u64_t)tmp_time.tv_nsec)/(1000*1000llu);
|
||||
return tmp_time.tv_sec*1000+tmp_time.tv_nsec/(1000*1000l);
|
||||
}
|
||||
|
||||
u64_t pack_u64(u32_t a,u32_t b)
|
||||
|
@@ -1,5 +1,5 @@
|
||||
# Udp2raw-tunnel
|
||||

|
||||

|
||||
udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。可以有效防止在使用kcptun或者finalspeed的情况下udp端口被运营商限速。
|
||||
|
||||
支持心跳保活、自动重连,重连后会恢复上次连接,在底层掉线的情况下可以保持上层不掉线。同时有加密、防重放攻击、信道复用的功能。
|
||||
@@ -20,17 +20,7 @@ https://github.com/wangyu-/UDPspeeder
|
||||
# 支持的平台
|
||||
Linux主机,有root权限。可以是PC、android手机/平板、openwrt路由器、树莓派。主机上最好安装了iptables命令(apt/yum很容易安装)。
|
||||
|
||||
Release中提供了`amd64`、`x86`、`arm`、`mips_be`、`mips_le`的预编译binary.
|
||||
|
||||
##### 对于windows和mac用户:
|
||||
|
||||
在虚拟机中可以稳定使用(udp2raw跑在Linux里,其他应用照常跑在window里;确保虚拟机网卡工作在桥接模式)。可以使用[这个](https://github.com/wangyu-/udp2raw-tunnel/releases/download/20171108.0/lede-17.01.2-x86_virtual_machine_image.zip)虚拟机镜像,大小只有7.5mb,免去在虚拟机里装系统的麻烦;虚拟机自带ssh server,可以scp拷贝文件,可以ssh进去,可以复制粘贴,root密码123456。
|
||||
|
||||
如果你的网络不允许桥接,也是有办法用的,具体方法请看wiki。
|
||||
|
||||
##### 对于ios和游戏主机用户:
|
||||
|
||||
可以把udp2raw运行在局域网的其他机器上。最好的办法是买个能刷OpenWrt/LEDE/梅林的路由器,把udp2raw运行在路由器上。
|
||||
对于windows和mac用户,在虚拟机中可以稳定使用(udp2raw跑在Linux里,其他应用照常跑在window里;确保虚拟机网卡工作在桥接模式)。可以使用[这个](https://github.com/wangyu-/udp2raw-tunnel/releases/download/20171108.0/lede-17.01.2-x86_virtual_machine_image.zip)虚拟机镜像,大小只有7.5mb,免去在虚拟机里装系统的麻烦;虚拟机自带ssh server,可以scp拷贝文件,可以ssh进去,可以复制粘贴,root密码123456。
|
||||
|
||||
# 功能特性
|
||||
### 把udp流量伪装成tcp /icmp
|
||||
@@ -60,7 +50,7 @@ NAT 穿透 ,tcp icmp udp模式都支持nat穿透。
|
||||
|
||||
支持Openvz,配合finalspeed使用,可以在openvz上用tcp模式的finalspeed
|
||||
|
||||
支持Openwrt,没有编译依赖,容易编译到任何平台上。
|
||||
支持Openwrt,没有编译依赖,容易编译到任何平台上。release中提供了ar71xx版本的binary
|
||||
|
||||
epoll实现,高并发,除了回收过期连接外,所有操作的时间复杂度都跟连接数无关。回收过期连接的操做也是柔和进行的,不会因为消耗太多cpu时间造成延迟抖动。
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
|
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 29 KiB |
12
main.cpp
@@ -1196,13 +1196,13 @@ int client_event_loop()
|
||||
if (nfds < 0) { //allow zero
|
||||
if(errno==EINTR )
|
||||
{
|
||||
mylog(log_info,"epoll interrupted by signal,continue\n");
|
||||
mylog(log_info,"epoll interrupted by signal\n");
|
||||
//close(fifo_fd);
|
||||
//myexit(0);
|
||||
myexit(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
mylog(log_fatal,"epoll_wait return %d,%s\n", nfds,strerror(errno));
|
||||
mylog(log_fatal,"epoll_wait return %d\n", nfds);
|
||||
myexit(-1);
|
||||
}
|
||||
}
|
||||
@@ -1440,12 +1440,12 @@ int server_event_loop()
|
||||
if (nfds < 0) { //allow zero
|
||||
if(errno==EINTR )
|
||||
{
|
||||
mylog(log_info,"epoll interrupted by signal,continue\n");
|
||||
//myexit(0);
|
||||
mylog(log_info,"epoll interrupted by signal\n");
|
||||
myexit(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
mylog(log_fatal,"epoll_wait return %d,%s\n", nfds,strerror(errno));
|
||||
mylog(log_fatal,"epoll_wait return %d\n", nfds);
|
||||
myexit(-1);
|
||||
}
|
||||
}
|
||||
|