luler 一、简介 wstunnel 是一款通过 Websocket 或 HTTP2 隧道传输所有流量的内网穿透工具 使用 Rust 编写,性能较高,内置自签证书,流量加密 可以利用CDN加速隧道连接 提供可直接运行的静态二进制文件,也可以使用Docker快速部署 支持静态正向(反向)隧道(TCP, UDP, Unix socket, Stdio),动态(反向)隧道(Socks5 代理、HTTP 代理和透明代理) 该工具的开源地址参考:https://github.com/erebe/wstunnel 该工具的工作原理可参考下图: 二、安装 1. 服务端安装 准备一台具有外网ip的主机,提前安装好Docker、docker-compose软件环境 新建docker-compose.yml配置文件,配置内容如下: version: '3.8' services: wstunnel: image: ghcr.io/erebe/wstunnel:latest container_name: wstunnel restart: always network_mode: host #安全起见需要修复restrict-http-upgrade-path-prefix的值为一个随机字符串 command: /home/app/wstunnel server --restrict-http-upgrade-path-prefix SetARandsomStringxxx wss://[::]:8080 执行下面命令,启动服务端服务 docker-compose up -d 服务端正常启动,参考下图: 2. 客户端安装 根据需要,准备一台内网主机,提前安装好Docker、docker-compose软件环境(建议,但也可以通过二进制命令启动) 同样需要新建客户端docker-compose.yml配置文件,配置内容如下: version: '3.8' services: wstunnel: image: ghcr.io/erebe/wstunnel:latest container_name: wstunnel restart: always network_mode: host #下面可以指定restrict-http-upgrade-path-prefix与服务器一致,可以设置多个-R服务映射 command: > /home/app/wstunnel client --restrict-http-upgrade-path-prefix SetARandsomStringxxx -R 'tcp://[::]:9999:127.0.0.1:9000' -R 'tcp://[::]:6033:127.0.0.1:3306' wss://ip_or_domain:8080 执行下面命令执行客户端服务 docker-compose up -d 成功运行截图如下: 三、使用示例 如上服务端、客户端启动成功之后,可以使用相关的内网穿透服务,如上是穿透了内网中的portainer、mysql服务 通过外网ip访问内网中的portainer服务,访问:http://外网ip:9999/ 通过外网ip访问内网中的mysql服务,只需要吧mysql的连接配置的ip换成外网ip,端口换成6033 四、总结 wstunnel 基于websocket等http相关协议转发数据流量,可以解决网络限制问题,也可以套上CDN加速 支持自签证书,无需多层代理,直接用上tls防护 支持内网穿透、网络代理,兼容各种网络协议,玩法很多,可以进一步探索 部署使用简单,可以使用二进制可执行程序、Docker等快速部署使用