本文记录了某企业通过飞连 SD-WAN 访问海外视频网站(如 Netflix)时遭遇卡顿,最终定位为客户端 DNS 配置错误导致应用调度失效的真实排障案例。通过借鉴此案例,管理员可以了解 SD-WAN 应用调度的底层路由逻辑,并掌握相关的 DNS 代理排障方法。
用户通过 SD-WAN 分支选路访问国外视频网站(Netflix)时出现严重卡顿,主要表现为:视频开始播放前会经历长时间的起播延迟(首屏加载时间长,持续 30 秒至 1 分钟以上),
在开始排查前,需明确当前的组网拓扑:
ping 和 curl 测试主域名 www.netflix.com,并使用 tracert(或 traceroute)检查路由路径。tracert 结果表明去往主域名的流量确实经过了上车点及下车点 CPE 的隧道转发。nflxso.net 与 nflxvideo.net。这些视频资源域名并未包含在飞连管理后台下发的“应用调度”域名列表中。经验总结:如何获取关联资源域名?
在排查类似“主页能开、内容刷不出”的问题时,必须通过 F12 抓包,在 Network(网络)面板中,提取“域”列出现的所有域名并加入到应用调度名单中。
tracert 测试。tracert 命令追踪发现,虽然流量第一跳到达了上车点 CPE,但后续路由直接进入了公网网段,并未通过隧道转发(正常的 SD-WAN 转发路径中应当出现下车点 CPE 的隧道 IP,例如 169.254.x.x)。tun0)的路由规则,而是直接匹配了默认路由,通过物理接口(WAN 口)发送到了公网。这表明应用调度完全没有生效。应用调度的核心原理是“DNS 劫持代理”:客户端向 CPE 发起 DNS 请求 -> CPE 识别到这是调度域名 -> CPE 将其解析为特定 IP 并强行引入隧道。
既然调度未生效,需排查解析链路:
/etc/dnsmasq.d/gfw_domain.conf。如下方截图所示,通过 cat 命令确认目标域名已被正确写入文件,说明云端中心管控配置下发无异常。dig <异常域名> @127.0.0.1。如下方截图所示,dig 命令成功返回了 IP 地址(存在 ANSWER SECTION),说明 CPE 的 dnsmasq 代理服务本身运行正常,没有故障。/opt/feilian/cpe/log/dnsmasq.query.log。从截图中可以看到,在故障时间段内,CPE 没有收到过来自客户端关于该域名的解析记录(日志为空或仅有其他无关域名)。8.8.8.8 (Google DNS),而非 CPE 的 LAN 口 IP,导致应用调度未能触发。www.netflix.com)却能成功通过隧道转发?1 代表域名调度优先;2 代表 IP 调度优先。8.8.8.8 请求了解析,导致应用调度失效,但主域名解析出的目标 IP 恰好包含在飞连后台下发的“海外 IP 调度列表”中(见下方配置截图)。因此,当流量到达 CPE 时,触发了底层的 IP 调度规则,流量被顺利送入隧道。而视频资源域名解析出的 IP 不在列表中,且应用调度因 DNS 旁路而失效,最终导致流量直接走本地公网被阻断。下车点 CPE 虽配置了完整的 IP 调度和应用调度,但客户端 PC 使用了外部公网 DNS(如 8.8.8.8),导致域名解析请求未经过 CPE 的 dnsmasq 代理,应用调度彻底失效。
在这种情况下,只有命中了 IP 调度规则的主域名流量走了隧道;而视频资源域名既未命中 IP 调度,又失去了应用调度,流量被发往本地公网(无法访问海外资源),从而表现为页面框架已加载,但视频一直处于高延迟缓冲状态。
nflxso.net、nflxvideo.net)全部录入。基于上述真实案例,当您在日常运维中遇到“某个网站/应用配置了 SD-WAN 调度但依然卡顿或无法访问”时,可参考以下排障思路进行定位:
F12 > Network 抓包,找出耗时极长或加载失败的外部资源域名,一并加入应用调度名单。tracert 或 traceroute 命令追踪目标域名。如果路由跳数中未出现 CPE 隧道 IP(169.254.x.x),则说明调度未生效,流量走了本地公网。8.8.8.8 或 114.114.114.114 等公网服务器。/opt/feilian/cpe/log/dnsmasq.query.log,确认是否有终端发来的域名解析请求。