端口转发
把本机监听的端口转发到另一台设备或服务。
能力
- TCP 与 UDP;
- IPv4 与 IPv6,v4 / v6 之间可互相转发;
- 端口段与多端口;
- 多目标与故障转移;
- 连接数限制;
- 流量统计与运行日志;
- 向目标发送 PROXY 协议(v1 / v2),把真实客户端地址交给下游;
- SNI 分流:多个服务共用 443 等同一个端口,按 TLS 握手里的域名选择后端,不解密 TLS。
PROXY 协议
端口转发只做 TCP 中转,下游默认只能看到 Gately 自身的地址。在规则中把「PROXY 协议」设为 v1 或 v2 后,Gately 连上目标后会先发送 PROXY 头,下游即可取得真实客户端地址,用于日志、限流与访问控制。
目标必须开启对应的接收选项,否则连接会被拒绝,例如:
- haproxy:
bind 192.168.1.8:4434 accept-proxy; - nginx:
listen 4435 ssl proxy_protocol;; - Gately Web 服务:监听中开启「接收 PROXY 协议」,并把来源加入可信 PROXY 来源。
该选项只作用于 TCP,UDP 转发不受影响。
SNI 分流:共用 443 端口
多个服务需要共用同一个公网端口(例如 VPN、网站和隧道都用 443)时,把规则的模式从「端口转发」切换为「SNI 分流」。Gately 读取第一个 TLS 报文 ClientHello 中的域名(SNI),按域名把整条连接透传给对应的后端。TLS 不会在这里解密,证书仍放在后端。作用等同于 haproxy 的 req_ssl_sni 规则。
该模式的规则包含:
- 路由:每条路由有名称、一个或多个域名、目标地址(多个地址依次尝试,带故障转移)、可选的目标端口(留空与监听端口相同),以及 PROXY 协议设置(不发送、v1、v2)。PROXY 设置属于路由,因为有的后端要求它,有的后端会拒绝它;
- 默认目标:规则自身的目标地址、目标端口与 PROXY 协议设置。
域名可以是精确域名(vpn.example.com)、通配(*.example.com,匹配任意级子域名)或 *(匹配任何携带域名的连接),不区分大小写。匹配顺序为精确域名、最长通配、*、默认目标;同一个域名只能属于一条路由。
没有匹配的路由、客户端没有携带 SNI(例如直接用 IP 访问)、数据不是 TLS、ClientHello 无法解析,或客户端 5 秒内没有发送任何数据(SSH 等由服务端先发言的协议)时,连接交给默认目标。没有设置默认目标时,这类连接会被关闭并计入「被拒绝」。在发完 ClientHello 之前就断开的客户端会被直接丢弃。
说明:
- SNI 分流只处理 TCP。HTTP/3(QUIC)这类 UDP 流量不会被分流,请为它单独建一条规则;
- ClientHello 可以被拆成多个 TLS 记录,最大支持 64 KB;
- 规则卡片上会显示每条路由与默认目标收到的连接数。
示例:替换 haproxy
这样的 haproxy 配置:
frontend https
bind 192.0.2.10:443
mode tcp
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend ocserv if { req_ssl_sni -i tz.example.com }
default_backend web
backend ocserv
server ocserv 127.0.0.1:443 send-proxy-v2
backend web
server web 127.0.0.1:8443 send-proxy-v2对应一条 Gately 规则:
| 设置 | 值 |
|---|---|
| 模式 / 协议 | SNI 分流 / TCP |
| 监听地址 / 端口 | 192.0.2.10 / 443 |
路由 ocserv | 域名 tz.example.com,目标 127.0.0.1,端口 443,PROXY v2 |
| 默认目标 | 127.0.0.1,目标端口 8443,PROXY v2 |
监听地址请填服务器的公网地址,避免与监听 127.0.0.1:443 的后端冲突。要用 Gately 自己提供网站,可以再添加一个监听在 127.0.0.1:8443 的 Web 服务 监听,开启「接收 PROXY 协议」并把 127.0.0.0/8 加入可信 PROXY 来源。启用规则前请先停止 haproxy,同一个端口只能由一个程序监听。
典型场景
- 把 NAS 的服务端口暴露到统一入口;
- 在 IPv6 与 IPv4 之间做互通转发;
- 为一个服务配置主备两个后端;
- 让 VPN、网站等多个 TLS 服务共用 443 端口。
部署提示
端口转发直接监听宿主机端口,Docker 部署推荐使用 --network host。
从 Lucky 迁移
规则可从 lucky_portforward.lkcf 导入;TLS / 流加密、限速等选项暂不支持,导入时会给出提示。