
几个月前,我们上线了一款面向大陆市场的SaaS服务,主站部署在香港的数据中心。初期测试网络延迟在可接受范围内,实地走访不同地区也未发现大问题。但真正接入百万级日活后,用户反馈陆续涌现:“登录页面半天打不开”“报表导出直接卡死”“偶尔要重试三次才响应”。我们通过监控发现,大量来自中国大陆的访问在跨境段出现了高丢包和频繁超时,特别是在使用教育网、联通以及部分三线小运营商的用户身上问题最严重。
面对这种情况,我们不得不正视:仅依赖香港单线网络或默认的域名解析策略,已经无法支撑大陆用户的稳定访问。于是,我开始重新设计我们的网络出海策略,并最终通过香港服务器部署智能DNS解析系统、结合多运营商BGP路由策略,显著改善了线路质量,用户端超时率降低了超过80%。
下面是我完整的落地实践与技术细节分享。
一、问题本质:大陆访问香港节点为何频繁超时
1. 运营商间互联质量差异
中国大陆各大运营商(电信、联通、移动)与香港不同运营商的互联质量差异巨大,某些链路在晚高峰期间甚至出现20%以上丢包。
用户从教育网或铁通网络出发,跨境访问香港某些ISP会被绕行至欧美再返回,路径长达20+跳。
2. DNS智能调度缺失
传统DNS服务商(如AWS Route53或Cloudflare DNS)未针对中国大陆进行精细化解析,同一域名在不同省份可能解析到同一香港IP,导致无法根据网络质量动态切换节点。
二、架构目标与设计原则
我们制定了如下目标:
- DNS分省分运营商解析:根据用户DNS查询来源的IP归属,智能解析到最优香港服务器IP。
- 多线BGP网络优化:在香港服务器端绑定多个运营商的IP段,通过BGP优化跨境传输路径。
- 动态线路监测与调度:部署自研探测系统,自动根据丢包率、RTT切换主备线路。
三、香港服务器网络环境部署
1. 选择具备多运营商BGP支持的香港IDC
我们最终选择了支持**BGP Anycast接入、三线混合回程(China Telecom + China Unicom + China Mobile)**的香港机房,同时要求:
- 能配置静态BGP社区策略;
- 支持多IP绑定(/29以上子网段);
- 提供GRE/IPIP隧道用于回源调度实验。
2. 分配多个独立IP绑定不同BGP策略
| IP地址 | 绑定运营商优先策略 | BGP说明 |
|---|---|---|
103.xxx.1.1 |
中国电信优先出口 | BGP社区标签 6453:100 |
103.xxx.1.2 |
中国联通优先出口 | BGP社区标签 4837:200 |
103.xxx.1.3 |
中国移动优先出口 | BGP社区标签 9808:300 |
配置示例(使用Bird作为BGP守护):
protocol bgp ChinaTelecom {
neighbor 218.xxx.xxx.1 as 6453;
local as 65001;
export where net ~ [103.xxx.1.1/32];
}
四、部署智能DNS系统(自建DNSPod替代)
1. 技术选型
我们最终使用 CoreDNS + GeoIP2 + Lua插件 实现智能DNS调度,替代了原本使用的第三方DNS服务,避免被墙、具备高度灵活性。
2. 配置示例:CoreDNS 智能解析配置
.:53 {
log
errors
geoip /etc/GeoLite2-City.mmdb
hosts /etc/custom_hosts {
fallthrough
}
template IN A www.example.com {
match ^www\.example\.com\.$
answer "{{.Name}} 60 IN A {{ if eq .GeoIP.Country.ISOCode "CN" }}{{ if eq .GeoIP.Subdivision.Name "Guangdong" }}103.xxx.1.1{{ else }}103.xxx.1.2{{ end }}{{ else }}103.xxx.1.3{{ end }}"
}
forward . 8.8.8.8
}
我们将GeoLite2数据库导入后,根据省份与运营商精确匹配线路,广东电信用户走.1.1,联通用户走.1.2,移动用户走.1.3,其余海外或识别失败用户走默认IP。
五、全链路健康监测与自动切换机制
为了避免某一链路长时间异常,我们搭建了如下机制:
1. 每5分钟探测大陆核心城市Ping与TraceRoute
使用北京、上海、广州的VPS定时执行如下脚本:
for ip in 103.xxx.1.{1..3}; do
loss=$(ping -c 10 $ip | grep 'packet loss' | awk '{print $6}')
latency=$(ping -c 5 $ip | grep 'avg' | cut -d '/' -f 5)
log "$ip 丢包率: $loss 平均延迟: $latency"
done
2. 自动更新CoreDNS配置并热重载
当某条线路丢包率连续两次超过20%或平均延迟高于150ms,我们自动将其从解析结果中下线,并用systemctl reload coredns热更新。
六、实测效果与性能提升
上线智能DNS与多BGP线路后一周内,我们做了多点对比:
| 地区 | 优化前平均延迟 | 优化后平均延迟 | 丢包率变化 |
|---|---|---|---|
| 北京教育网 | 320ms | 95ms | 下降约70% |
| 广东移动 | 180ms | 60ms | 几乎无丢包 |
| 河南联通 | 240ms | 85ms | 明显下降 |
| 重庆铁通 | 超时 | 110ms | 恢复可访问 |
后台监控显示访问失败率从2.8%降到0.4%,PV和用户留存也有明显提升。
通过此次落地实践我深刻体会到:
- 不能依赖默认网络策略服务大陆市场;
- 多线路BGP出口是关键,但前提是DNS调度足够智能;
- 自建DNS + 分省调度是解决跨境质量差异的根本方案;
- 要时刻监控并根据数据驱动动态调整解析与线路优先级。
对任何部署香港服务器面向大陆业务的团队而言,DNS智能解析+多BGP优化,不再是可选项,而是必须基础设施。只有真正做到了网络层的“分流精细化”,才能撑得住多运营商、多地域用户的高稳定性需求。











