发布时间: ,大约 300 字 ,阅读时间:2 分钟,
前几天在接触 noVNC 的时候发现 WebSockify 可以将任意 TCP 流量转换成 WebSocket 的时候突发奇想,想试试 CloudFlare 免费版 WebSocket 的速度有多快(🌚)
于是,参照 WebSockify 项目页 ,搞起。
服务端我用的是 Debian/Ubuntu,apt search websockify
发现居然有这个包,所以我直接 sudo apt install websockify -y
了,然后让我们来看看帮助:
$ websockify --help
Usage:
websockify [options] [source_addr:]source_port [target_addr:target_port]
websockify [options] [source_addr:]source_port -- WRAP_COMMAND_LINE
Options:
-h, --help show this help message and exit
-v, --verbose verbose messages
--traffic per frame traffic
--record=FILE record sessions to FILE.[session_number]
-D, --daemon become a daemon (background process)
--run-once handle a single WebSocket connection and exit
--timeout=TIMEOUT after TIMEOUT seconds exit when not connected
--idle-timeout=IDLE_TIMEOUT
server exits after TIMEOUT seconds if there are no
active connections
--cert=CERT SSL certificate file
--key=KEY SSL key file (if separate from cert)
--ssl-only disallow non-encrypted client connections
--ssl-target connect to SSL target as SSL client
--unix-target=FILE connect to unix socket target
--web=DIR run webserver on same port. Serve files from DIR.
--wrap-mode=MODE action to take when the wrapped program exits or
daemonizes: exit (default), ignore, respawn
-6, --prefer-ipv6 prefer IPv6 when resolving source_addr
--target-config=FILE Configuration file containing valid targets in the
form 'token: host:port' or, alternatively, a directory
containing configuration files of this form
--libserver use Python library SocketServer engine
虽说这么复杂,不过我们只想测个速所以 SSL 什么的都可以忽略,总结一下就是:
websockify 监听地址:监听端口 远程地址:远程端口
所以我用 websockify 127.0.0.1:12345 127.0.0.1:$SHADOWSOCKS_PORT
来启动它。因为服务器的 80 端口被 Nginx 占了,所以还得弄个反代,配置如下:
$ cat /etc/nginx/conf.d/websocket-ss-test.conf
server {
listen 80;
server_name domain.and.ip.hidden.example.org;
location /asdfghjkl {
proxy_pass http://127.0.0.1:12345;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
这样,Nginx 反代的 WebSocket 服务就搭好了,然后让我们 Google 一下客户端该怎么配。
经过我努力 Google ,怎么也找不到 WebSockify 转换成本地端口的轮子(也可能是我姿势水平不过关),所以只好自己写一个了🌚
使用上也是很简单,大概就是
./websockify-client.py \
--remote-address ws://domain.and.ip.hidden.example.org/asdfghjkl \
--listen-address 127.0.0.1 \
--bind-port 10086
然后把 SS 的地址和端口分别改去 127.0.0.1 和 10086,最后,激动人心的时刻到了:
Shadowsocks over WebSocket over CloudFlare
速度感人,再让我们看看裸连的速度
Shadowsocks over WebSocket without CloudFlare
速度明显比穿 CloudFlare 快,稍有常识的人都能看出, CloudFlare 免费版对 WebSocket 限速了