独立 hop 节点(rove-hop)
rove-hop 是一个独立运行的二级出口(hop)代理:不连控制面、不读快照、不执行策略、不限速。它的定位是
「受控网络里的一个干净出口」—— 主节点(edge)把命中分流规则的流量转发给它,由它直连真实目标。
它和主节点
rove共用同一套访问日志与 SNMP 方案,但没有用户/策略/限速这些控制面能力。
认证
hop 用单一用户名密码认证,来自命令行或环境变量:
--username/--passwordRove_HOP_USERNAME/Rove_HOP_PASSWORD
只要配置了任一入口监听,这两项就是必填的:两项都缺、或只给一半,进程启动即失败并说明该设哪些参数。 hop 没有内置回退凭据——回退值会被编进每一份发布二进制,忘记设置就等于把一个公开口令的开放代理 挂到网上。反向 QUIC-only 的 hop 不监听任何入口,因此不需要凭据。
下文聚焦单个功能的示例默认已经
export Rove_HOP_USERNAME/Rove_HOP_PASSWORD,因此命令行里不再重复这两项。
三种入口
| 参数 | 含义 |
|---|---|
--socks5 ADDR | 明文 SOCKS5 |
--https ADDR | HTTP CONNECT over TLS |
--socks5tls ADDR | SOCKS5 over TLS |
--tls-cert / --tls-key | TLS 入口所需的证书与私钥 |
# 只启动明文 SOCKS5(凭据必填)
./rove-hop --socks5 0.0.0.0:1080 --username hop-user --password hop-pass
# 同时启动 HTTPS、SOCKS5、SOCKS5-over-TLS
./rove-hop \
--https 0.0.0.0:8443 \
--socks5 0.0.0.0:1080 \
--socks5tls 0.0.0.0:1081 \
--tls-cert ./certs/server.crt \
--tls-key ./certs/server.key \
--username hop-user \
--password hop-pass
控制面快照里建一个 named egress 指向这个 hop(backend.kind = "http" 或 "socks5",addr 填 hop 地址,
带上同一套凭据),再让 routing policy 的 route 选中它,即可把匹配流量从这个 hop 发出。
见 数据模型 · 出口 backend。
专用出口 DNS(可选)
hop 常位于目标网络里、亲自解析并连出用户目标域名,因此这里最需要指定可信解析器。用
--dns-server(可重复,ip 或 ip:port)把 hop 的所有出口目标解析(HTTP/SOCKS5
入口与反向隧道目标)改走指定 DNS,--dns-protocol udp|tcp|tls|https 选传输;不设则用系统解析器。
bare IP 的默认端口随传输:udp/tcp=53、tls=853、https=443。
./rove-hop --socks5 0.0.0.0:1080 \
--dns-server 10.0.0.53 --dns-server 10.0.0.54:5353 --dns-protocol tcp
跨不可信链路时用加密 DNS(DoT/DoH)保证应答完整性,--dns-server-name 校验证书名,私有服务器用
--dns-ca 指向自签 CA:
./rove-hop --socks5 0.0.0.0:1080 \
--dns-server 10.0.0.53 --dns-protocol tls \
--dns-server-name dns.internal --dns-ca /etc/rove/dns-ca.pem
DoH 加 --dns-doh-path(默认 /dns-query);自签名且无 CA 时可用 --dns-insecure(危险,跳过校验)。
拼错地址或协议、或 tls/https 少填 --dns-server-name 会 fail-closed(启动即报错),不会静默回落系统解析器。
反向模式(NAT / 防火墙后)
当 edge 无法主动拨号 hop(hop 在 NAT / 私有网络后)时,hop 可以主动用 QUIC 拨到 edge 注册,由 edge 反向
开隧道。可以只跑反向会话(不配任何本地 listener),也支持多个 --reverse-quic 注册到多个 edge:
# 令牌走环境变量,避免进 argv
Rove_HOP_REVERSE_TOKEN=REPLACE_WITH_TOKEN ./rove-hop \
--reverse-quic edge.example.com:9443 \
--reverse-hop-id rove-hop-jp
常用反向参数:--reverse-quic(可重复)、--reverse-hop-id、--reverse-token、--reverse-server-name、
--reverse-insecure、--reverse-max-streams、--reverse-initial-mtu(跑在压缩/固定 MTU 隧道里时固定
QUIC 路径 MTU,UDP 载荷字节 1200-1500)。edge 侧 [reverse_hop] 配置、多 edge、观测与 NAT 保活见
反向 hop 数据面。
外网出口诊断 doctor egress
内置一个手工诊断命令,不启动代理监听、不连控制面。默认从 Google、YouTube、OpenAI、Cloudflare、GitHub
里随机挑一个目标做深度诊断;也可指定 preset 名、域名、host:port 或 URL:
./rove-hop doctor egress # 随机目标,文本输出
./rove-hop doctor egress github.com # 指定目标
./rove-hop doctor egress api.openai.com:443 --trace
./rove-hop doctor egress --target github --trace --json # 给脚本用
输出按 DNS、route、TCP、TLS、HTTP 和可选 trace 分层。--trace 优先调用系统 traceroute,缺失时尝试
tracepath,逐跳输出 hop index、IP、反查主机名、RTT;系统没有 trace 工具则该层标记 skipped,不影响其他层。
MQTT 远程 egress doctor(可选,默认关)
hop 不挂 edge 的用户查询 / 同步 / 拨测通道。需要 TE3 远程回收与 doctor egress --json
同构的分层报告时,单独打开 hop MQTT:
rove-hop --socks5 0.0.0.0:1080 \
--mqtt-broker tcp://mqtt.example.com:1883 \
--mqtt-hop-id rove-hop-jp \
--mqtt-username mqtt-user
# 密码走 Rove_HOP_MQTT_PASSWORD,不要进 argv
| 用途 | 主题 | 方向 |
|---|---|---|
| 触发 doctor | rove/hop/<hop_id>/doctor | 控制面 → hop |
| 一次性回复 | rove/replies/hop-doctor-<id>(前缀默认 rove/replies/) | hop → 控制面 |
请求必须带 target(preset / host:port / URL)和合法 reply_topic。trace 默认关,超时夹在 500ms–30s。
回包字段与 --json 相同(kind=egress_diagnostic,dns/route/tcp/tls/http/trace),并附加
event=hop_egress_doctor、hop_id、request_id。token / 密码不会进回包。doctor 不跑在 splice / CONNECT 热路径上;
未配 --mqtt-broker 时进程行为与现在完全一致。
详见 MQTT 对接。
访问日志
hop 与主节点访问日志方案完全一致(默认开启、按天轮转、保留 7 天)。可用这些参数调整:
--access-log-disable、--access-log-dir、--access-log-file-prefix、--access-log-retention-days、
--access-log-channel-capacity;转发 syslog 用 --access-log-syslog ADDR(搭配 --access-log-syslog-protocol
/ -facility / -tag)。详见 访问日志。
SNMP 监控
hop 同样内置只读 SNMP agent:
- 快捷开启 v2c:
--snmp-listen 0.0.0.0:161 --snmp-community <secret> --snmp-allow <cidr>(--snmp-allow可重复)。 - 需要 SNMPv3 时:
--snmp-config snmp.toml引用一个只含[snmp]段的 TOML 文件,避免把 v3 口令暴露在命令行。
两种方式互斥。MIB 表与 Cacti 接入见 SNMP 监控。
完整参数列表随时可查:
rove-hop --help。
RouterOS 容器部署
在 MikroTik RouterOS 上把 rove-hop 跑在 container 里、做 NAT 后反向出口时,请直接看运维专题:
- RouterOS 容器部署 rove-hop(步骤、脚本、验收、排障)
- reverse-hop-id 命名规范(统一前缀
rove-hop-,如rove-hop-jp) - Release 可下载包:
rove-hop-routeros-<version>-arm64.tar.gz