Total Pageviews

Saturday, 29 January 2022

利用udp2raw,使得被isp进行qos限速的wireguard起死复生

服务端配置

在VPS,下载服务端:

wget https://github.com/wangyu-/udp2raw/releases/download/20200818.0/udp2raw_binaries.tar.gz

tar xvf udp2raw_binaries.tar.gz

解压出来的东西,除了udp2raw_amd64之外,所有其它解压出来的东西都可删除。

./udp2raw_amd64 -s -l 0.0.0.0:4096 -r 127.0.0.1:51820 -a -k mypassword --raw-mode faketcp &

(可用systemd把此命令运行为service)

此命令中的51820为服务器上的wireguard所监听的端口。


客户端配置(客户端机器为mac)

在mac上,安装pcap:
brew install libpcap

mkdir ~/udp2raw_mp_binaries

cd ~/udp2raw_mp_binaries

wget https://github.com/wangyu-/udp2raw-multiplatform/releases/download/20210111.0/udp2raw_mp_binaries.tar.gz

tar xvf udp2raw_mp_binaries.tar.gz

sudo ./udp2raw_mp_mac -c -l 0.0.0.0:3333  -r vps-public-ip:4096 -k mypassword --raw-mode easy-faketcp  (不要关闭此窗口)


然后,编辑mac上的wireguard 的配置文件:
nano /etc/wireguard/wg2.conf

cat /etc/wireguard/wg2.conf

[Interface]

PrivateKey = 你的PrivateKey的值

Address = 17.0.0.2/24

DNS = 8.8.8.8

MTU = 1200


[Peer]

PublicKey = 你的PublicKey的值

Endpoint = 0.0.0.0:3333

AllowedIPs = 0.0.0.0/0

PersistentKeepalive = 25


其中,Endpoint的值要改为0.0.0.0:3333


然后运行wireguard:

sudo wg-quick up wg2


至此,即可用 wireguard翻墙。


https://github.com/wangyu-/udp2raw-multiplatform/wiki/%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8


https://github.com/wangyu-/udp2raw-multiplatform/wiki/%E4%B8%AD%E6%96%87%E6%96%87%E7%AB%A0


注意1:必须先运行udp2raw,后运行wireguard。顺序不可颠倒。

注意2MTU的值要设置得低一点,比如1200,不要设为1300或1400.

这在https://github.com/wangyu-/udp2raw-tunnel/blob/master/doc/README.zh-cn.md里面有说明:MTU设置(重要)

不论你用udp2raw来加速kcptun还是vpn(基于udp流量的vpn, 比如wireguard vpn),为了稳定使用,都需要设置合理的MTU(在kcptun/vpn的配置文件里设置,而不是在udp2raw里),建议把MTU设置成1200。client和server端都要设置。(设置为同一个值)“
-----------------------------------

related post: 

https://briteming.blogspot.com/2018/11/macwireguard.html

https://briteming.blogspot.com/2017/10/udp2raw-tunnel_23.html

-----------------------------------------------


Wireguard-anti-QOS

介绍

Wireguard走UDP协议,部分运营商会对UDP进行限速QOS处理使连接速度不理想或出现丢包情况。若串联udp2raw可将UDP流量伪装成TCP流量避免被运营商QOS。本项目脚本会在服务器搭建Wireguard和udp2raw服务,同时本地使用Tunsafe连接Wireguard时会自动运行大陆IP分流脚本和udp2raw程序。

本项目脚本根据Atrandys一键脚本修改,请支持原作者,项目地址:https://github.com/yobabyshark/wireguard

使用方法

bash <(curl -L -s https://raw.githubusercontent.com/lmc999/Wireguard-anti-QOS/master/wg-anti-qos.sh)

用Winscp等软件登入VPS,下载目录/etc/wireguard/中的client.conf到Tunsafe配置文件目录

下载Tunsafe用批处理文件文件: https://github.com/lmc999/Wireguard-anti-QOS/archive/master.zip

解压缩文件,并将文件夹内的所有文件解压到 D:\software\TunSafe\bat

本教程Tunsafe默认安装路径 D:\software\TunSafe,如果你的安装路径不一样请注意修改clien.conf中的批处理程序的路径.同时建议安装路径不要有空格。

用记事本打开start.bat,修改44.55.66.77为你Wireguard服务器ip

开启Tunsafe的Pre/Post命令功能。在"Option"选择"Allow Pre/Post Commands"

TunSafe选中client.conf, connect即可自动分流和串联udp2raw


from  https://github.com/lmc999/Wireguard-anti-QOS

-----


WireguardForGame

介绍

Wireguard走UDP协议,部分运营商会对UDP进行限速QOS处理使连接速度不理想或出现丢包情况。若串联udp2raw可将UDP流量伪装成TCP流量避免被运营商QOS。另外同时再串联udpspeeder多倍发包可降低游戏丢包率。本项目脚本会在服务器搭建Wireguard、udp2raw、udpspeeder服务,同时本地使用Tunsafe连接Wireguard时会自动运行大陆IP分流脚本,udp2raw和udpspeeder程序。

本项目脚本根据Atrandys一键脚本修改,请支持原作者,项目地址:https://github.com/atrandys/wireguard

事前准备

电脑需安装好winpcap或npcap,下载地址请自行百度。

目前脚本支持centos7+, debian8+, ubuntu16+

使用方法

bash <(curl -L -s https://raw.githubusercontent.com/lmc999/WireguardForGame/master/wg-for-game.sh)

用Winscp等软件登入VPS,下载目录/etc/wireguard/中的client.conf到Tunsafe配置文件目录

下载Tunsafe用批处理文件文件master.zip

解压缩文件,并将文件夹内的所有文件解压到 D:\software\TunSafe\bat

本教程Tunsafe默认安装路径 D:\software\TunSafe,如果你的安装路径不一样请注意修改clien.conf中的批处理程序的路径.同时建议安装路径不要有空格。

用记事本打开start.bat,修改44.55.66.77为你Wireguard服务器ip

开启Tunsafe的Pre/Post命令功能。在"Option"选择"Allow Pre/Post Commands"

TunSafe选中client.conf, connect即可自动分流和串联udp2raw + udpspeeder

Wireguard配合游戏规则使用

本项目搭建成功后默认是大陆白名单模式,可以直接进行游戏。

但同时Wireguard的Windows客户端Tunsafe支持添加路由规则,指定具体路由走wireguard代理,原理与SSTAP的游戏规则相同。使用方法是往Tunsafe配置文件中的AllowIPs参数添加游戏路由表。这里以PUBG亚服规则为例子,请参考sample.conf

目前已有成熟的游戏规则项目,项目原本为SSTAP服务,但其实只需将该项目中的对应游戏规则添加到Wireguard中照样可正常使用。

项目传送门:https://github.com/FQrabbit/SSTap-Rule


from https://github.com/lmc999/WireguardForGame

---------------


RouterOS下,基于macvlan pppoe拨号的wireguard mtu问题

最近发现 git clone github 上面稍微大一点的库的时候就会在下载到几百兆的时候报错断开。我一直以为是从 udp2raw 切换到 hysteria 才导致的线路不稳定。但是报错断开的同时观察 ping 数据,一直处于非常稳定的状态。最近这一次碰到的时候突然联想到了 mtu 。觉得可能和它有关系。就尝试调整了一下。

git clone 大致的报错如下:

remote: Enumerating objects: 222542, done.
remote: Counting objects: 100% (11400/11400), done.
remote: Compressing objects: 100% (466/466), done.
error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL (err 8)
error: 6407 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output

网络结构:


之前用的是 udp2raw + udpspeeder,来包裹 wireguard 协议。udpspeeder 好像会重新对包进行组装。所以没有遇到网络问题。
但由于 routeros 中的 container 没有 iptables 的权限。没有办法运行 udp2raw,所以换成了 hysteria 对 wireguard 协议进行包裹。运行了一段时间之后感觉稳定性也还不错。延迟似乎还更低了一些。从 github 拉一些不太大的库也没有碰到问题。

这次怀疑 mtu 问题也只是猜测而已。尝试过设置两边的 wg0 接口 mtu 值为 1480, 1460, 1420, 1280 都没有解决问题。错误的设置甚至会导致 git clone 操作卡死不动,直到 timeout。

最后测试下来发现下面的设置是有效的:

  • 设置 macvlan mtu 为 1480
  • pppoe 拨号后会自动设置 mtu 为 1472 (1480-8)
  • 保持 routeros wg0 mtu 为默认的 1420
  • server 端 wg0 保持为 1500

其它

中间加入了一层 macvlan 是因为给 pppoe 做单线多拨。
很早之前也遇到过 mtu 导致的网络问题,但通常都是在访问 http 服务的时候出现的,而且大部分网站都会遇到访问问题。这次的情况好像只有 github 出现问题。并且只是在 git clone 的时候出现问题。通过浏览器访问、下载都是正常的。其实这次出现问题我也没有发现设置上明显的错误。最后虽然解决了,但也只是通过猜测解决的。暂时先记录一下。继续观察看看。


2024-03-29 更新:

最近又出现了 github 不能 clone 仓库的问题了。应该还是 mtu 导致的问题。最后找到了解决方案。通过下面的命令设置 server 的 pmtu

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

并且设置:

  • 还原 routeros 中 macvlan mtu 为 1500
  • 设置 server 端 wg0 接口 mtu 为默认的 1420

No comments:

Post a Comment