1. 迁移前准备与风险评估
- 明确迁移目标:新IP、新机房或更换云厂商。记录当前公网IP、内网IP、端口、证书、反向DNS(PTR)、防火墙规则和BGP信息(如有)。
- 制定窗口期与回滚点:选择低峰时段,备份完整系统快照与配置,保留旧实例至少48小时以便回退。
2. 降低DNS TTL(提前24-48小时)
- 登录域名托管商或DNS服务(如Cloudflare、阿里云DNS)。将与服务相关的A/AAAA记录和CNAME的TTL降到60秒或120秒,保存并等待TTL过期生效(通常24小时内)。
- 如果使用多级CNAME,逐级处理确保最终解析链的TTL都已降低。
3. 准备新VPS与环境一致性检查
- 在新VPS上部署应用、同步数据(rsync/数据库复制)、安装证书并测试本地服务绑定到新IP。
- 配置防火墙(ufw/iptables/nftables)、安全组(云平台)端口一致,并在本地通过hosts文件指向新IP做完整功能验证。
4. 路由与网络准备(无BGP环境)
- 若无BGP,使用云厂商提供的浮动IP/弹性IP(Elastic IP)或VIP绑定到新实例:先在控制台申请浮动IP并绑定新实例,验证外网连通性。
- 在旧实例保留原IP(如可)并保持端口转发以便短时间内支持双向访问。
5. BGP或自有ASN的路由切换(如适用)
- 与上游ISP/IX协调,准备好新的前缀公告。修改BGP配置(如Quagga/FRRouting)并逐步withdraw旧前缀、announce新前缀,使用BGP社区实现流量引导。
- 监控路由收敛(通常数分钟到数十分钟),使用bgp.he.net、RIPE RIS查看全球可达性。
6. DNS记录正式切换步骤
- 在TTL降至低值后,先在DNS中新增新A/AAAA记录(保留旧记录短期并行)。等待几秒到几分钟后,通过dig @8.8.8.8 +trace 检查解析指向新IP。
- 当确认解析稳定指向新IP后,删除旧A记录,或将其指向旧实例作为备援(视策略而定)。
7. 验证与灰度流量切换
- 使用curl --resolve 域名:端口:新IP 本地测试;或修改本地hosts做全功能回归。
- 对外流量先做灰度(如负载均衡器按权重下发或DNS按地理策略逐步下放),监控日志、错误率、响应时延和用户体验。
8. 反向DNS与证书、IP信任更新
- 向云厂商或IP提供商申请修改PTR,使反向解析指向正确主机名;此步骤对邮件服务尤为重要。
- 如使用TLS证书且证书绑定IP,确保证书仍有效或使用基于域名的证书无需变更。
9. 流量监控与回滚策略
- 在切换后持续监控(至少24-72小时):使用ping、mtr、tracepath、应用监控(Prometheus/Grafana)与真实用户监测(RUM)。
- 若发现严重问题:立即将DNS回退到旧IP(TTL已设置低)并撤销路由变更;若使用浮动IP,直接解绑新IP并绑定回旧实例以实现秒级回滚。
10. 切换后清理与优化
- 待稳定运行后将DNS TTL恢复到正常值(如300-3600秒),回收不再使用的旧实例与IP,关闭不必要的安全策略。更新运维文档与SOP。
11. 常见命令与检查样例
- dig A example.com @8.8.8.8
- curl -I --resolve example.com:443:NEW.IP https://example.com/
- ip addr show; ip route show; sudo iptables-save | grep
- bgp: show ip bgp summary(FRR/Quagga CLI)
12. 问:DNS TTL什么时候恢复为较高值?
答:一般在切换稳定运行并确认无异常后24-72小时,将TTL恢复到常规值(300~3600秒),以减小解析查询压力与提升缓存效率。
13. 问:没有浮动IP或BGP,如何实现低停机切换?
答:可通过先降低TTL、并行保留旧IP与新增DNS记录做灰度、使用负载均衡器或DNS轮询按权重逐步导流,实现尽量零停机的平滑切换。
14. 问:切换失败如何快速回滚?
答:预先准备回滚步骤:将DNS快速指回旧IP(低TTL生效秒级),或在云控制台用浮动IP直接重新绑定旧实例,同时撤销BGP公告或重新announce旧前缀。
来源:越南vps云服务器地址迁移过程中DNS与路由切换的具体方法