最近在家里的服务器上开了Minecraft服务器,提供公网IPv6访问。Ping测试延迟优秀,但实际游戏体验不佳,表现为突发高延迟、带宽低等不稳定状况。考虑到之前折腾Samba时遇到的情况,基本可以推定为运营商对非标端口的Qos限速。
部分地区运营商暂时尚未对家庭网络443端口上的标准HTTPS流量进行过多限制,因此可以考虑将基于TCP的私有协议的应用(如Minecraft多人游戏)通过HTTPS传输,为提升游戏稳定性和进一步抗干扰,本文选择WebSocket搭配TLS进行公网稳定通信,并通过Nginx反向代理实现更好的伪装效果。
在服务端和客户端分别安装wstunnel,以Minecraft多人游戏为例,启动参数如下(使用Minecraft服务端默认的25565端口)。
服务端:
Bash
wstunnel server --restrict-to "127.0.0.1:25565" "ws://127.0.0.1:25564"客户端:
Bash
wstunnel client -L "tcp://127.0.0.1:25565:127.0.0.1:25565" "wss://mc.example.com:443"接下来配置Nginx反向代理:
Nginx
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /www/cert/SSL.pem;
ssl_certificate_key /www/cert/SSL.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
server_name mc.example.com;
location / {
proxy_pass http://127.0.0.1:25564;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 60s;
}
}
部分Minecraft启动器(如PCL)支持在启动前执行自定义命令,可将客户端命令填入其中简化操作。