文档中心

出网白名单网关

在隔离网段的出口机器上用一条命令安装出网白名单网关:绑定码接入、默认干跑、白名单由企业库统一下发。

出网白名单网关让一个不许上互联网的隔离网段接入 DitOps:白名单里的域名与端口放行,其余在网关上一律阻断。

它是可选组件。用一个 DitOps 服务端的企业不装它,被管理设备照常工作;只有当被管理设备所在网段不能直接出网、而 DitOps 又需要连到自己那台服务器时,才需要在出口机器上装这一个服务。

1. 它是怎么放行的

网关同时是自己的默认网关,三层各管一件事:

层管什么
DNS(dnsmasq)白名单里的名字能解析,其余一律 NXDOMAIN
TLS 代理(nginx stream)按 SNI 放行 HTTPS 域名,共用一个出口地址
防火墙(nftables)只允许白名单 IP / 端口,其余丢弃;443 一律转给 SNI 代理

白名单在管理端配置,由企业库统一下发到网关上,不需要在网关上手工改文件。

2. 安装之前

项要什么
机器一台 x86_64 Linux(Debian 12 / Ubuntu 24.04 及以上,glibc ≥ 2.18;dnsmasq ≥ 2.88,安装脚本会查),它就是该网段的默认网关
网卡一块接隔离网段,一块能出网并访问企业服务器地址
绑定码管理端「设置 → 组织信息 → 设备绑定码」,形如 123456-7890,与桌面 Agent 用的是同一个
企业库1.0.33 及以上(用到 register-egress-gateway);要在管理端维护手工白名单与本机保留端口,需要 1.0.34 及以上
旧防火墙若原来用手写的 ditops-paper 防火墙表,先由安装脚本停掉:它对同一网卡整段丢弃,会盖掉新网关的放行规则。它里面放行的端口(Syncthing、NUT 等)搬进「本机保留端口」,见第 7 节

网关机器自己不受这些规则限制,它上面的 Agent 照常上报。

3. 安装(默认干跑)

在出口机器上执行:

curl -fsSL https://downloads.ditops.cn/linux/egress_gateway/install.sh | sudo bash -s -- --bind

看完输出、确认网段与网关地址无误后,同一条命令加 --apply 真正安装:

curl -fsSL https://downloads.ditops.cn/linux/egress_gateway/install.sh | sudo bash -s -- --bind --apply

--apply 时才会去目录换出企业库地址、再用绑定码换出网关凭据。绑定码不在 /etc 留底(安装时临时用到,装完即删);网段、网关地址、上游 DNS 这些只有本机知道的事实,按探测结果写进策略骨架,白名单留空、由企业库第一次下发时填上。

装完管理端「设置 → 出网网关」立刻多出这台机器(显示主机名与版本),默认启用。

4. 探测结果不对时

网段指错等于把整段网络指错出口。自动探测有歧义时,安装脚本会停下来要求显式指定,也可以直接给:

参数说明
--interface <网卡>接隔离网段的那块网卡
--segment <CIDR>隔离网段,如 192.168.8.0/24
--gateway-ip <地址>网关在网段里的地址(网段机器的默认网关)
--dns-upstream <IP[,IP]>上游 DNS(默认读系统 resolv.conf,排除 127.*)
--replace-paper-firewall停用旧的 ditops-paper 防火墙表

例如:

curl -fsSL https://downloads.ditops.cn/linux/egress_gateway/install.sh \
  | sudo bash -s -- --bind --interface ens224 --segment 192.168.8.0/24 --gateway-ip 192.168.8.2

5. 无人值守安装

绑定码放文件、装完即删,不经过命令行:

curl -fsSLo /tmp/ditops-egress-install.sh https://downloads.ditops.cn/linux/egress_gateway/install.sh
sudo sh -c 'umask 077; cat > /root/binding-code'   # 粘贴绑定码,回车后按 Ctrl-D(装完再删)

# 先干跑,确认输出无误后执行第二条
sudo bash /tmp/ditops-egress-install.sh --bind --code-file /root/binding-code
sudo bash /tmp/ditops-egress-install.sh --bind --code-file /root/binding-code --apply

shred -u /root/binding-code /tmp/ditops-egress-install.sh

绑定码是一次性开通凭据,装完就删掉,留在机器上没有用处。

6. 装完之后

安装脚本最后会打印一份核对清单,逐条做完再离开。要点:

# 网关本机
nft list table inet ditops_egress | head -20
systemctl status ditops-egress-proxy ditops-egress-dns

# 网段内一台机器(地址与域名换成实际值)
dig @192.168.8.2 api.deepseek.com   # 有 A 记录
dig @192.168.8.2 www.baidu.com      # NXDOMAIN
curl -sI https://api.deepseek.com   # 通

7. 管理端另外能改的两处

白名单的主体由企业库按当前配置折算下发,有两类内容不在产品开关里,管理端单独留了口子(设置 → 出网网关,需要企业库 1.0.34 及以上)。

手工白名单(页面下方的「手工白名单」):Windows 更新这类管理员自己加的放行。

类型写什么例子
域名按 HTTPS(SNI)放行,支持 *. 通配*.windowsupdate.com
裸协议服务域名或 IPv4 + 端口,不支持通配rd.example.com tcp 21115-21117

作用域选「所有网关」时每台出口都拿到,也可以只对某一台生效。Windows 更新的域名会随微软的部署调整,常见的一组是 *.windowsupdate.com、*.update.microsoft.com、download.windowsupdate.com、*.delivery.mp.microsoft.com,以微软公布的清单为准;补丁源在别的网段时,把那个源也加进来。

域名条目只放行 HTTPS(443)。补丁源只提供明文 HTTP 时,改用「裸协议服务」写它的域名或地址加 tcp 80——明文 HTTP 没有 SNI,只靠域名放行不了。

本机保留端口(每台网关的「更多 → 本机保留端口」):原来手写在旧防火墙里的 Syncthing(tcp/udp 22000、udp 21027)、NUT(tcp 3493,只许 192.168.8.8)这类,按网关维护;填源地址就只对那一台机器开放。一旦保存就以管理端这份为准,网关上原本手填、这里没列的端口会被替换掉;清空保存 = 回到网关本机策略里那份,升级前手填的规则不会被清掉。

两处都在下一次同步生效(15 分钟内,或网关上 sudo systemctl start ditops-egress-sync.service);写错的单条会被服务端跳过并在 EF 日志里留一行,不会让整次同步失败。

8. 升级

网关每天检查一次目录端发布的更新:清单验签、核对应用与构建号、下载后比 sha256,全部通过才替换程序,装完重新应用配置,失败换回上一版。

查看与手动执行:

ditops-egress-gateway update          # 只看有没有新版
sudo ditops-egress-gateway update --apply

关闭自更新:安装时加 --no-auto-update,或 sudo systemctl disable --now ditops-egress-update.timer(下次带绑定码重装会沿用这个选择)。

9. 常见问题

网页能打开,下载或登录时却提示「连接被意外终止」 — 多半是 ECH:站点在 DNS 的 HTTPS 记录里下发 ECH 配置,浏览器据此把真实域名加密在外层 SNI 里面,网关只看得见公共名 cloudflare-ech.com,于是按「未放行」拒掉。0.3.1+7 起网关会过滤掉 HTTPS 记录,浏览器拿不到配置就退回明文 SNI;升级后把浏览器重启一次(它可能还缓存着旧配置)。这类问题在网关的访问日志里一眼可见一行 cloudflare-ech.com -> 127.0.0.1:1 502,日志位于 /var/log/ditops-egress/access.log,按周轮循、留 8 份。

绑定被拒,说企业码不存在或绑定码无效 — 先核对管理端的设备绑定码。连续输错 5 次,整家企业会被锁 10 分钟,期间任何设备都绑不上。

说企业库没有 register-egress-gateway — 企业库版本低于 1.0.33,先升级企业库。

重装会不会换凭据 — 不会。网关按机器标识认机器,同一台重装沿用原凭据。要换凭据就在管理端删掉这台网关,再重新绑定一次。

绑定码安装之后还能改企业吗 — 不能自动换。企业库删掉这台后同步会一直 401,重新跑一次安装即可。

本地构建的包 — 绑定码安装要求用官网发布的构建(企业库地址编译在程序里)。自己编译的包不含这个地址,只能用手工策略与手工凭据安装。