“一人天部署”的前提:先把通道和安全模型拆开
很多人把“远程访问内网数据库”理解成三件事:要有公网入口、要改防火墙、要调数据库账户。结果一评估就是三到五个工作日,还牵扯网络组和 DBA。实际上,如果目标只是让一个外网开发人员或运维人员安全地连上内网 MySQL、Redis、PostgreSQL,同时不让整个内网裸奔,完全可以把链路层和安全层解耦。
链路层要解决的是:外网 Client 怎么找到内网 Server,怎么建立连接。传统方案是 VPN 或端口映射,这两者都要求公网 IP 或改现有网络设备。改成“内网侧主动发起出站连接”的隧道方案后,Server 只需要能访问外网的某个中继或协调节点,不需要任何入站端口。这个出站方向是关键差异:大多数企业内网默认允许出站 443,这就不需要动防火墙,不需要申请公网 IP,不需要改路由表。
安全层要解决的是:谁能连、能连哪个库、能做什么、事后怎么查。这层不能依赖数据库自己的账户体系草草了事。数据库账户只能控制 SQL 权限,控制不了设备是否可信、连接是否在审计、是否允许从办公网以外的网络发起。把这两层分开,一人天部署才有基础。
如何在不改网络的前提下打通链路
一人天部署的关键动作是“内网侧主动出站”。假设你在内网有一台 Windows 或 Linux 主机,能访问目标数据库。NexTunnel Server 就装在这台机器上,它启动后会主动向协调节点发起持久连接,不需要任何入站端口。外网开发人员的电脑上装 NexTunnel Client,通过协调节点与 Server 建立隧道。整个过程不涉及内网防火墙的入站策略变更。
部署顺序建议这样:
- 先确认 Server 主机能访问数据库端口,例如 MySQL 的 3306、Redis 的 6379。
- 安装 NexTunnel Server,登录管理后台,把 Server 注册为内网侧的出口节点。
- 在后台创建目标资源,绑定这台 Server,指定数据库类型和端口。
- 外网电脑安装 NexTunnel Client,后台授权该设备可访问刚创建的资源。
- 外网端使用本地映射地址连接数据库客户端,连接参数与内网直连一致。
这五步里,只有第 2、3、4 步是新操作,第 1 步是一次确认,第 5 步是常规连接。真正耗时的大头往往不是操作本身,而是判断 P2P 能否打洞成功。如果两端 NAT 类型允许,流量直接 P2P 走,不经过中继;打洞失败就走中继转发。对数据库这种长连接、低频率小包为主、偶发大结果集的流量,中继转发通常也够用,前提是中继带宽不成为瓶颈。国内云主机 5M 带宽跑单路 MySQL 查询基本不堵,但如果要拉大批量数据,还是优先期望 P2P 成功。
端口白名单为什么比“连上就能扫内网”更稳
传统 VPN 最大的问题是默认全通。用户拨进 VPN 后,内网十几台数据库、几十个服务端口理论上都在一个网段里。哪怕他只被分配了开发库,也能对内网其他地址发起探测。这不是某个 VPN 产品的问题,而是“网络层打通”这个模型的固有属性。
按资源授权的隧道方案天生就是应用层的。后台创建资源时只指定一台 Server、一个目标地址、一个端口。外网 Client 只能拿到这一个映射,不能顺着隧道去扫同网段其他主机。下表把三种常见做法放在一起对比:
| 方案 | 有无入站端口 | 是否需要公网 IP | 访问粒度 | 一人天可行性 |
|---|---|---|---|---|
| 直接端口映射到公网 | 有 | 必须 | 单个端口,但暴露在公网 | 快,但安全风险高,通常需要安全评审 |
| 自建 VPN | 有 | 必须或依赖第三方 | 整个网段 | 中,涉及路由器/防火墙变更 |
| 出站隧道 + 资源白名单 | 无 | 不需要 | 逐设备、逐端口 | 快,适合一次配置当日交付 |
这里要提醒一句:端口白名单不是“只填 3306 就万事大吉”。如果资源条目里填的是 3306,实际数据库监听 3307,隧道建立成功但连接失败,排查时很容易怀疑到隧道,实际是端口写错。交付前先在 Server 主机上本机 telnet 一次目标端口,确认数据库只监听内网网卡而未监听 0.0.0.0 造成内网横向风险,再做后台绑定。
设备授权与审计:交付后审计要能回答“谁在连”
一人天部署不仅能搭通链路,还要为后续运维省事。设备授权要做在“允许 Client 连接”这一步,而不是靠数据库密码保密。除非极特殊情况,不要把数据库超级账户给到远程用户。正常的授权路径应该是:后台授权了某台 Client 设备,该设备才能看到被分配的资源;该用户的数据库账户本身则应限制为只读、单库或指定表权限。设备层和账户层两套收紧配合,比只依赖任何一层都可靠。
部署时同时把审计流程定下来:要求每次对接完,安装人员截图后台审计记录页面存档。数据库类访问容易踩的坑是“连接池保活”,权限一旦回收,池子里已有的长连接还能继续读写,这个要跟研发团队交代清楚,必要时在回收权限后让 Server 侧断开活跃会话。NexTunnel 后台的访问审计能记录哪个设备、什么时候、访问哪个资源,这部分信息与数据库日志里的执行记录对不上时,优先把两边时间对齐,因为时长会话的审计时间戳经常是隧道建立时间而非最终断开时间。
从连接到收尾:一个实际的一人天时间线
把上面这些落地成一个时间线,差不多是:
- 上午 10:00–10:20:确认 Server 主机系统版本和目标数据库端口。
- 10:20–10:50:安装 Server,确认其出站连接在 443 端口无阻断。
- 10:50–11:30:后台创建资源,绑定数据库端口,创建一个最小权限的数据库账户授权给业务使用。
- 14:00–14:30:外网电脑安装 Client,后台对该设备完成授权,本地用 Navicat 或 DBeaver 测试连接。
- 14:30–15:00:做一次权限回收测试,确认回收后新连接和长连接的表现符合预期。
- 15:00–16:00:备份配置说明、数据库账户说明、审计记录留存路径,交付给运维负责人。
这六个时间段真正有技术含量的只有第 3 和 5 步,其他步骤更多是执行和确认。一人天部署远程访问数据库这事,本质不是拼谁的隧道技术更强,而是拼谁把链路和权限边界拆得足够清楚。能当天连上不算难,难的是当天能说清“连不上了怎么查、谁连过怎么追、权限错了怎么收”。这三件事和链路本身同等重要。
如果你的内网数据库形态比较固定,且需要频繁面对外网开发、外包协作或故障应急的连接需求,可以考虑先把一台常备 Server 部署好,后续每接入一个库只需在 NexTunnel 后台建一条资源记录、授权对应设备,整个过程有望稳定控制在半小时以内。