使用 udp2raw 来搭配 WireGuard,确实是对抗高防网关无脑丢弃 UDP 包的“杀手锏”。它的核心逻辑是:把 WireGuard 的 UDP 流量伪装成正常的 TCP 握手和数据传输,从而无视网关对 UDP 的限速策略。
既然你是在两台内网节点(假设都是 Linux 系统)之间建立隧道,以下是详细的安装与配置手册。
核心拓扑理解
在开始之前,我们需要明确两端的数据流向:
- 服务端 (高防 VPS): 运行 WireGuard 服务端(假设监听
UDP 51820)。运行 udp2raw 服务端(监听TCP 4000),将收到的伪装 TCP 流量还原为 UDP,并转发给本机的51820端口。 - 客户端 (另一台机器): 运行 udp2raw 客户端(监听本地
UDP 3333),将流量伪装成 TCP 发往高防 VPS 的TCP 4000。运行 WireGuard 客户端,连接到本地的UDP 3333。
第一步:下载与安装 (两端均需执行)
udp2raw 是单一的可执行文件,无需复杂的编译,直接下载预编译版本即可。
# 1. 下载最新版发布包 (目前最新通常为 20230206 版本左右,请按需调整)
wget https://github.com/wangyu-/udp2raw/releases/download/20230206.0/udp2raw_binaries.tar.gz
# 2. 解压文件
tar -xzvf udp2raw_binaries.tar.gz
# 3. 将对应架构的二进制文件移动到系统环境变量目录 (以 amd64 为例)
sudo mv udp2raw_amd64 /usr/local/bin/udp2raw
# 4. 赋予执行权限
sudo chmod +x /usr/local/bin/udp2raw
# 5. 验证安装
udp2raw -h
第二步:服务端配置 (高防 VPS)
假设你的 WireGuard 服务端已经配置好,并且正在监听 51820 端口。
1. 临时测试运行命令:
sudo udp2raw -s -l 0.0.0.0:4000 -r 127.0.0.1:51820 -k "你的自定义密码" --raw-mode faketcp -a
参数解释:
-s: 以 Server 模式运行。-l 0.0.0.0:4000: 监听本机的 4000 端口(向外暴露的伪装 TCP 端口,请确保云服务商的安全组放行了此 TCP 端口)。-r 127.0.0.1:51820: 将还原后的 UDP 流量转发到本机的 WireGuard 端口。-k: 加密密码,两端必须一致。--raw-mode faketcp: 使用 TCP 伪装模式。-a: 自动添加 iptables 规则(拦截内核对该伪装 TCP 端口发出的 RST 包,这是udp2raw正常工作必须的)。
第三步:客户端配置 (你的另一台机器)
1. 临时测试运行命令:
sudo udp2raw -c -l 0.0.0.0:3333 -r <高防VPS的公网IP>:4000 -k "你的自定义密码" --raw-mode faketcp -a
参数解释:
-c: 以 Client 模式运行。-l 0.0.0.0:3333: 在本地监听一个未被占用的 UDP 端口(例如 3333)。-r: 指向高防 VPS 的 IP 和刚才设置的 TCP 4000 端口。
2. 修改客户端的 WireGuard 配置文件 (wg0.conf)
你需要让本地的 WireGuard 连向本地的 udp2raw 端口,而不是直接连向远端。
打开你的客户端 wg 配置文件,修改 [Peer] 部分:
[Peer]
PublicKey = <服务端的公钥>
# 将原本的高防 IP 替换为本地 127.0.0.1 和本地 udp2raw 监听的端口
Endpoint = 127.0.0.1:3333
# ... 其他配置保持不变 ...
第四步:极其关键的 MTU 调整 
因为 udp2raw 把 UDP 打包进 TCP,增加了额外的包头,会导致网络报文的有效载荷变小。如果 WireGuard 依然使用默认的 1420 MTU,会导致握手成功但无法打开网页、内网 SSH 卡死等现象。
必须在服务端和客户端的 WireGuard 配置文件中,双向降低 MTU。
在两端的 [Interface] 部分添加或修改 MTU:
[Interface]
# 建议降低到 1280 到 1300 之间,以避免分片丢包
MTU = 1280
...
修改完成后,两端重启 WireGuard 服务:systemctl restart wg-quick@wg0。
第五步:持久化运行 (配置 Systemd 守护进程)
测试命令运行无误、WireGuard 可以跑满 1Gbps 后,需要将 udp2raw 设置为开机自启的后台服务。
在服务端 (高防 VPS) 创建服务:
sudo nano /etc/systemd/system/udp2raw.service
写入以下内容(注意替换你的密码):
[Unit]
Description=udp2raw server
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/udp2raw -s -l 0.0.0.0:4000 -r 127.0.0.1:51820 -k "你的自定义密码" --raw-mode faketcp -a
Restart=on-failure
[Install]
WantedBy=multi-user.target
在客户端创建服务:
路径同上,只是 ExecStart 替换为客户端的命令:
ExecStart=/usr/local/bin/udp2raw -c -l 0.0.0.0:3333 -r <高防VPS的公网IP>:4000 -k "你的自定义密码" --raw-mode faketcp -a
启动并设置开机自启 (两端执行):
sudo systemctl daemon-reload
sudo systemctl enable udp2raw
sudo systemctl start udp2raw