为什么我们要安装WsTunnel服务?因为Wireguard使用的是UDP端口进行的通信,我本地通过UDP进行Wireguard通信,网速只能达到100K/s,但是我的实际带宽有100M+。为什么UDP这么慢?因为运营商对于UDP有QOS限速,但是对于TCP流量通常是正常的,如果我们将流量通过TCP进行封装一层,就能避免运营商的QOS。常见的将UDP转成TCP的工具包括udp2raw,wstunnel,gost等。本文介绍的是使用wstunnel进行UDP流量的封装。
配置好了WsTunnel之后,速度从100K/s->10M/s,提高100倍。
WsTunnel的Github仓库地址:GitHub-WsTunnel。
1.安装wstunnel
wstunnel需要在客户端和服务端(一般是有公网IP的机器,比如VPS)同时安装。
使用如下的命令下载wstunnel。
mkdir wstunnel
wget https://github.com/erebe/wstunnel/releases/download/v10.4.4/wstunnel_10.4.4_linux_amd64.tar.gz
安装wstunnel:
# 解压缩
tar -xvzf wstunnel_*.tar.gz
# 给wstunnel加上可执行权限
chmod a+x wstunnel
2.启动wstunnel
2.1 在Linux启动服务端
wstunnel server --restrict-to localhost:31820 wss://[::]:1443
需要将31820修改为自己的Wireguard服务所启动的端口(通常默认为51820,如果有修改过的话,需要手动修改)。
后面的wss://[::]:1443
代表,需要在1443端口上启动一个WebSocket服务。客户端到时候会将流量发送到这个端口上,WSTunnel再将流量转发到31820端口上。
可以通过如下的步骤去配置开机自启动。
首先要新增一个wstunnel的Service。
sudo vim /etc/systemd/system/wstunnel.service
往其中去启动添加如下的内容(ExecStart部分需要和上面的启动命令一致):
[Unit]
Description=wstunnel Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/wstunnel
ExecStart=/root/wstunnel/wstunnel server --restrict-to localhost:31820 wss://[::]:1443
StandardOutput=append:/root/wstunnel/wstunnel.log
StandardError=inherit
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
接着我们使用如下的命令去配置好开机自启动wstunnel服务。
# 重新加载配置文件
sudo systemctl daemon-reload
# 启动wstunnel服务
sudo systemctl start wstunnel
# 配置开机自启动
sudo systemctl enable wstunnel
# 查看wstunnel服务的状态
sudo systemctl status wstunnel
2.2 在Linux启动客户端
服务端当中,配置了接收1443的WebSocket请求,1443将请求转发给UDP的31820端口。接下面我们来配置wstunnel客户端,我们使用如下的命令启动wstunnel客户端。
wstunnel client -L 'udp://31820:localhost:31820?timeout_sec=0' wss://{wstunnel-server-ip}:1443
udp://31820
代表我需要wstunnel帮我把远程服务器的31820端口的流量转发给当前机器。- 配置转发转发给当前机器的哪个端口呢?通过
localhost:31820
去配置转发的目标地址(也是UDP协议的端口)。 wss://{wstunnel-server-ip}:1443
则是配置远程服务器的WebSocket地址。
因此上面的命令的含义就是,告诉wss://{wstunnel-server-ip}:1443
这台机器,请将你的udp://31820
的流量转发给UDP端口localhost:31820
。
可以通过如下的命令配置开机自启动:
sudo vim /etc/systemd/system/wstunnel.service
往其中加入如下的内容,ExecStart需要换成刚刚我们的启动命令。
[Unit]
Description=wstunnel Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/home/wanna/wg/wstunnel-wg
ExecStart=/home/wanna/wg/wstunnel-wg/wstunnel client -L 'udp://31820:localhost:31820?timeout_sec=0' wss://{wstunel-server-ip}:1443
StandardOutput=append:/home/wanna/wg/wstunnel-wg/wstunnel.log
StandardError=inherit
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
接着我们使用如下的命令去配置好开机自启动wstunnel服务。
# 重新加载配置文件
sudo systemctl daemon-reload
# 启动wstunnel服务
sudo systemctl start wstunnel
# 配置开机自启动
sudo systemctl enable wstunnel
# 查看wstunnel服务的状态
sudo systemctl status wstunnel
2.3 在Mac设备启动客户端
Mac当中配置自启动,和Linux类似。
需要在~/Library/LaunchAgents
下新建一个文件xxx.plist
,这里起名叫com.wanna.wstunnel.plist
。
vim ~/Library/LaunchAgents/com.wanna.wstunnel.plist
往其中加入如下的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AbandonProcessGroup</key>
<true/>
<key>Label</key>
<string>com.wanna.wstunnel</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/wstunnel_10.4.4_darwin_arm64/wstunnel</string>
<string>client</string>
<string>-L</string>
<string>udp://31820:localhost:31820?timeout_sec=0</string>
<string>wss://{wstunnel-server-ip}:1443</string>
</array>
<key>StartInterval</key>
<integer>3600</integer>
</dict>
</plist>
使用如下的命令启动服务。
launchctl load ~/Library/LaunchAgents/com.wanna.wstunnel.plist
launchctl start com.wanna.wstunne
评论