You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 22.04下部分域名DNS解析失败的问题排查及修复求助

Ubuntu 22.04下部分域名DNS解析失败的问题排查及修复求助

我最近碰到个特别诡异的问题:用Ubuntu上的Firefox访问部分网站时,要么图片加载不出来,甚至有个网站直接连不上,但换Windows 11上的同版本Firefox(同一4G网络、同样配置了OpenDNS)就完全正常。

排查后发现不是浏览器的锅——用nslookup或者dig测试,Ubuntu这边确实解析失败那些出问题的域名。常用站点比如谷歌、油管都没问题,就俩网站出状况,虽然不影响日常,但实在搞不懂:同网络同DNS设置,为啥Linux发的请求就解析失败?

下面给你几个排查和修复的思路,都是实际运维中常用的方法:

一、先确认系统实际在用的DNS服务器

有时候咱们手动设置的DNS可能没生效,被系统的NetworkManager或者systemd-resolved给“偷偷替换”了。你可以跑这俩命令查一下当前实际生效的DNS:

# 查看systemd-resolved配置的DNS
systemd-resolve --status | grep "DNS Servers"
# 查看resolv.conf里的实际DNS
cat /etc/resolv.conf

要是显示的不是OpenDNS的IP(通常是208.67.222.222和208.67.220.220),那说明系统没走你配置的DNS,得先把这个问题解决——比如检查NetworkManager的DNS设置,或者确保systemd-resolved没有覆盖你的配置。

二、抓包对比DNS请求的差异

既然Windows能成功、Ubuntu不行,那抓个包看看两者的DNS请求到底有啥不一样。在Ubuntu上用tcpdump抓DNS流量:

sudo tcpdump -i any port 53 -w dns_failure.pcap

然后访问那个出问题的网站,等个几秒按Ctrl+C停止抓包。之后用Wireshark打开这个pcap文件,重点看:

  • DNS请求有没有正常发出去?
  • DNS服务器有没有回应?
  • 请求的EDNS0参数、TTL值这些和Windows上的请求有没有差异?
    有些DNS服务器会对不同操作系统的请求做特殊处理(虽然少见,但真的存在),抓包能帮你揪出细节。

三、直接指定DNS服务器测试

试试跳过系统默认的DNS配置,直接用OpenDNS服务器解析出问题的域名:

dig @208.67.222.222 你的问题域名.com
nslookup 你的问题域名.com 208.67.222.222

如果这样能成功,那说明系统的DNS转发或者缓存出问题了;要是还是失败,那试试换个公共DNS比如Cloudflare(1.1.1.1)或者谷歌DNS(8.8.8.8)再测:

dig @1.1.1.1 你的问题域名.com

如果换DNS能成功,那大概率是OpenDNS那边对Linux的请求有过滤规则,要么换个DNS用,要么联系OpenDNS客服问问情况。

四、清理DNS缓存+检查本地hosts

Ubuntu默认用systemd-resolved做DNS缓存,先清一下缓存试试:

sudo systemd-resolve --flush-caches

另外检查下/etc/hosts文件有没有误加那个问题域名的错误解析:

cat /etc/hosts | grep 你的问题域名.com

要是有相关条目,删掉就行。

五、测试不同的DNS解析参数

有些Linux系统的DNS解析会用到EDNS0扩展,部分DNS服务器可能对这个扩展的支持有问题。试试用dig加上不同参数测试:

# 启用EDNS0
dig +edns=0 你的问题域名.com
# 禁用EDNS0
dig +noedns 你的问题域名.com

如果某个参数下能成功解析,那可以配置systemd-resolved强制使用这个参数——比如编辑/etc/systemd/resolved.conf,添加DNSSEC=no或者EDNS0=no,然后重启服务:

sudo systemctl restart systemd-resolved

要是上面的步骤都试过还是没头绪,建议把dig失败的完整输出(包括Windows上成功的输出)贴出来,或者把tcpdump抓包的关键信息(敏感内容打码)放上来,这样更容易定位问题。

备注:内容来源于stack exchange,提问作者Marco

火山引擎 最新活动