luler 一、简介 Drip 允许用户在自己的服务器上部署和管理隧道服务,无需第三方服务器,类似自托管ngrok等 使用 WSS(WebSocket 加 TLS)作为传输方式,支持 Basic 授权,以便安全穿透 CDN 和严格的防火墙限制 支持穿透 HTTP、HTTPS 和 TCP 等多种协议的客户端服务,适用于不同的应用场景 C/S架构,服务端支持Docker快速部署,客户端跨操作系统,自定义配置,快速启动 该工具的开源项目地址参考:https://github.com/Gouryella/drip 该工具的大概的系统架构图可参考下图: 二、安装与使用 1. 服务端安装 提前准备好Docker、docker-compose软件环境 新建docker-compose.yml配置文件,配置内容如下: services: drip-server: image: driptunnel/drip-server:latest container_name: drip-server restart: unless-stopped network_mode: host volumes: - ./config.yaml:/app/config.yaml:ro environment: GOMEMLIMIT: 256MiB mem_limit: 512m mem_reservation: 128m 新建配置文件config.yaml,需要调整相关配置项,参考配置内容如下 # Drip 服务器配置(Caddy 反向代理模式) # # 配合使用:docker-compose.yml # # 架构: # 客户端 --[HTTPS/WSS]--> Caddy:443 --[HTTP/WS]--> drip-server:8443 # 客户端 --[TCP 隧道]--> drip-server:20000-20100(直连,不经过代理) # 服务器端口 - Caddy 将代理到此端口(仅内部使用) port: 8443 # 客户端连接的域名(必填) domain: tunnel.example.com # 隧道 URL 使用的域名(可选,默认使用 domain 的值) # tunnel_domain: example.com # 认证令牌(生产环境必填) # 使用以下命令生成:openssl rand -hex 32 token: YOUR_SECRET_TOKEN # 禁用 TLS - 由 Caddy 处理 TLS 终止 tls_enabled: false # URL 显示的公开端口 - 设为 443,因为 Caddy 在 443 端口提供服务 public_port: 443 # TCP 隧道端口范围(直接暴露给客户端,不经过 Caddy) tcp_port_min: 20000 tcp_port_max: 20100 # 监控 - 使用单独的令牌 # 使用以下命令生成:openssl rand -hex 32 metrics_token: YOUR_METRICS_TOKEN # 可选设置 # debug: false # 启用调试日志 # pprof_port: 6060 # 启用 pprof 性能分析 # transports: # 允许的传输协议(默认:tcp,wss) # - tcp # - wss # tunnel_types: # 允许的隧道类型(默认:http,https,tcp) # - http # - https # - tcp 配置完成,可以执行下面命令启动服务 docker-compose up -d 执行完成,可以通过docker-compose ps和docker-compose logs命令查看服务是否正常运行 【关键】配置nginx泛域名如*.example.com反代到8443端口,后面通过tunnel.example.com域名建立隧道后,自定义穿透服务的域名。下图是在nginx proxy manager上配置的示例参考图: 2. 客户端使用 各操作系统的可执行程序下载地址:https://github.com/Gouryella/drip/releases,Linux和Mac可以执行命令直接安装 bash <(curl -sL https://driptunnel.app/install.sh) 执行配置初始化,输入服务端域名、授权码即可 drip config init 暴露本地http服务,如监听9000端口的portainer服务,使用wss传输协议构建隧道,命令如下 //生成随机代理域名 drip.exe http 9000 --transport wss //或者加-n指定子域名 drip.exe http 9000 --transport wss -n myapp 执行之后,会自动生成临时随机的域名 访问这个公网地址,就可以访问内网服务 暴露本地tcp服务,如MySQL服务,会自动分配配置中设置的端口范围tcp_port_min=>tcp_port_max,执行如下命令 //随机生成映射端口 drip.exe tcp 3306 --transport wss //指定使用哪个远程端口,如指定使用端口20063 drip.exe tcp 3306 --transport wss -n tcp-20063 可以通过公网域名+分配的端口访问内网MySQL 三、总结 使用 Drip,你可以很轻松就完成内网穿透服务基建,在任何设备上实现安全、高效的内网服务穿透 基于Go语言开发,轻量高性能,服务端支持Docker部署,客户端提供各个操作系统一键安装包 通过WSS实现隧道传输,可以使用CDN加速,更加安全、抗干扰 需要你有一台公网IP服务器作为中继服务,同时也要有一个域名,实现域名代理服务