公司动态
Linux 中DNS更新流程
1. Linux处理流程1NetworkManager负责监听网络状态比如你连上了 Wi-Fi。2它通过 DHCP 从路由器拿到 IP 和 DNS 后不会直接去乱改/etc/resolv.conf。3相反它把这些 DNS 地址交给了systemd-resolved。4systemd-resolved把自己设为本地代理即127.0.0.53然后把从 NetworkManager 那里收到的真实 DNS 地址比如路由器的或者公共 DNS记在自己的后台里。5/etc/resolv.conf此时只是一个软链接稳稳地指向systemd-resolved的存根文件内容永远是nameserver 127.0.0.53。命令cat/etc/resolv.conf1.1 整体查询流程当你尝试访问一个网站比如google.com时路径是这样的你的应用/浏览器发起 DNS 请求。请求发送给本地的127.0.0.53(/etc/resolv.conf指定的。systemd-resolved收到后通过你的网卡ens16np0转发给真正的 DNS 服务器10.72.66.37。10.72.66.37返回结果再经由本地代理传回给你的应用程序2. 查看systemd-resolvedsystemctl status systemd-resolved2.1 resolvectl命令命令resolvectl查看上游的DNS从DHCP服务器获取到的上游的DNS服务器地址10.72.66.37。这样再去访问github.com时返回一个私有的局域网地址172.18.0.35。这个地址是错误的。2.2 重启服务# 重启服务sudo systemctl restart systemd-resolved# 清除 DNS 缓存sudo resolvectl flush-caches3. 查询DNS命令nslookup name server lookup是一个用于查询 DNS域名系统记录的网络管理命令行工具。它可以用来诊断域名解析是否正常。3.1 默认dnsnslookup github.com命令nslookup github.com作用系统会默认使用当前连接的网络比如路由器或公司的 DNS去查询结果。172.18.0.35是一个私有的局域网地址。3.2 指定dnsnslookup github.com 223.5.5.5命令nslookup github.com 223.5.5.5作用指定使用阿里云的公共 DNS 服务器IP地址为223.5.5.5去查询域名github.com的 IP 地址解析记录。20.205.243.166是一个公网的地址。如果换个dns就能访问就说明是dns的问题。3.3 修复DNS的方法3.3.1 修改resolved.confvim /etc/systemd/resolved.conf修改为[Resolve]DNS223.5.5.5 119.29.29.29FallbackDNS8.8.8.8 1.1.1.13.3.2 重启服务并清理缓存# 重启服务sudo systemctl restart systemd-resolved# 清除本地 DNS 缓存sudo resolvectl flush-caches