BGP高防牵引和DNS切换有什么区别?怎么选

买高防时经常会被问一句:走 BGP 牵引还是走 DNS 解析?两者听起来都是「把流量切到高防节点」,但生效方式、生效速度、对业务的影响完全不同。本文用 9 个问答讲清 BGP 牵引的原理、它和 DNS 切换的区别、与 Anycast 的关系、怎么验证牵引是否生效,以及牵引之后真实 IP 和证书该怎么处理。

Q:BGP 牵引到底是什么?和 DNS 切换有什么本质区别?

一句话概括:DNS 切换改的是「域名指向哪个 IP」,BGP 牵引改的是「这个 IP 的流量该走哪条路」

  • DNS 切换(DNS 型高防):高防厂商给你一个 CNAME 或新 IP,你把自己域名的解析记录改过去。用户拿到的是高防节点的地址,流量自然打向高防。
  • BGP 牵引(IP 牵引 / 高防 IP):你的业务 IP 保持不变,由高防机房通过 BGP 对外宣告这段 IP 路由。攻击流量和正常流量都按正常的互联网路由机制被「吸」到高防机房,清洗后再回源给你。

差别落在三处:① 生效速度——BGP 是路由层面生效,通常秒级到分钟级,DNS 要等各级缓存过期;② 兼容性——BGP 不改 IP,不用改 DNS、不用换证书、不影响依赖固定 IP 的业务(比如只允许指定 IP 调用的接口);③ 依赖——BGP 牵引的前提是这段 IP 能由机房对外宣告,通常要求业务在机房的 IP 段内,或者做 IP 迁移。

Q:BGP 牵引具体是怎么把流量「切」走的?

核心是路由宣告。互联网上的流量走哪条路,靠的是各 AS 之间交换的 BGP 路由表。

  1. 正常情况下,你的 IP 段由你的机房或运营商对外宣告,全世界的路由器都知道「访问这个 IP 要走这条路」。
  2. 遭遇攻击时,高防机房对外宣告同一段 IP,并且把 AS 路径(AS_PATH)做短、掩码做细——更具体的 /24 优于 /16,按 BGP 选路规则,全球路由会优先选择这条新路径。
  3. 于是原本打向你的流量,在到达你的链路之前就被引导进了高防机房。
  4. 高防清洗掉恶意流量后,再通过专线把干净流量回源给你的源站。

所以牵引能生效的技术支点,就是「路径更短 + 掩码更细」。反过来说,如果攻击源就在你机房的上游,或者上游做了路由过滤,效果会打折。这也是为什么同一套高防方案,不同机房接出来的防护效果可能差很多。

Q:DNS 切换为什么生效慢?TTL 设多少合适?

因为 DNS 有缓存,你改了解析,别人手里的旧结果不会立刻失效。

  • 缓存层级多:本地 hosts → 操作系统缓存 → 递归解析器缓存 → 各级权威与缓存服务器,任何一层没过期,用户就还拿着旧 IP。
  • TTL 是最大等待时间:你设 TTL=600,理论上最多 600 秒后全网刷新。但部分运营商递归服务器会忽略你的 TTL,自己用更长的缓存,实际可能拖到几小时。
  • 实践建议:日常 TTL 设 300 秒(5 分钟)左右,兼顾解析性能与切换灵活性。攻击已经开始时再临时调小 TTL 意义有限,因为已经缓存的结果改不回来。
# 查当前 TTL 与解析结果
dig +noall +answer www.example.com A

# 指定不同公共递归查询,看结果是否一致
dig @223.5.5.5 www.example.com A +short
dig @8.8.8.8 www.example.com A +short

# 看 CNAME 链路是否已经指到高防域名
dig www.example.com CNAME +short

另一个常被忽略的点:DNS 切换只对「新发起的解析」生效。已经建立连接的客户端(长连接 App、游戏客户端、长时间不刷新的浏览器)会继续打老 IP,这部分流量不会自己切走。这是 DNS 型高防在实战中最常被吐槽的地方。

Q:Anycast 和 BGP 牵引是一回事吗?

不是,但两者经常一起出现。

  • Anycast(任播):同一个 IP 在多个机房同时宣告,按 BGP 选路就近接入。用户在上海由上海节点接走,在成都走成都节点。它解决的是「就近接入 + 天然分散流量」。
  • BGP 牵引:把原本属于你的 IP,临时或长期改由高防机房宣告。它解决的是「把打向我的流量引到有防护能力的地方」。

大型高防和 CDN 普遍是两者叠加:用 Anycast 做就近接入,用牵引做攻击时的定向调度。对站长来说,判断依据就两个:是否要求改 DNS 记录(要改就是 DNS 型)、是否给你固定且不变的 IP(不变又能清洗,通常就是 BGP 牵引型)。

Q:怎么验证流量真的被牵引到高防节点了?

三个层面交叉验证,别只看高防后台的曲线图。

# 1. 从多地/多运营商看路由路径(是否经过高防机房 AS)
#    Linux: traceroute / mtr ,Windows: tracert
traceroute -n www.example.com
mtr -r -c 20 www.example.com

# 2. 查 IP 前缀归属,确认宣告方是谁
whois 203.0.113.10 | head -20

# 3. 在源站抓包,确认回源来源是高防节点而不是公网随机 IP
tcpdump -i eth0 -nn "tcp port 80" -c 50

判断标准很直白:① traceroute 在到达源站之前先经过了高防机房的 AS;② 源站看到的连接来源是固定的几个高防回源 IP;③ 攻击期间高防后台能看到流量,而源站带宽反而下降。三条同时成立,才能说明牵引确实生效了。

Q:牵引之后源站看到的 IP 全变成高防节点了,怎么还原真实客户端 IP?

要让高防节点在回源时带上真实 IP(一般是 X-Forwarded-ForX-Real-IP 头),再在 Nginx 里按可信回源段还原。

# /etc/nginx/conf.d/realip.conf
# 只信任高防回源 IP 段,把 $remote_addr 还原为真实客户端 IP
set_real_ip_from 203.0.113.0/24;
set_real_ip_from 198.51.100.0/24;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

log_format main "$remote_addr - $remote_user [$time_local] $request "
                "$status $body_bytes_sent $http_referer $http_user_agent";
access_log /var/log/nginx/access.log main;

两个坑要记住:① set_real_ip_from 必须写高防的回源段,绝不能写 0.0.0.0/0——否则任何人伪造 X-Forwarded-For 都能冒充任意 IP,你所有基于 IP 的限速和封禁会彻底失效;② 要确认回源用的是出方向 IP,高防节点回源用的地址和对外服务地址常常不是同一批,动手前先找厂商要准确网段。

Q:切到高防 IP 会影响 SEO 和 HTTPS 证书吗?

  • SEO:只要最终返回内容不变、状态码正常、没有把搜索引擎蜘蛛当攻击流量拦掉,切换对收录没有直接影响。DNS 切换时特别要注意把搜索引擎蜘蛛的 IP 段加入白名单,避免蜘蛛抓取被误拦导致收录波动。
  • HTTPS 证书BGP 牵引不用换证书,因为域名和 IP 都没变;DNS 切换必须把同域名的证书部署到高防节点,否则用户会看到证书不匹配。用 CNAME 接入的方案,通常要在高防或 CDN 平台上传证书。
  • 证书续期:如果有自动续期或使用通配证书,要确认高防平台能同步到新证书,避免续期之后边缘节点还是旧证书。

Q:BGP 牵引能防住所有类型的 DDoS 吗?

不能。它解决的是「把流量引到有防护能力的地方」,不是「把所有攻击都消灭」。

  • 带宽型攻击(UDP 反射放大、流量洪水):这是牵引的强项,高防机房的带宽池远大于单机带宽,能扛住。
  • 协议层攻击(SYN Flood 等):靠高防的 SYN 代理与连接复用处理,通常也能扛。
  • 应用层攻击(CC、慢速攻击)牵引基本无能为力。这类攻击流量很小,看起来就是正常请求,按流量特征识别效果有限,必须叠加 WAF、频率限制、人机验证。
  • 连接耗尽型:靠防护设备的连接数上限与超时策略缓解,但阈值调得过激会误伤正常用户。

正确的心智模型是:BGP 牵引负责「大流量不打死我」,WAF 和限速负责「小流量不拖垮我」,两层互补,不能互相替代。

Q:还有什么补充建议?

决策清单按顺序过一遍:① 先判断自己的攻击类型(流量型还是应用型)→ ② 流量型优先选 BGP 牵引或高防 IP,应用型必须叠加 WAF → ③ 接入前把源站改成只允许高防回源 IP 访问 → ④ 配置 set_real_ip_from 还原真实 IP → ⑤ 白名单排除搜索引擎蜘蛛与自有监控 → ⑥ 日常 TTL 控制在 300 秒以内,为可能的 DNS 切换留余地 → ⑦ 定期做一次切换演练,确认预案真的能用

补两个实战细节。第一,接入前先在源站把回源 IP 白名单配好,否则牵引一旦生效,源站会突然看到大量来自高防节点的连接,之前设的频率规则会集中误伤,要留出「临时放开」的操作通道。第二,把切换流程写成一页纸的预案:联系谁、改哪条记录、用哪三条命令验证、怎么回滚。等到攻击发生时才写文档,通常已经来不及了。

最后提醒:不要只做单一层防护。只做 BGP 牵引,CC 照样能拖垮应用层;只做 WAF,大流量照样打满带宽。先分清攻击类型,再决定钱花在哪一层,才是成本可控的做法。