udp2raw解决运营商封锁大量UDP流量问题

/ 0评 / 4

1、前言

在使用SS和V2Ray的过程当中,如果你使用YouTube,会发现所有的YoutTube流量都是UDP流量,而大部分运营商都会对UDP流量进行限速,俗称网上说的QoS。上述情况表现的状况就是,SS和V2Ray的使用过程中,如果有大量UDP流量产生,SS/V2Ray就会断线,无论如何都解决不了。

网上给出的解决办法是“骗过”运营商的检测,使用UDP2Raw-tunnel

udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。可以有效防止在使用kcptun或者finalspeed的情况下udp端口被运营商限速。
支持心跳保活、自动重连,重连后会恢复上次连接,在底层掉线的情况下可以保持上层不掉线。同时有加密、防重放攻击、信道复用的功能。

udp2rawj图片介绍

本篇就是介绍通过udp2raw-tunnel解决运营商对udp端口进行限速的问题。

2、当前网络环境介绍

路由器:OpenWrt/Lede X86
加速对象:V2Ray
目的:解决在线看YouTube导致翻墙服务链接失败问题(即大量UDP流量,导致被运营商限速)

3、交叉编译UDP2Raw源代码

下载编译工具包
按照如下链接格式,选择自己对应的系统平台,我是X86_64平台的
http://archive.openwrt.org/releases/18.06.3/targets/x86/64/openwrt-sdk-18.06.3-x86-64_gcc-7.3.0_musl.Linux-x86_64.tar.xz
下载完成后解压到任意目录,tar.xz使用tar -xzJv解压即可。
我使用的是X86版本的Lede,实际上可以在UDP2Raw的Release页面下载Binary版本运行,但是实际上我下载后并不能直接运行,没办法就直接用源代码,并下载交叉编译工具包进行编译。

下载UDP2Raw源代码
这里是直接给openwrt用,并且同时要使用对应的luci-app,所以找到了这个git repo,专门针对openwrt环境下udp2raw的编译makefile,同时也带有luci-app的repo,一并编译,方便通过gui控制udp2raw。
https://github.com/sensec/openwrt-udp2raw
https://github.com/sensec/luci-app-udp2raw
克隆两个repo到上述编译工具包下面的目录package,例如我把工具包解压后命名为opx64,那么两个repo则克隆到opx64/package/openwrt-udp2raw,和opx64/package/luci-app-udp2raw

开始编译
进入到刚刚克隆的openwrt-udp2raw目录,对makefile进行修改,用vi即可

vi Makefile

修改如下内容

PKG_VERSION行
修改为:PKG_VERSION:=20190421.0
后面版本号随意定义即可

PKG_SOURCE_VERSION行
修改为:PKG_SOURCE_VERSION:=0137dba1fd421ed1a61e7e913039833751e0446e
VERSION即为git commit的版本号,这里给出的是20181130的release版本号

对于luci-app-udp2raw目录则无需做任何修改,顶多修改版本号即可
进入到opx64的根目录,运行如下命令进行编译即可

make package/openwrt-udp2raw/compile V=s
make package/luci-app-udp2raw/compile V=s

1、出现错误:awk: include/scan.awk: line 21: function asort never defined

安装gawk即可
debian当中运行apt-get install gawk

2、出现错误: env: 'time': No such file or directory

安装time软件包即可
debian当中运行apt-get install time

编译成功后搜索ipk文件即可,当然如果你自己知道在哪里,也可以自己去找到

find ./ -name "*.ipk"

4、在openwrt/lede当中安装udp2raw

安装ipk文件

将ipk文件传输到openwrt当中任意目录,以下命令安装,或者直接在openwrt的luci界面当中安装

opkg install udp2raw-tunnel_20190421.0-1_x86_64.ipk
opkg install luci-app-udp2raw_1.0.0-4_all.ipk

安装完成后即可在luci界面当中找到对应的项目,进行配置即可启用

5、配置udp2raw生效

服务器端udp2raw的配置

由于udp2raw实际是个隧道,所以需要有服务器端和终端来配合使用建立隧道,即客户端接收翻墙软件所有的流量,并转发到服务端的udp2raw,服务端的udp2raw将udp流量转发给服务器上的翻墙软件,即完成了一次隧道转发

根据这个情况,服务端的udp2raw需要配置一个
下面是我的udp2raw服务端配置

udp2raw -s -l 0.0.0.0:4096 -r 127.0.0.1:27614 -k 000000 --raw-mode faketcp --cipher-mode non
e --auth-mode none -a

简单来说就是udp2raw监听本地4096端口的所有数据(这是隧道的服务端端口),并将这些数据处理后,发送到远端的27614端口(这就是对接的翻墙软件的入口),同时使用faketcp方式对数据进行伪装,加密的keyword是000000,cipher-mode和auth-mode即不进行加密和验证。
其实很容易理解,4096端口是接受客户端发送数据的端口,处理后转发到27614端口,即翻墙软件的服务端口,27614按照你的翻墙软件的端口进行修改即可,4096可以任意定义。

客户端udp2raw的配置

回到openwrt当中,在luci界面当中找到 服务—udp2raw隧道—服务器管理,添加你的udp2raw服务端对应的信息即可,我这里如下

别名(可选):任意
服务器:你的udp2raw服务端所在的服务器ip
服务器端口:即之前所提到4096端口
本地监听地址:0.0.0.0监听所有流量
本地监听端口:3333,这里记住,需要设置本地翻墙软件将数据发送到这个入口,以便udp2raw处理
Raw 方式:facktcp,同服务端
密码:000000,同服务端
加密方式:none,同服务端
验证方式 ,none,同服务端

设置完成之后运行即可

翻墙软件的设置

由于udp2raw本质上是一个隧道,原本本地的翻墙流量是直连服务器的,现在需要将本地翻墙流量转发到udp2raw的客户端,再由udp2raw转发到服务器达到伪造udp包的目的,这样一来,本地翻墙软件的配置需要做一些修改,这里以v2ray和ss为例

v2ray

outbounds":[{"protocol":"vmess","settings":{"vnext":[{"address":"127.0.0.1","port":3333,"
即outbounds字段当中的值,port应该为udp2raw的本地监听地址

ss

直接设置远端端口为本地127.0.0.1:3333即可

udp2raw的其他设置和帮助

具体请参考udp2raw-tunnel的官方git,如果有用,还请给start
https://github.com/wangyu-/udp2raw-tunnel/blob/master/doc/README.zh-cn.md

6、测试是否生效

绝大部分时候,youtube都能把速度跑到20M,大概就是4k影片流畅看的程度了,这就够了。

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据