文档首页 / 移动网关安装与配置

移动网关安装与配置

Sight 移动网关的下载、安装、与 SightReport 对接、服务注册、升级、配置项、端口规划与排障。适用于外网连不进内网、只允许内网往外连的现场。

概述

Sight 移动网关是一个单文件程序,部署在手机能访问到的机器上(DMZ 前置机、云主机等)。内网的 SightReport 主动连出到网关,建立一条加密隧道;手机访问网关,请求经隧道转回 SightReport。

手机 ──https──▶ [Sight 移动网关] ◀══ 加密隧道(SightReport 从内网主动连出)══ SightReport
                      └─▶ 钉钉 / 飞书 / 企业微信接口(由网关代发,出口 IP = 网关)

它解决两件事:

  • 前置机连不进内网时,外网手机也能使用移动端,内网不需要开任何入站端口;
  • 内网服务器不能上外网时,免登和消息推送需要的钉钉 / 飞书 / 企业微信接口由网关代为访问,平台白名单里登记网关的公网 IP 即可。

网关只放行移动端路径(/m、/mapi 和根目录的域名校验文件),PC 端、设计器和管理接口在外网一律不可见。网关不保存任何业务数据。

三种外网接入方式怎么选,见移动端网络部署。

下载

在官网「下载中心」的「Sight 移动网关」分类下,按网关机器的系统下载对应的包:

下载项 适用系统
Sight 移动网关 · Linux x86_64 x86_64 架构 Linux(含麒麟、统信 x86 版)
Sight 移动网关 · Linux ARM64 ARM64 架构 Linux(鲲鹏、飞腾等)
Sight 移动网关 · Linux 龙芯 龙芯 LoongArch64 架构 Linux(新世界 ABI)
Sight 移动网关 · Windows Windows Server 2016 及以上、Windows 10 / 11(64 位)

网关版本号与 SightReport 一致,请下载与 SightReport 相同版本的网关。解压后目录里只有可执行文件 sight-mobile-gateway(Windows 为 sight-mobile-gateway.exe)和一份 README.md,不需要安装 Java 或其它运行库。

操作步骤

以下以 Linux 为例;Windows 用管理员身份打开命令行,把命令里的 ./sight-mobile-gateway 换成 sight-mobile-gateway.exe。

准备 SightReport

  1. 在 SightReport 的 application.yml 设置移动端独立端口 sight.mobile.port,重启。详见移动端网络部署。
  2. 确认 SightReport 所在机器能访问到网关机器的隧道端口(默认 7443)。

初始化网关

  1. 把下载的 zip 拷到网关机器并解压,进入解压目录。
  2. 执行初始化,-hostnames 填 SightReport 访问网关时使用的域名或 IP,多个用逗号分隔:
    ./sight-mobile-gateway init -hostnames dmz.example.com,203.0.113.10
    
  3. 命令会在同目录生成配置文件 gateway.yaml 和隧道证书 data/tunnel.crt、data/tunnel.key,并打印「证书指纹」和「接入令牌」。记下这两项;以后可用 ./sight-mobile-gateway show 再次查看。
  4. 按需编辑 gateway.yaml(文件里有中文注释),常改的是手机侧端口和 HTTPS 证书,见下文「配置项」。

在 SightReport 中对接

  1. 打开 移动 > 设置 >「网络与部署」,在「移动网关」里打开「启用移动网关」。
  2. 「网关地址」填 wss://dmz.example.com:7443/tunnel(主机必须是初始化时 -hostnames 里的某一项或网关机器的 IP)。
  3. 粘贴「接入令牌」和「证书指纹」,点右上角「保存」。
  4. 如需由网关代发钉钉 / 飞书 / 企业微信接口,在「钉钉 / 飞书 / 企业微信接口出站」选「经移动网关」。

注册为系统服务并启动

sudo ./sight-mobile-gateway install   # Linux 注册为 systemd 服务,Windows 注册为 Windows 服务
sudo ./sight-mobile-gateway start

服务名为 sight-mobile-gateway,开机自动启动,异常退出会自动拉起。只想临时试用,也可以不注册服务,直接 ./sight-mobile-gateway run 前台运行。

验证

  1. 回到「网络与部署」,「连接状态」显示「已连接(2/2)」。
  2. 在「基础」页填写「对外访问地址」(手机访问网关的地址,如 https://m.example.com),打开「允许外网访问」,保存。
  3. 用「手机连通自检」的二维码扫码,显示「连接正常」并说明经过移动网关。

升级

  1. 下载与新版 SightReport 相同版本的网关包。
  2. sudo ./sight-mobile-gateway stop,用新的可执行文件替换旧的。
  3. sudo ./sight-mobile-gateway start。

gateway.yaml 和 data/ 目录保留不动,令牌和证书指纹不变,SightReport 侧不用改。建议先升级 SightReport,再升级网关。

卸载

sudo ./sight-mobile-gateway stop
sudo ./sight-mobile-gateway uninstall

属性/参数说明

命令

命令 说明
init [-hostnames a,b] [-force] 生成 gateway.yaml、隧道证书和接入令牌。配置已存在时需加 -force,会换新的令牌和指纹
show 再次打印证书指纹和接入令牌
run 前台运行(不带命令时默认就是它)
install / uninstall 注册 / 卸载系统服务
start / stop 启动 / 停止系统服务
version 查看版本号

所有命令都可以加 -c <路径> 指定配置文件,默认是可执行文件同目录的 gateway.yaml。

配置项(gateway.yaml)

属性 说明 取值/默认值
listen 手机侧监听地址。直接对外提供 HTTPS 时常用 :443 默认 :8080
tls.cert_file / tls.key_file 手机侧 HTTPS 证书(PEM,含证书链)。都留空为明文 HTTP,仅用于前面还有负载均衡做 HTTPS 的情况 默认空
trusted_proxies 网关前面的负载均衡 / 反向代理的 IP 或 CIDR,只有它们转来的请求才采信 X-Forwarded-For 默认空
max_body_bytes 请求体上限(字节),超出返回 413 默认 20971520(20 MB)
rate_limit.per_ip_per_minute 单个 IP 每分钟请求数上限,超出返回 429;-1 关闭 默认 600
tunnel.listen 隧道监听地址,路径固定为 /tunnel 默认 :7443
tunnel.tls 隧道是否加密(wss)。false 为明文,SightReport 会给出警告,仅限可信内网 默认 true
tunnel.cert_file / tunnel.key_file 隧道证书,默认是 init 生成的自签证书,也可换成正式证书 默认 data/tunnel.crt / data/tunnel.key
tunnel.hostnames init 生成证书时写入的域名 / IP(本机全部 IP 和 localhost 自动加入) init 时填写
tunnel.token 接入令牌,机密。修改后要同步修改 SightReport 中的令牌 init 生成
egress.enabled 是否代发钉钉 / 飞书 / 企业微信接口 默认 true
egress.allow 允许代发的主机,必须完全一致,只允许 443 端口,解析到内网地址一律拒绝 默认 qyapi.weixin.qq.com、oapi.dingtalk.com、api.dingtalk.com、open.feishu.cn
log.file 日志文件;作为服务运行时建议配置,如 logs/gateway.log 默认空(只输出到屏幕)
log.max_size_mb 日志超过该大小自动轮转,保留 3 份历史 默认 50

配置中的相对路径都相对 gateway.yaml 所在目录。修改配置后需要 stop 再 start。访问日志不记录查询串,令牌不会写进日志。

端口与防火墙

端口 谁访问它 防火墙 / 安全组
手机侧 listen(如 443) 手机 对公网开放
隧道 tunnel.listen(默认 7443) 只有 SightReport 所在机器 只允许 SightReport 的出口 IP 或内网网段访问,不要对公网开放
网关访问外部的 443 钉钉 / 飞书 / 企业微信 开启代发时放行到这几个域名的出站 443

SightReport 是主动连出,内网一侧不需要开放任何入站端口。隧道端口上的 GET /healthz 无需鉴权,只返回当前连接数 {"agents":n},可用于监控探活。

示例

网关前面还有云负载均衡(负载均衡做 HTTPS,转发到网关 8080 明文端口,负载均衡内网网段 10.0.0.0/24)时,gateway.yaml 的相关部分:

listen: ":8080"
tls:
  cert_file: ""
  key_file: ""
trusted_proxies:
  - 10.0.0.0/24
log:
  file: logs/gateway.log

负载均衡需要带上 X-Forwarded-For 与 X-Forwarded-Proto: https。预期结果:网关日志与 SightReport 审计中看到的是手机的真实 IP,限流按每部手机分别计算。

注意事项

注意:接入令牌等同于隧道的钥匙,只填在 SightReport 里,不要外传。怀疑泄露时执行 init -force 换新,并同步更新 SightReport。

注意:网关与 SightReport 之间的隧道协议有版本号,两边版本不一致时会拒绝连接(SightReport 提示「网关版本与本系统不兼容」),请保持同版本。

提示:Linux 下普通用户不能监听 1024 以下端口。用系统服务方式运行时以 root 启动;也可以对可执行文件执行 setcap cap_net_bind_service=+ep。

提示:集群部署时,每个 SightReport 节点都会各自连上网关,网关在全部连接间轮流分配请求;某个节点宕机不影响其它节点。

排障

现象 原因 解决方法
连接状态显示「接入令牌不正确」 令牌填错,或网关重新 init 过 show 查看令牌后重新填写,注意不要带空格
连接状态显示「网关证书指纹与设置不一致」 指纹填错、换过证书,或中间有设备在解密 HTTPS show 取最新指纹;排除中间设备
连接状态显示「连不上网关地址」 隧道端口被防火墙拦截、地址或端口错误、网关没启动 在 SightReport 机器上测试能否连到网关 7443 端口;检查网关服务状态与日志
连接状态显示「网关版本与本系统不兼容」 网关与 SightReport 版本不一致 下载与 SightReport 同版本的网关
手机打开提示「服务暂不可用」 没有 SightReport 连上网关 访问 /healthz 看 agents 是否为 0;检查「网络与部署」的连接状态
手机访问返回 504 SightReport 60 秒内没有响应 检查 SightReport 的负载与日志
手机访问返回 404 访问了网关不放行的路径 移动端地址应为 对外访问地址/m/m.html
手机访问返回 429 同一 IP 请求过于频繁;或前面有负载均衡但没配 trusted_proxies,所有手机被当成同一个 IP 配置 trusted_proxies,必要时调大限流
钉钉 / 企业微信提示 IP 不在白名单 网关公网 IP 没登记 把网关机器的公网 IP 加到平台白名单;出站方式选「经移动网关」
网关日志提示解析到内网或保留地址、已拒绝 网关机器的 DNS 把平台域名解析成了内网地址 给网关机器配置能正常解析公网域名的 DNS
启动时提示监听端口失败 端口被占用,或 Linux 普通用户监听 443 换端口,或按上面的提示授予权限
install / start 失败 权限不足 Linux 用 sudo,Windows 用管理员命令行

相关文档

联系我们

请填写您的信息,我们将在 1 个工作日内与您联系。