游客发表
公司内网那台DNS服务器,存内IP是不建10.0.0.2,跑在一台五年前的议优Dell R730上。每次有人提“要不要把DNS优选也做了”,存内我就想起去年那次故障——运维把内网DNS和公网DNS一起塞进优选列表,不建结果财务部打不开报销系统,议优整整瘫了四十分钟。存内
问题出在优选机制本身。不建DNS优选的议优核心逻辑是测速,谁响应快就用谁。存内内网DNS通常只有一台,不建延迟稳定在1ms以内,议优公网DNS再快也要8ms起步。存内按这个规则,不建内网DNS永远排第一,议优看起来挺合理对吧?但故障那天,内网DNS因为同时处理AD域控查询和DHCP更新,负载飙到90%,响应时间从1ms跳到200ms。优选算法立刻切到公网DNS,然后所有内部域名解析全部失败。
它存在的意义是解析内部域名。`oa.company.local`、`gitlab.internal`、`jumpserver.corp`——这些记录公网DNS根本没有。优选一旦切走,这些域名要么返回NXDOMAIN,要么被公网DNS的泛解析劫持到某个广告页。用户看到的现象是“网断了”,实际上只是DNS选错了路。
有个做游戏的朋友更惨。他们内网DNS和Kubernetes的CoreDNS混用,优选切到公网后,所有`*.svc.cluster.local`解析直接失效,测试环境的微服务全部502。排查了半小时才发现是DNS优选搞的鬼。
大部分DNS优选工具只认延迟和丢包率。它们不知道10.0.0.2是内网地址,也不知道`company.local`是内部域名。你告诉它“优选”,它就真的只按速度排序。更麻烦的是,有些工具还会缓存优选结果,内网DNS恢复后依然用公网DNS,直到缓存过期。
我见过最离谱的配置是某公司IT把内网DNS和阿里DNS、114DNS一起丢进优选池,还开了“自动切换”。结果内网DNS一重启,所有客户端切到阿里DNS,然后`wiki.internal`解析到了阿里云的某个错误页。用户以为wiki被黑了,实际只是DNS选错了。
做冗余,不做优选。两台内网DNS,用anycast或者主备模式,客户端配置里写死这两个IP。别让优选工具插手。如果非要考虑性能,就在内网DNS前面挂个负载均衡,但解析结果必须来自内网。
公网DNS可以优选,毕竟`baidu.com`解析到哪个IP都差不多。内网DNS不行,它解析的是“你是谁、你在哪、你能访问什么”这些内部逻辑。优选算法只关心“谁快”,不关心“谁对”。
去年那次故障后,我们把内网DNS从优选列表里摘了出来,单独配了一组主备。延迟从1ms变成1.5ms,没人察觉。但财务部再也没打不开报销系统。有时候“慢一点”比“快但错”划算得多。
友情链接