Shadowsoccks 开启 UDP over TCP
1. 什么是 UDP over TCP
科学上网 Shadowsocks 原版只支持 udp 的原生代理,即想要代理 udp,只能使用加密的 udp 流量承载,整个链路必须都是 udp 流量。而国内网络对 udp 极不友好,Qos丢包严重,更不要说防火墙的干扰了。
udp_over_tcp 就是通过把 UDP 数据封装进 TCP 流,来包装成 TCP 流量,从而绕过 UDP 封锁。
原版的 shadowsocks-libev go-shadowsocks shadowsocks-rust 均不支持 UDP over TCP,目前只有 V2ray 和 Xray 支持 UDP over TCP,并且存在 V1 和 V2 两个版本。
2. 适用场景
- Tiktok 直播
- DNS 查询
- 网络时间协议 (NTP)
3. UDP over TCP v1 与 v2 的区别
| 特性 | v1 | v2 |
|---|---|---|
| 封装方式 | 简单在 TCP 流中包 UDP 数据,协议较老 | 新版本封装,头部更小,效率更高,稳定性优化 |
| 兼容性 | 旧版客户端/服务端都支持 | 需要新版本(Xray-core 1.8.0+)才能完全使用 |
| 性能 | 额外开销稍多,延迟略高 | 头部简短,延迟更低,吞吐更高 |
| 推荐场景 | 老旧设备、旧版本内核 | 新客户端、新服务端环境,追求延迟和稳定性 |
4. 服务器端配置
docker-compose.yml
services:
xray:
image: teddysun/xray
container_name: xray-ss
restart: unless-stopped
ports:
- "8388:8388/tcp"
# - "8388:8388/udp"
volumes:
- ./config.json:/etc/xray/config.json
command: ["/usr/bin/xray", "-c", "/etc/xray/config.json"]
config.json
{
"log": {
"access": "",
"error": "/var/log/xray/error.log",
"loglevel": "error"
},
"inbounds": [
{
"port": 8388,
"protocol": "shadowsocks",
"settings": {
"method": "chacha20-ietf-poly1305",
"password": "MyStrongPassword",
"network": "tcp,udp",
"udp_over_tcp": {
"enabled": true,
"version": 2
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]
}
其中 udp_over_tcp.version 就是配置 UDP over TCP 的版本,建议使用 v2。
...
"udp_over_tcp": {
"enabled": true,
"version": 2
}
...
5.客户端配置
OpenClash 配置示例(客户端)
在你的代理节点配置中(配置文件编辑模式),Shadowsocks 部分这样写:
proxies:
- name: "MyShadowsocks"
type: ss
server: your-server-ip
port: 8388
cipher: chacha20-ietf-poly1305
password: MyStrongPassword
udp: true
udp-over-tcp: true
udp-over-tcp-ver: 2
注意:
udp: true表示需要支持 UDP(比如玩游戏、DNS 查询)udp-over-tcp: true表示启用 UDP 通过 TCP 封装udp-over-tcp-ver: 2对应服务端的 version 配置(1 或 2 要匹配服务端)
Shadowrocket (客户端)
- 编辑节点 打开 UDP转发
- 编辑节点 UDP over TCP 选项选择对应版本(1 或 2 要匹配服务端)
6.测试
UDP IP 查询:https://ip.skk.moe/stun
