很多团队买香港服务器,第一反应是:
- 放个网站省备案
- 搭反代中转
- 跑点脚本爬数据
但香港节点最被低估的工程价值,是地理位置居中、网络视角双向:
- 向南看东南亚,向北看大陆,向东看日韩,向外看欧美
- 既能测“大陆访问海外”的出口质量
- 也能测“海外访问业务”的回源质量
把它做成可观测性探针中枢,比单纯当业务机更有长期价值:
大陆侧探不到的跨境丢包、DNS 黑洞、TLS 握手慢、回源抖动,香港节点能看见。
本文给一套生产向架构:探针部署、拨测任务、链路指纹、SLO 判定、告警收敛,不依赖具体云厂商控制台。
一、为什么是香港,不是新加坡/美西
节点 |
看大陆 |
看海外 |
适用角色 |
香港 |
低延迟、双向可视 |
亚太覆盖好 |
跨境探针中枢 |
新加坡 |
东南亚细 |
回大陆绕 |
东南亚业务边缘 |
美西 |
海外生态全 |
回大陆慢 |
全球拨测补充 |
大陆节点 |
看海外被出口挡 |
看境内准 |
只能做境内拨测 |
香港的价值不是“快”,是双向透明:
- 从香港 ping 大陆,能感知出口拥塞
- 从香港 ping 海外,能感知国际路由漂移
- 从香港查 DNS,能交叉判断污染在哪一跳
二、整体架构:探针不跑业务,只生产信号
text
[香港探针机](小规格即可,2C2G 够用) │ ├─ 网络层探针 │ ping/tcping/mtr/traceroute 多目标 ├─ 解析层探针 │ dig 多递归 / DoH / 权威直查 / DNSSEC ├─ 应用层探针 │ curl 首包 / TLS 握手 / HTTP2 建连 / 边缘节点健康 ├─ 传输层探针 │ TCP 建连耗时、RST 率、零窗口、重传估计 └─ 成本/带宽探针 vnstat + 连接数 + 回源字节 ▼ 本地采集器(Node Exporter 风格) ▼ 时序库(Prometheus/ VictoriaMetrics) ▼ 基线引擎 + 告警 + 区域热力图
原则:
- 探针机不存业务数据、不对外提供业务端口
- 只出指标,不出流量
- 被探测方视为“模拟用户”,不是生产依赖
三、网络层:把“跨境卡”变成可量化指标
1. 基础探测
bash
# 持续 ping(不丢包但记抖动) fping -l -p 1000 -c 60 hk-edge.example.com # TCP 端口可达(比 ICMP 更近真实业务) tcping -p 443 203.0.113.10 # 路由逐跳 mtr --report --packets 20 --interval 1 hk-edge.example.com
采集维度:
- RTT p50/p95/p99
- 丢包率(按 10s 窗口)
- 抖动(相邻 RTT 差)
- 路由跳变(AS 路径是否漂移)
2. 跨境专项
从香港分别测:
- 大陆三大运营商入口 IP
- 海外边缘节点
- 源站(回源路径)
- 第三方 API(支付/地图/模型网关)
重点看:
- 晚高峰(20:00–23:00)RTT 是否翻倍
- 某 ASN 中段是否周期丢包
- 海底光缆切换时 AS 路径是否突变
3. 持续采样脚本(最小版)
bash
while true; do ts=$(date -u +%FT%TZ) rtt=$(ping -c 5 $TARGET | awk -F'/' 'END{print $5}') loss=$(ping -c 5 $TARGET | grep -oP '\d+(?=% packet loss)') echo "$ts $TARGET rtt=$rtt loss=$loss" >> /var/log/probe/net.log sleep 10 done
再接 Prometheus node_exporter textfile collector 暴露指标。
四、解析层:香港节点是“污染交叉验证点”
前面讲过污染检测,这里只讲香港节点独特视角:
bash
# 公共递归 for r in 8.8.8.8 1.1.1.1 223.5.5.5; do dig @$r api.example.com A +short done # 权威直查 dig @$(dig api.example.com NS +short | head -1) api.example.com A # DoH 对比 curl -s 'https://1.1.1.1/dns-query?name=api.example.com&type=A' \ -H 'accept: application/dns-json'
香港探针意义:
- 同域名,大陆递归 vs 香港递归 vs 海外递归结果对照
- 快速区分:是“大陆链路劫持”还是“全球权威被改”
- ECS 关闭时,看默认视图是否返回黑洞 IP
结果进基线库:
json
{"domain":"api.example.com","view":"hk","resolver":"1.1.1.1", "ips":["203.0.113.10"],"dnssec":true,"ts":"..."}
五、应用层:模拟真实用户首字节
别只 ping,业务感知的是“首屏”。
bash
curl -w 'dns=%{time_namelookup} tcp=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total}\n' \ -o /dev/null -s https://api.example.com/healthz
关键指标:
time_namelookup高 → 解析层问题time_connect高 → TCP 握手/路由问题time_appconnect高 → TLS 证书/握手/密钥交换time_starttransfer高 → 边缘或源站处理慢
多区域部署同款探针:
- 香港测大陆/海外
- 大陆测香港边缘
- 海外测香港回源
形成“三角测量”。
六、基线引擎:没基线就不叫可观测
探测数据不对比,只是图表。
1. 静态基线(受控预期)
yaml
targets: api.example.com: expect_as: [13335, 37963] max_rtt_p95: 80ms max_loss_10m: 0.5% dnssec: true cdn-edge.example.com: allow_cdn_prefix: true max_ttfb: 120ms
2. 动态基线(滚动 7 天)
- 同时间段(按小时桶)算均值±3σ
- 晚高峰单独建基线,不跟凌晨比
- 新路由首次出现 → 观察不告警
- 持续 3 个周期异常 → 升级
3. 评分判定
python
score = 0 if rtt_p95 > base*1.5: score += 2 if loss > 0.5%: score += 2 if dnssec_expected and not ad: score += 3 if ttfb > slo: score += 1 if route_as_drift: score += 2 if score >= 5: alert("cross_border_degrade", target, region="hk")
七、SLO 与告警收敛
别“ping 不通就发短信”,运维会屏蔽。
分级:
- P3:单目标单次抖动,自动复测 3 次
- P2:同区域 5min 持续劣化(RTT+丢包双指标)
- P1:解析异常+TLS 握手失败+回源 5xx 同发
- P0:核心域名 DNSSEC 失败 / 回源全断 / 支付 API 不可达
告警附带“取证包”:
json
{ "target":"api.example.com", "hk_rtt":142, "cn_rtt":38, "loss":1.2%, "trace":"...", "dns_view":"hk-bad", "baseline_rev":"v31" }
收敛规则:
- 同目标同区域 5min 合并一条
- 主动变更窗口(发版/切 DNS)自动静默
- 告警里直接给“可能根因”:解析/路由/边缘/源站
八、探针机自身安全
香港机小、公网暴露、常被扫,必须收口:
bash
# 只开探测出向,入向仅收监控 ufw default deny incoming ufw allow 22/tcp from 运维网段 ufw allow 443/tcp from 监控网关 # 不跑业务、不挂数据库 # 探针脚本非 root,chroot/容器隔离
- 探针指标走 mTLS 回中心
- 本地日志只留 24h,周期清理
- 不把探针 IP 写进业务 DNS(避免被当成源站打)
九、和边缘架构怎么配合
前面几篇讲过的边缘/解析/污染检测,这里收口成闭环:
text
香港探针 ──发现劣化──▶ 告警 │ │ ├──解析异常──▶ 切 DoH/HTTPDNS ├──路由劣化──▶ 边缘 GSLB 降权该出口 ├──回源慢────▶ 切就近缓存/降回源频率 └──节点故障──▶ DNS 探测摘除 + 权重收敛
探针不是“看了就行”,要能驱动边缘策略。
十、最小落地清单
- [ ] 香港轻量机 2C2G,纯探针不跑业务
- [ ] fping/tcping/mtr/dig/curl 定时任务
- [ ] 多递归 DNS 交叉 + 权威直查 + DoH
- [ ] 指标进 Prometheus,按小时桶建动态基线
- [ ] 静态基线管预期 AS/RTT/DNSSEC
- [ ] 三角测量:港↔大陆↔海外
- [ ] 告警分级+取证快照+变更窗静默
- [ ] 探针机只出指标,入向全收口
- [ ] 探测结果接边缘调度(不是只看不动作)
十一、什么别用香港探针干
- 把探针当生产网关(一打就瘫)
- 只测 ICMP 不测 TLS/TTFB(业务无感)
- 单点香港机下结论(至少大陆+海外各一个对照)
- 基线写死单 IP(CDN 边缘一变就误报)
- 探测频率过高被目标限流(反而假劣化)
十二、总结
香港服务器在跨境架构里最被低估的角色,不是“免备案业务机”,而是:
在大陆和海外之间,放一个不偏不倚的“网络听诊器”。
业务机关心“请求成不成”,
探针机关心“为什么这一秒变慢了”。
解析层看污染,
网络层看丢包,
应用层看首字节,
基线层看漂移,
告警层看收敛。
你不用等用户说“网站卡”,
系统已经知道:
- 是香港出口抖了
- 是某 ASN 中段丢包
- 是 DNS 视图被抢答
- 还是源站 TLS 握手变慢
站长侧做持续拨测时,也可以把单点 ping 扩成“多递归+多区域”的基线视角(类似 kkce 这种探测思路):先有数据,再谈优化。
香港一台小机,
不扛流量、不存数据,
却让整条跨境链路,
每次异常都留得下指纹。