Files
lisglosips/docs/infra-check.md

153 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# S02 网络与端口验收报告
> 验收时间:2026-06-20
> 环境:本地 KVM 开发服务器,Tailscale 三机专网
> 结论:开发网络满足当前联调要求;阿里云安全组尚未创建,本报告给出未来迁移清单。
## 1. 环境边界
| 代号 | Tailscale IP | 开发阶段角色 |
| --- | --- | --- |
| A | 100.90.90.90 | 核心通信网关 |
| B | 100.90.90.91 | API、缓存、数据库、录音和监控 |
| T | 100.93.185.30 | 客户/供应商 SIP 测试端 |
| 开发机 | 100.91.249.119 | SSH 与运营 Web 管理端 |
- 用户确认 A/B/T 均为本地开发服务器,开发完成后再迁移阿里云。
- 开发阶段服务间通信统一使用 Tailscale IP,不依赖 ens18 上的两个局域网地址。
- 本次未修改 Tailscale ACL、主机防火墙、路由、云安全组或服务配置。
- 尚未部署的端口使用绑定到指定 Tailscale IP 的短时测试监听器;测试后已确认进程退出。
## 2. 双向 RTT
每个方向先建立 Tailscale 直连,再发送 20 个 ICMP 样本:
| 来源 | 目标 | 丢包 | 平均 RTT | 最大 RTT |
| --- | --- | ---: | ---: | ---: |
| A | B | 0% | 0.648 ms | 2.389 ms |
| B | A | 0% | 0.595 ms | 0.741 ms |
| A | T | 0% | 0.434 ms | 0.668 ms |
| T | A | 0% | 0.559 ms | 1.711 ms |
| B | T | 0% | 0.593 ms | 0.757 ms |
| T | B | 0% | 0.561 ms | 1.496 ms |
结论:三机稳态 RTT 均小于 1 ms,丢包为 0,满足开发联调目标。
Tailscale 接口 MTU 为 1280。A 到 B/T 的 1200 字节 ICMP payload、DF 模式各 5 次均为 0% 丢包,平均 RTT 分别为 0.634 ms 和 0.657 ms。
## 3. 路径稳定性
- 三机稳态均为局域网 direct 路径,没有经过 DERP。
- 当前开发机到 A/B/T 建立直连后的延迟约为 10/9/3 ms。
- 测试过程中开发机到三机的 Tailscale 路径曾发生一次重新协商,约一分钟内 SSH 新连接超时;恢复后无需重启服务。
- 开发机测得最近 DERP 为 San Francisco,约 166 ms。若局域网 direct 失败并退化到 DERP,SIP/RTP 联调体验会明显下降。
- 建议开发时保持局域网 UDP 41641 可达,并监控 `tailscale ping` 是否显示 `direct`
## 4. 已执行端口验收
| 来源 | 目标 | 协议/端口 | 用途 | 结果 |
| --- | --- | --- | --- | --- |
| T | A | UDP 15060 | 规划中的客户 SIP 入口 | PASS,收到双向 ACK |
| T | A | UDP 30000 | RTP 范围下界 | PASS,收到双向 ACK |
| T | A | UDP 40000 | RTP 范围上界 | PASS,收到双向 ACK |
| A | T | UDP 30000 | RTP 反向下界 | PASS,收到双向 ACK |
| A | T | UDP 40000 | RTP 反向上界 | PASS,收到双向 ACK |
| A | T | UDP 5060 | T 机现有 OpenSIPS | PASSOPTIONS 返回 SIP 484 |
| 开发机 | B | TCP 443 | 规划中的运营 Web HTTPS | PASS,收到 ACK |
| A | B | UDP 9060 | HEP | PASS,收到 ACK |
| A | B | TCP 6379 | Redis 热路径 | PASS,收到 ACK |
| A | B | TCP 3306 | 网络路径测试 | PASS;安全策略仍禁止远程直连 |
| B | A | TCP 9100 | Prometheus 抓取 Exporter | PASS,收到 ACK |
| B | A | TCP 22 | 录音拉取/运维路径 | PASS,TCP 建连成功;历史开发端口,后续迁移为 `<SSH_ADMIN_PORT>` |
T 机 SIP OPTIONS 测试产生 1 条 `sip_trace` 记录;`acc``missed_calls` 未增加。该测试记录保留用于审计。
## 5. 开发阶段最小暴露矩阵
### Server A 入站
| 协议/端口 | 允许来源 | 要求 |
| --- | --- | --- |
| TCP `<SSH_ADMIN_PORT>` | 开发机、B | SSH 管理与 B 拉取录音;保留 Key 登录 |
| UDP 15060 | T | 开发 SIP 信令 |
| UDP 30000-40000 | T | 开发 RTP;与 RTPEngine 配置一致 |
| TCP 9100 | B | Node Exporter,仅监控抓取 |
| RTPEngine 控制端口 | 本机回环 | 不允许 Tailscale 或局域网访问 |
### Server B 入站
| 协议/端口 | 允许来源 | 要求 |
| --- | --- | --- |
| TCP `<SSH_ADMIN_PORT>` | 开发机 | SSH,保留 Key 登录 |
| TCP 443 | 开发机 | 运营端 HTTPS |
| UDP 9060 | A | HEP |
| TCP 6379 | A、B 本机 | Redis;密码/ACL、专网绑定 |
| TCP 3306 | B 本机 | MySQL 仅回环地址,不开放给 A |
| TCP 3000/9090 | B 本机 | Grafana/Prometheus 经反向代理或 SSH 隧道访问 |
| 应用内部端口 | B 本机 | 由 Nginx 代理,不直接暴露 |
### Server T 入站
| 协议/端口 | 允许来源 | 要求 |
| --- | --- | --- |
| TCP `<SSH_ADMIN_PORT>` | 开发机 | SSH,保留 Key 登录 |
| UDP 5060 | A | 测试 SIP |
| UDP 30000-40000 | A | 测试 RTP |
| TCP 80、TCP/UDP 111 | 默认禁止 | 现有 Apache/rpcbind 非 SIP 联调必需 |
## 6. Tailscale 与主机防火墙要求
- Tailscale ACL 应只允许上述源目标组合;当前主机侧无法读取 tailnet 管理端 ACL,需在 Tailscale 管理台复核。
- 主机防火墙仍必须实施默认拒绝,不能只依赖 Tailscale ACL。
- 服务应绑定 Tailscale IP 或 `127.0.0.1`,避免因 ens18 双地址选择错误而暴露到局域网。
- 开发环境也不得将 Redis、MySQL、RTPEngine 控制端口和 OpenSIPS MI 暴露给整个 tailnet。
- 防火墙落地分别属于 S03(B)和 S18/S19A),不在 S02 修改。
## 7. 未来阿里云安全组清单
### 迁移前网络
1. A、B 放在同一 VPC,优先同一可用区;业务间使用私网 IP。
2. 为 A/B 分配唯一私网地址和唯一默认路由,不复制本地 machine-id、网卡 UUID 或磁盘 UUID。
3. T 继续作为外部测试端,通过 A 的公网 SIP/RTP 入口验收。
4. 数据库、Redis、HEP、Exporter 和录音搬运走 VPC 私网。
### 安全组 A
开发阶段采用 UDP 30000-40000;迁移阿里云前应根据并发量重新计算并尽量缩小范围。
| 方向 | 协议/端口 | 来源/目标 |
| --- | --- | --- |
| 入站 | UDP 15060 | 已登记客户、供应商和 T 的公网 IP |
| 入站 | UDP 30000-40000 | 已登记 RTP 对端;无法固定时配合限速和监控 |
| 入站 | TCP `<SSH_ADMIN_PORT>` | 管理 VPN/堡垒机安全组;B 私网 IP 仅用于录音拉取;保留 Key 登录 |
| 入站 | TCP 9100 | B 的安全组或私网 IP |
| 出站 | TCP 6379 | B 私网 IP |
| 出站 | UDP 9060 | B 私网 IP |
### 安全组 B
| 方向 | 协议/端口 | 来源/目标 |
| --- | --- | --- |
| 入站 | TCP 443 | 运营人员允许地址;上线后可按产品策略扩大 |
| 入站 | TCP 80 | 可选,仅跳转 HTTPS |
| 入站 | TCP `<SSH_ADMIN_PORT>` | 管理 VPN/堡垒机安全组;保留 Key 登录 |
| 入站 | UDP 9060 | A 的安全组或私网 IP |
| 入站 | TCP 6379 | A 的安全组或私网 IP |
| 入站 | TCP 3306 | 禁止公网;同机应用优先 127.0.0.1 |
| 入站 | TCP 3000/9090 | 不开放公网,经 Nginx/VPN/隧道访问 |
| 出站 | TCP `<SSH_ADMIN_PORT>` | A 私网 IP,仅录音拉取需要时 |
实际创建安全组时应先记录规则截图/导出,按最小权限逐条添加,并从允许和禁止来源分别复测。
## 8. 验收结论
- A/B/T 双向可达、稳态 RTT 和 MTUPASS。
- SIP 15060、T SIP 5060、RTP 30000-40000 双向路径:PASS。
- B 的 Web 443、HEP 9060、Redis 6379 路径:PASS。
- B 到 A 的监控与 SSH 路径:PASS。
- 最小暴露矩阵:已形成。
- 阿里云控制台操作清单:已形成,未执行。
S02 验收通过。开发环境的主机防火墙和服务绑定将在后续任务按服务器逐步实施。