免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

从DNS解析原理到企业内网部署:一文搞定DNS配置与故障排查

从DNS解析原理到企业内网部署:一文搞定DNS配置与故障排查 1. 从一个让人抓狂的下午说起DNS到底是怎么“导航”的先讲个真实场景。某天同事跑过来说电脑能上微信、能看视频但浏览器死活打不开网页Chrome提示“无法找到DNS地址”。我第一反应是检查了下网卡配置发现DNS服务器指向的是一个已经停机的内网地址。改成114.114.114.114之后网页秒开。同事问了一句“为什么微信能上而网页不行”我当时愣了几秒——这个问题看似简单真要把DNS的工作机制讲清楚还真不是一句两句能说明白的。DNS这个缩写几乎每个做IT、搞运维的人都见过但真正把它的来龙去脉讲透的人不多。它的全称是Domain Name System域名系统。如果把互联网比作一座城市每台服务器就是一座房子IP地址是房子的门牌号而DNS就是那个拿着望远镜站在城市入口的导航员你说“我要去新华书店”他不用告诉你详细路线先告诉你门牌号你顺着门牌号自己走过去就行。这篇文章我想把DNS从原理到实操、从排查到选型、从个人电脑到企业内网系统地拆一遍。受众不限于运维工程师也包括还在学网络基础的学生、写代码时被域名解析搞糊涂的开发者、家里路由器上个不了网就重启的普通用户。无论你是想搞懂“为什么改个DNS就能解决卡顿”还是想在公司内部搭一套自己的DNS服务这篇文章应该能给你一个相对完整的答案。2. 拆解DNS的核心机制域名、解析、缓存和递归2.1 域名的层级结构为什么是“从左到右”读要理解DNS首先要理解域名本身的结构。www.example.com.cn这个域名从左到右依次是主机名、二级域名、顶级域名和国家顶级域名。但DNS在解析时是从右往左查找的这一点很多人容易搞混。最右边是根域用一个小圆点表示通常省略不写。根域后面是顶级域比如.com、.cn、.org再往前是二级域比如example.com最左边才是具体的主机记录。整棵域名树就像公司组织架构根是CEO顶级域是各大部门总监二级域是部门下面的项目组主机名就是具体某个工位。理解这个层级的意义在于DNS解析并不是某个单一服务器“知道”所有答案而是一层层问上去的。每个层级的DNS服务器只负责自己那一亩三分地根服务器告诉你.com的服务器在哪.com的服务器告诉你example.com的服务器在哪example.com的服务器才最终告诉你www这台机器的IP是什么。2.2 一次完整解析过程递归和迭代的双人舞当你在浏览器输入一个域名系统要拿到对应的IP地址整个流程分两种模式递归查询和迭代查询。日常场景中你的电脑通常配置的是运营商或公共DNS服务器这个服务器会帮你把“跑腿问路”的活全干了这就是递归查询。而对于DNS服务器之间的相互询问更多是迭代查询——每台服务器只回答“我不完全知道但我知道谁更清楚”像踢皮球一样把请求往下传。以访问www.example.com为例完整流程是这样的电脑先查本地DNS缓存Windows下可以用ipconfig /flushdns清空缓存Linux下是systemd-resolve --flush-caches。缓存没有就把请求发给本地配置的DNS服务器比如刚才提到的114.114.114.114。本地DNS服务器先查自己的缓存还没有就去问根服务器“你知道www.example.com的IP吗”根服务器说“我不知道但.com的权威服务器在某某地址你去找它。”本地DNS服务器又去问.com服务器得到example.com的权威服务器地址。最后找到example.com的权威服务器拿到具体IP返回给电脑。整个过程看起来繁琐实际上网络请求毫秒级就完成了。关键点在于越往上层走查询次数越少缓存命中率越高。所以公共DNS服务商特别在意缓存命中率这是衡量DNS服务好坏的核心指标之一。2.3 记录类型A、AAAA、CNAME、MX、NS各司其职DNS不只是把域名转成IP它还能承载很多别的信息靠的是不同的资源记录类型。A记录域名到IPv4地址的映射最常用。AAAA记录域名到IPv6地址的映射现在越来越多的服务开始启用。CNAME记录别名记录一个域名指向另一个域名。比如你有个cdn.example.com设置一个CNAME让static.example.com指向它后续CDN切换IP时只需要改一处。MX记录邮件交换记录告诉别人“发往这个域名的邮件应该投递到哪台邮件服务器”。NS记录指定该域名由哪台DNS服务器负责权威解析。TXT记录文本记录经常用来做域名所有权验证、SPF反垃圾邮件验证。这里有个容易踩的坑很多人会把CNAME和A记录混用。同一个主机名不能同时配置A记录和CNAME记录这是RFC规范明确禁止的。实际工作中遇到过有人给www配置了A记录指向旧服务器又加了个CNAME想指向新域名结果解析时出现随机性一部分用户访问旧IP一部分访问新IP折腾了半天才排查出来。2.4 TTL缓存为什么改了解析不生效在DNS的所有参数里TTLTime To Live是最容易被忽略却又极其重要的一个。它决定了这条记录在DNS服务器缓存中存活的时间单位是秒。常见的默认值是600秒10分钟、3600秒1小时、86400秒1天。很多人遇到过这样的问题改了域名解析等了半天还是访问旧服务器。原因有两个一是你本地电脑的DNS缓存还没过期二是你用的公共DNS服务器的缓存还没过期。解决方法是改解析前先把TTL调低比如改成60秒等个几分钟再改成正常值。这个操作在换服务器、切CDN、做故障转移时特别有用。我在实际运维中总结出的经验是常规记录TTL设在600到3600秒之间即可不要设得太短。TTL太短会导致所有下级DNS服务器频繁回源查询增加权威服务器的压力TTL太长又会让故障切换后的生效时间变长。需要做变更前提前一天把TTL调低变更完成后再调回来这个是线上操作的黄金法则。2.5 DNS封包格式为什么UDP就能搞定DNS默认使用UDP协议的53端口单个请求包很小通过UDP发送效率最高。但也因为UDP不可靠DNS协议设计了重传机制——如果客户端在一定时间内没收到响应会重新发送请求。超过一定次数还没有响应才会切换成TCP方式。这里有个经典场景有些企业防火墙会封掉大UDP包导致DNS响应超过512字节时被丢弃。早期DNS协议规定UDP响应超过512字节就要截断客户端收到截断标记后会改用TCP重查。现在的EDNS0协议把上限提高到了4096字节支持更多记录内容。所以你在排查“某些域名解析超时”的问题时除了看网络连通性还得检查中间设备是否放行了TCP 53端口和大UDP包。3. 搭建自己的DNS服务器从单机到企业内网3.1 为什么要在内网自建DNS有人会问运营商和公共DNS都挺好用的为什么还要自己搭每家企业遇到的情况不一样但最常见的几个理由很直白内网有大量服务器、数据库、存储节点不想用IP地址互相访问希望用域名访问便于迁移和记忆。企业内部要求域名解析可控比如屏蔽某些外网域名或者强制某个域名解析到内网的特定服务器。不希望内网用户的DNS查询全部暴露给第三方公共DNS有数据隐私方面的考虑。物联网设备、打印机、监控摄像头这类设备数量多且IP不固定用DHCP下发DNS配置后能靠主机名互相发现。自建DNS主流方案是BIND、PowerDNS、Unbound还有国内用得越来越多的自研方案。如果只是小型内网用dnsmasq就够用了稍微正规一些的环境建议还是上BIND。我后面介绍的内容以BIND为主它是目前使用范围最广的DNS服务器软件几乎所有Linux发行版都有现成的包。3.2 Linux下BIND部署实录安装和配置BIND并不复杂但如果按网上一堆旧教程来操作很容易被各种语法问题折磨。下面是我在CentOS和Ubuntu上实测过的流程直接可参考。CentOS/RHEL系列yum install -y bind bind-utils systemctl enable named systemctl start namedUbuntu/Debian系列apt update apt install -y bind9 bind9utils systemctl enable bind9 systemctl start bind9安装完成后主配置文件通常在/etc/named.confCentOS或/etc/bind/named.confUbuntu。一个最精简的配置如下options { directory /var/named; listen-on port 53 { any; }; allow-query { any; }; recursion yes; forwarders { 223.5.5.5; 119.29.29.29; }; };这段配置的含义是监听所有网卡的53端口允许所有来源的查询请求开启递归解析功能本地查不到的记录转发给阿里和腾讯的公共DNS。注意forwarders这个选项很实用相当于给自己的DNS加了一个“外包通道”既减轻根服务器查询压力又提高了内网用户的解析速度。3.3 配置内网域名解析区域文件和注意事项要让内网域名解析跑起来需要定义zone区域。比如内网有个域名叫corp.example要把它解析到192.168.1.10这台服务器上配置如下zone corp.example { type master; file corp.example.zone; };然后在/var/named/目录下创建corp.example.zone文件$TTL 600 IN SOA ns1.corp.example. admin.corp.example. ( 2024111601 3600 900 604800 86400 ) IN NS ns1.corp.example. ns1 IN A 192.168.1.10 www IN A 192.168.1.10 db IN A 192.168.1.20SOA记录里的序列号很重要每次修改区域文件后都需要递增不然从服务器同步会失败。格式依次是主DNS服务器名、管理员邮箱用点代替、序列号、刷新时间、重试时间、过期时间、最小TTL。序列号我习惯用YYYYMMDDnn的格式比如2024111601代表当天第一个版本简单明了。配置改完后用named-checkconf检查主配置用named-checkzone检查区域文件全部无报错再重启服务。很多人直接改完就重启结果配置文件里一个分号写错了服务起不来。检查命令虽然多一步但能省下大量排查时间。3.4 麒麟系统和Windows环境下部署的区别现在的信创环境里麒麟系统越来越常见。它在配置BIND时和CentOS基本一致但有两个坑需要注意一是麒麟系统默认可能会启用systemd-resolved占用53端口BIND启动时会报“Address already in use”二是某些精简版麒麟系统没有安装bind-utils工具包调试命令不全。解决方法是先停用systemd-resolved服务或者把它的监听地址改到127.0.0.53以外的端口。命令如下systemctl stop systemd-resolved systemctl disable systemd-resolvedWindows Server上部署DNS要简单得多图形界面全程点击完成。但Windows自带DNS有几个通病一是默认加密方式受限较老版本不支持DNSSEC二是性能上限不如BIND三是Windows Server的DNS每次配置变更后需要等待其后台任务刷新不会立刻生效。如果你的内网规模不大用Windows DNS没问题如果规模超过几千台设备还是建议上Linux方案。3.5 AD域环境下的DNS配置为什么DC网卡DNS要写自己关键字里出现了“ad域内3台dc域控制器、dc的网卡dns应该如何配置”这个话题非常有代表性。多台域控制器DC组成的高可用环境DNS配置稍有不慎整个域的登录、组策略下发都会出问题。标准做法是每台DC的网卡DNS配置填写本机IP和另一台DC的IP顺序有讲究。假设有三台DCIP分别为192.168.1.10、192.168.1.11、192.168.1.12那么DC1网卡DNS首选填192.168.1.10本机备选填192.168.1.11另一台DC。DC2网卡DNS首选填192.168.1.11本机备选填192.168.1.10另一台DC。DC3以此类推。为什么不把备选填成第三方DNS或者公共DNS因为AD域环境要求DNS解析必须使用AD集成的DNS区域一旦DC查询的DNS不是域内DNSSRV记录就找不到域控之间无法正常复制客户端加域、登录全部会出问题。网上有人把DC网卡DNS填成114.114.114.114结果加域失败查了一天才发现是这个问题。多DC环境下DNS服务本身要启用“Active Directory集成区域”配合站点复制拓扑才能在故障转移时自动接管。这里提醒一句不要为了图省事把DC只保留一台DNSAD域环境中DNS和DC是强耦合的DNS坏了域也就崩了。3.6 Linux修改DNS后重启网络被还原的坑这个现象在Linux服务器上特别常见手动改了/etc/resolv.conf文件重启网络服务后改的内容消失了。原因是systemd-resolved或者NetworkManager接管了DNS配置你直接改resolv.conf只是改了软链接指向的临时文件重启时会被覆盖。正确做法取决于你的网络管理方式如果使用NetworkManager用nmcli命令修改nmcli con mod 连接名 ipv4.dns 223.5.5.5 119.29.29.29然后nmcli con up 连接名生效。如果使用systemd-networkd在/etc/systemd/network/下的网卡配置文件中添加DNS223.5.5.5。如果服务器是纯手工管理网络确认resolv.conf不被其他服务覆盖可以将该文件设为i属性chattr i /etc/resolv.conf但这招比较野不太建议常规使用。4. 终端侧DNS问题排查手册从“打不开网页”到“解析慢”4.1 Windows 11 DNS解析异常常见场景与对应解法Windows 11下DNS问题多到能单独写本书但高频的场景无非以下几类第一类浏览器报“无法找到DNS地址”。先用ping测试域名能不能解析比如ping www.baidu.com如果提示找不到主机说明本机DNS配置或缓存有问题。依次执行ipconfig /flushdns、ipconfig /release、ipconfig /renew然后重置网络栈netsh winsock reset。多数情况到这步就解决了。第二类微信能上但网页打不开。这种大概率是DNS设置中IPv6地址造成的。有些场景下IPv6的DNS服务器不通浏览器尝试走IPv6解析超时后切回IPv4但切换逻辑在某些浏览器上做得并不好就表现为“部分应用能用网页不行”。在网卡属性里把IPv6的DNS留空或者直接关掉IPv6选项一般能解决。第三类DNS Client服务导致的卡死。关键词里有“dns client events1012打开网页电脑卡死”这是Windows事件查看器里记录的一个经典报错。DNS Client服务事件ID 1012表示“DNS客户端无法解析名称”。常见原因是Windows的服务配置里DNS Client服务被禁用或者某个第三方安全软件劫持了DNS。处理方式winR输入services.msc找到DNS Client确认启动类型是“自动”状态是“正在运行”。4.2 一个DNS解析把电脑搞卡死的可疑案例那种“打开网页电脑直接卡死”的现象严格来说已经超出IDE的范畴但诱因往往还是DNS。前两年帮人排查过一起Windows主机打开一个网页后整个系统无响应进程管理器里DNS Client服务CPU占用100%大量SVCHOST进程异常。查了一圈发现系统里装了一个不明来源的“加速器”软件它在系统层挂了一个NDIS驱动劫持所有DNS请求驱动和操作系统的兼容性出问题后直接造成系统卡死。处理步骤是安全模式下禁用可疑驱动清掉第三方网络过滤驱动然后重置DNS缓存和网络组件。这里我不点名具体软件只想提醒一句DNS层面能做的事情是有限的如果Windows出现了系统级的卡死优先怀疑驱动劫持和杀软冲突而不是DNS服务器本身。4.3 Windows虚拟机DNS只能手动设置才能上网关键词里有“windows虚拟机dns上网只能手动设置dns”这属于虚拟网络环境里的常见问题。典型现象是虚拟机的DHCP能拿到IP地址但拿不到DNS服务器或者拿到的DNS是网关地址但解析不通。原因通常是虚拟交换机或NAT网卡的DHCP服务没有正确下发DNS选项。排查思路在虚拟机里用ipconfig /all看DHCP是否拿到了DNS服务器地址。如果没拿到检查宿主机虚拟网络编辑器中的NAT设置确认DNS服务器地址是否正确填写。如果拿到了但是解析不了在虚拟机里ping一下DNS服务器IP看网络层是否可达。如果网关和DNS是同一个IP常见于家用路由器检查路由器是否启用了DNS代理功能部分路由器默认配置下不会转发来自虚拟网段的DNS请求。实在地说这种情况下“手动设置DNS”不是权宜之计而是最干净利落的解法。虚拟机网络不同于物理网络很多虚拟化产品对DHCP的DNS下发支持本身就有限手动指定223.5.5.5或者网关地址基本能稳定上网。4.4 Linux下查看DNS和测试解析的实用命令在Linux上排查DNS问题几个命令要熟练cat /etc/resolv.conf查看当前DNS配置。dig baidu.com完整的DNS查询工具能看到查询耗时、查询路径、返回的所有记录。nslookup baidu.com老牌命令精简结果输出。host baidu.com更简洁的域名解析工具。systemd-resolve --status查看systemd-resolved生效的DNS配置。resolvectl status新版systemd系统上查看DNS状态。dig命令输出里的“Query time”能帮你判断解析速度“SERVER”显示实际响应的DNS服务器排查时这两个信息最有用。如果实际响应的服务器不是你配置的服务器多半是本地有DNS劫持或者路由器的DNS强制功能开启了。4.5 修改DNS后效果不稳定可能是运营商默认DNS在作怪很多人把电脑、路由器的DNS改了发现过一段时间又变回去了。这里面有两种情况值得注意第一种是路由器层面的DNS重写。现在很多光猫默认开启“DNS劫持”功能把所有DNS请求都重定向到运营商自己的服务器你在电脑上设置什么DNS都没用。这种情况下需要进入光猫后台把DHCP服务的DNS选项改掉或者把光猫改成桥接模式用自己路由器来拨号。第二种是运营商DNS服务器本身的解析质量问题。热词里专门提到了“西安联通运营商dns服务器地址”——不同地区、不同运营商的DNS服务器质量和稳定性差异真的很大。有的运营商DNS会出现部分域名解析超时、结果不更新的情况这不是你电脑的问题是上游DNS的问题。判断方法很简单Windows下运行nslookup www.baidu.com 8.8.8.8如果指定公共DNS能正常解析而用运营商DNS解析失败那就说明问题出在运营商的DNS上。这时候换用公共DNS是合理的解决方案国内可以优先选223.5.5.5阿里、119.29.29.29腾讯、1.2.4.8CNNIC这些节点。实际对比下来不同地区的延迟不太一样没有绝对“最好”的DNS建议多测几个再定。4.6 Chrome浏览器无法找到DNS的特例排查谷歌Chrome报了“无法找到DNS地址”除了系统级DNS故障外还有几个浏览器特有的原因Chrome内置了“安全DNS”功能开启后会使用DoHDNS over HTTPS解析如果DoH服务器连接不稳定即使系统DNS是好的浏览器依然打不开网页。解决方法进入chrome://settings/security关闭“使用安全DNS”。浏览器扩展清了DNS缓存比如某些去广告扩展把域名过滤规则误伤导致对应域名解析被屏蔽。Chrome的代理设置错误。检查启动参数或系统代理如果代理服务器本身无法解析DNS所有请求都会失败。这类问题的共同特征是换一个浏览器比如Firefox就能正常访问但Chrome不行。强烈建议直接重置Chrome的网络设置或者直接升级Chrome版本旧版本浏览器在DNS处理上确实有已知Bug。5. 进阶实践无线场景、物联网设备和光猫NAT引发的DNS延迟5.1 光猫路由NAT模式下DNS延迟高的根因很多家庭的网络拓扑是“光猫拨号 路由器WAN口接入”的二级NAT模式。光猫开启路由和NAT后内网设备通过DHCP获取的DNS地址通常是光猫的LAN口地址比如192.168.1.1再由光猫把DNS请求转发给运营商DNS服务器。这个过程中光猫的DNS缓存功能如果性能不行或者光猫和路由器之间网络质量差就会造成明显的DNS解析延迟。有些光猫的DNS处理机制很蹩脚对每个DNS请求都要建立一个新的连接表项还附带无谓的延迟。体感就是“打开网页要转圈好几秒但一旦打开就很快”。优化手段有不少在光猫后台把DHCP下发的DNS改成运营商的DNS服务器地址或者公共DNS地址跳过光猫的DNS转发层。如果不想动光猫就禁用自己的路由器WAN口自动获取DNS改成手动指定然后让路由器作为网关给内网设备下发手动DNS。更极端的做法是光猫改桥接用路由器来拨号这样DNS处理逻辑完全由路由器接管延迟通常能降下来。5.2 物联网设备该用IP直连还是DNS解析这个问题在我接触的IoT项目里被问过很多次回答不能太绝对。设备数量少、网络结构固定的小场景IP直连完全够用还省了DNS查询的开销和故障点。但如果设备数量上来了或者网络有冗余切换、动态IP分配的可能依赖IP直连会变成维护噩梦——某台后台服务器的IP变了你得跑到几十甚至上百台设备上调配置。我的实践经验是网关设备和摄像头这类需要稳定访问的用DNS解析更省心。前提是DNS服务器本身要足够可靠最好做一主一备。理由有三点设备支持域名解析后后台服务器迁移只改DNS记录不用逐台设备改配置。内网DNS可以配合DHCP下发设备接入即生效无需手工配置。出现单点故障时DNS的多个A记录可以实现简单的负载均衡和故障切换。但如果你是做嵌入式开发的要注意设备的DNS客户端实现质量参差不齐。有些低端模块的DNS解析超时重试机制做得很差一次DNS故障可能导致设备长时间无法恢复网络请求。所以对这类设备额外设计一个缓存策略是值得的设备启动时解析一次域名缓存到本地定期刷新DNS故障时使用最后一次成功的结果。5.3 ensp模拟器里搭建DHCP和DNS拓扑的玩法关键词里出现“ensp搭建dhcp dns网络拓扑”华为的网络模拟器确实很适合网络初学者练手。简单说下思路在eNSP里拖一台路由器、一台交换机和两台PC路由器配置接口IP和DHCP服务同时配置DNS转发。PC设置为DHCP自动获取验证PC能获取到IP且DNS解析正常。步骤大致是路由器接口配置IP进入系统视图。配置DHCP地址池dhcp server ip-pool 1network 192.168.1.0 mask 255.255.255.0gateway-list 192.168.1.1dns-list 223.5.5.5。PC自动获取后用ping测试IP连通性再用浏览器或命令行模拟访问域名验证DNS。这个拓扑虽然简单但很适合理解“DHCP下发DNS参数”这个逻辑。很多人以为DHCP只管IP分配其实DHCP的option字段里同时承载了网关、DNS、租期等信息这些参数是设备上网的完整配置包。5.4 麒麟系统上装DNS服务信创环境的迁移经验再补充一个实际场景某机房从CentOS整体迁移到麒麟系统其中DNS服务器也要跟着迁。麒麟基于Linux内核BIND部署本身没问题但有个细节容易忽略麒麟系统的MATE或UKUI桌面环境默认开机可能会启动NetworkManager它同样会管理resolv.conf和BIND的配置可能有冲突。建议是在麒麟服务器上明确停掉NetworkManager固定用systemctl管理网络同时给resolv.conf加只读属性。另外信创环境对软件包管理有自己的源确保bind的包版本足够新老版本BIND在新内核上有时会出现coredump。通过麒麟系统的“软件商店”或yum源安装bind后再用ss -lntup | grep 53确认监听状态就能稳定运行。5.5 好用的DNS怎么选延迟、安全性和附加功能说到“好用的DNS”先得定义什么是“好用”。对普通用户来说核心指标是解析速度和稳定性所以测试只能作为参考直观感受最准。我常用的测试方法是用一个脚本循环解析同一个域名100次统计平均响应时间和丢包比例再对比不同DNS的差异。对安全要求高的场景就要启用DNS加密和过滤能力。安卓和iOS新版本都支持DoTDNS over TLS和DoHWindows 11原生支持部分加密DNS功能。企业网络建议在防火墙上部署基于DNS的过滤策略防恶意域名请求这正好呼应了热词里的“恶意dns域名检测系统设计与实现”——后续单独写一篇具体的检测方案这里先铺垫一下。5.6 恶意DNS域名检测一个入门级的实现思路最后简单聊聊恶意DNS域名检测。现在很多钓鱼、勒索、僵尸网络攻击第一步都是让受害机器去访问一个恶意外部域名通过DNS请求交互。如果能对DNS流量做分析在解析阶段就拦截恶意域名攻击者的第一步就直接被卡住了。入门级的检测思路分两步第一步是采集数据。在DNS服务器上开启查询日志BIND的logging配置或者用旁路端口镜像抓取53端口的流量。日志至少需要记录客户端IP、查询域名、响应IP、查询时间。第二步是检测分析。基本手段包括黑名单匹配用公开的恶意域名库如各类威胁情报源做比对命中即告警。异常特征分析对域名长度、字符组成、连续字母数字比例做统计分析生成可疑域名。比如大多数正常域名不超过30个字符而DGA算法生成的域名往往又长又杂乱。高频域名监控统计单位时间内同一客户端请求的不同域名数量如果短时间内请求了几百个解析失败的域名大概率是中招了在跑DGA。这套系统的设计并不复杂真正复杂的是恶意域名的持续更新和误报消减。实际做的时候不要一开始就追求大而全先在现有DNS日志上做几个简单的检测规则跑起来比空谈架构有价值得多。6. DNS这条线值得被认真对待从协议原理到服务搭建从Windows的现场问题到企业AD域的架构细节再到物联网和模拟器的实践场景DNS这条线铺开之后牵扯到的点远比想象中多。我在写这篇文章的时候回忆了一下自己踩过的坑改TTL没生效差点把业务切换搞砸、DC网卡DNS填了公共DNS导致加域失败、路由器开DNS代理后所有终端解析异常……每一个问题背后的原因在道理上都简单但遇到问题时焦头烂额的程度一点不比其他故障低。我个人在实际操作中体会最深的一件事是DNS问题的排查顺序决定了效率一定是先查本机配置再看系统缓存再测上游连通性最后才怀疑服务本身。很多人上来就重启DNS服务或者直接改配置反而把简单问题复杂化了。另外无论内网还是外网DNS的监控和告警一定要做解析失败的曲线往往比CPU和内存更能提前暴露网络故障。如果你现在正被某个DNS问题困住不妨先把文章里提到的运行命令和排查思路过一遍多数场景都能当场解决。如果这篇文章里提到的场景和你的遭遇有重叠欢迎把细节写下来踩过的坑记录下来对别人来说是很有价值的参考资料。网络里的导航员不好当但搞清楚它的原理你的网络会少很多莫名其妙的折腾。
返回列表