穿透之术:用 WebSocket 和 WebTransport 玩转隐身 VPN (wsvpn 深度解析)
穿透之术:用 WebSocket 和 WebTransport 玩转隐身 VPN (wsvpn 深度解析)
在跟防火墙和 DPI (深度包检测) 死磕的这些年里,最让人绝望的不是端口被封,而是你的协议特征被对方一眼看穿。很多时候,你刚启动 OpenVPN 或 WireGuard,对方的拦截策略就瞬间生效。这时候你需要的不是更强的加密,而是更彻底的“伪装”。
这就是 wsvpn 解决的问题。
简单说,wsvpn 把 VPN 流量直接塞进了 WebSocket 和
WebTransport
里。它不跟你那些复杂的底层协议硬碰硬,而是直接在应用层伪装成最普通的
HTTP(S) 流量。在绝大多数审查环境下,只要是 443 端口的 HTTPS
流量,基本都被视为“合法”的网页浏览。
为什么选 WebSocket 和 WebTransport?
传统的 VPN
协议就像在高速公路上开一辆涂满亮色的跑车,警察(DPI)一眼就能认出你是干什么的。而
wsvpn 的做法是把车开进一个巨大的物流货柜(HTTP
隧道)里。
1. WebSocket: 最稳的保底方案
WebSocket 的握手阶段就是标准 HTTP 请求。对防火墙来说,这看起来就像你在用某个网页聊天软件或者在看实时股价。只要套上 SSL/TLS,它就是标准的 HTTPS。虽然它有 TCP 队头阻塞的问题,但在大多数企业网或公共 Wi-Fi 里,这是最稳的通行证。
2. WebTransport: 追求极致的性能
如果你觉得 WebSocket 慢,那就上 WebTransport。它是基于 HTTP/3 (QUIC) 的,最核心的优势是解决了 TCP 的队头阻塞。
WebTransport 允许在同一个连接里跑多个流,而且支持不可靠的数据传输 (Datagrams)。这意味着它能提供接近 UDP 的低延迟,同时还保留了 HTTP/3 的伪装能力。简单点说:WebSocket 负责在烂环境下活下来,WebTransport 负责在好环境下起飞。
拆解 wsvpn:能干什么?
wsvpn 并不是个简单的转发脚本,它是个完整的 VPN
实现:
- TUN/TAP 模式:支持 L3 (IP) 和 L2 (Ethernet) 隧道。你可以像用常规 VPN 那样分配虚拟 IP,直接接管整个设备的流量。
- 全平台支持:Linux, macOS, Windows 全覆盖。Windows 下走 Wintun 或 OpenVPN TAP 驱动,性能损耗很低。
- 认证方案:
- HTTP Basic Auth:快,适合临时用。
- mTLS (双向 TLS):这是最高规格的安全。服务器和客户端互相验证书,没私钥的人就算扫到了你的端口,也连不上。
部署实战:别在宿主机上瞎折腾
现在的 DevOps 流程,能用 Docker 绝不用二进制。
Docker 一键起飞
直接跑这个镜像:ghcr.io/doridian/wsvpn/wsvpn:latest
docker run --rm --cap-add=NET_ADMIN \
-v ./config:/config \
--device /dev/net/tun:/dev/net/tun \
-p 9000:9000 \
ghcr.io/doridian/wsvpn/wsvpn:latest \
--mode server --config /config/server.yml重点:--cap-add=NET_ADMIN 和
/dev/net/tun
必须给,否则它没权限创建虚拟网卡。
进阶方案:前面挡个反向代理
如果你想追求极致的隐身,千万别直接暴露 9000 端口。在前面挂个 Caddy 或 Nginx。
流量链路: Client \(\rightarrow\)
HTTPS (443) \(\rightarrow\)
Caddy/Nginx \(\rightarrow\)
wsvpn Server
这么搞有两个好处: 1. 端口共用:VPN 流量和普通网页流量共用 443,防火墙根本没法通过端口区分。 2. 证书自动化:用 Caddy 自动搞定 Let’s Encrypt 证书,不用自己手动配置 TLS 证书链。
避坑指南:性能与稳定性
实测下来,WebTransport 的吞吐量确实比 WebSocket 高一大截,尤其是在网络抖动的时候。但要注意,HTTP/3 还是比较新,有些极端的企业防火墙可能会直接把 UDP 443 流量给掐了。
我的经验是: 默认先试 WebTransport,如果连不上,再无缝回退到 WebSocket。
总结
wsvpn 不是用来取代 WireGuard 或 Tailscale
这种内网穿透神器的。它的核心竞争力是
“生存能力”。
如果你处于一个极其受限、协议识别极其严格的环境,需要一个能像普通网页流量一样穿墙的通道,wsvpn
是目前最优雅的选择。它用一种很“正向”的 Web
标准,解决了很“负向”的封锁限制。
Bosh’s Final Thought: 所有的协议之争,最后都是特征之争。当你能把自己伪装成对方必须允许通过的样子,你就掌握了主动权。
相关资源: * GitHub: Doridian/wsvpn * 技术栈: Golang, QUIC, WebSocket, TUN/TAP*