Ubuntu 20.04 server不能ping,提示“Temporary failure in name resolution”的解决方法

本文记录了一位用户在Ubuntu 20.04服务器上遇到的DNS解析问题,即无法通过域名ping通但能通过IP。经过多次尝试,包括修改netplan配置文件、创建resolv.conf文件和调整systemd-resolved.conf文件,最终发现只需重启systemd-resolved.service服务即可临时解决。问题在于服务未设置为开机启动,因此建议将其加入开机启动项,以确保系统重启后DNS解析正常。同时,文章提供了查看DNS服务器的方法和相关参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装了虚拟机,发现不能 ping 域名,如 ping qq.com,提示 Temporary failure in name resolution。但可以 可以 ping ip, 如:ping 8.8.8.8

问题类似于:【Ubuntu 20.04 server: Temporary failure in name resolution (LAN only)】


1、相关尝试

1-1、修改 /etc/netplan/00-installer-config.yaml 文件

  • 修改 sudo vim /etc/netplan/00-installer-config.yaml文件,新增 nameservers 相关配置(如下图) ,文件名不一定是 00-installer-config.yaml,每一个机器不一样,需要通过ll /etc/netplan/ 命令查看该路径下的文件。
    在这里插入图片描述
  • 修改该文件后,执行 sudo netplan apply命令,仍不能ping,未能解决问题

1-2、创建配置文件 /etc/resolv.conf

  • 使用 sudo vim /etc/resolv.conf,打开文件后,写入后,不能保存
  • 使用 sudo touch /etc/resolv.conf先创建该文件,不能创建

1-3、修改 /etc/systemd/resolved.conf 文件

该方法参考的是: How to configure systemd-resolved and systemd-networkd to use local DNS server for resolving local domains and remote DNS server for remote domains?

  • sudo vim /etc/systemd/resolved.conf命令打开文件,之后修改

    [Resolve]
    DNS=8.8.8.8
    
  • 修改完后,重启相关服务,依次执行如下命令

    sudo systemctl daemon-reload
    sudo systemctl restart systemd-networkd.service
    sudo systemctl restart systemd-resolved.service
    
  • 经过如上设置,之后可以ping,但该方法重启后失效。。。再次执行 sudo systemctl restart systemd-resolved.service, 即可工作。

  • 由于为什么这么设置后可以解决DNS解析问题,所以有了自己探索过程:

    • 1、经过测试,发现不用配置 /etc/systemd/resolved.conf 文件,直接键入 sudo systemctl restart systemd-resolved.service命令,也能工作(不知道是否和 /etc/netplan/00-installer-config.yaml文件的修改有关)
    • 2、经过测试, /etc/netplan/00-installer-config.yaml 文件的修改是否都无关系,重启后,如果不能ping,执行 sudo systemctl restart systemd-resolved.service 命令即可
    • 3、查看域名服务器方法中,提到了cat /etc/resolv.conf方法,执行该方法,发现有该文件了(但1-2中尝试过自己创建,不能创建)
      • 此时,其原理大概清楚了,因为重启后,/etc/resolv.conf文件被删除了,所以每次重启都需要执行该命令。
        • 通过如下流程定位,可以确认,系统重启时,该服务未启动,可以将其加入开机启动项中(就可实现不用每次重启都需启动的操作)
          在这里插入图片描述

2、最终解决方案

执行 sudo systemctl restart systemd-resolved.service 命令。

  • 使用restartstart都可
  • 系统重启时,该服务未启动,可以将其加入开机启动项中(就可实现不用每次重启都需启动的操作)

注:
1、该命令每次都需要重启。
2、可以通过 man systemd-resolved,或者通过 systemd-resolved.service了解其详细介绍

3、DNS Server查看方法

refer: What DNS servers am I using?

查看当前 DNS相关配置(如下命令都可)

  • cat /etc/resolv.conf
  • resolvectl status
  • dig qq.com, 查看最后几行
    在这里插入图片描述

4、reference

### DNS解析失败问题分析 当执行`ping baidu.com`命令时遇到“Temporary failure in name resolution”的错误提示,表明系统无法将域名转换成IP地址。这通常是因为DNS服务器配置不正确或不可达。 对于Ubuntu 20.04 LTS环境,在虚拟机内尝试通过编辑 `/etc/resolv.conf` 文件来指定Google的公共DNS (8.8.8.8),如果该方法未能解决问题,则可能涉及到更深层次的原因[^3]。 ### 修改虚拟机网络设置 一种有效的解决办法是调整虚拟机中的网络适配器配置: 1. 打开 VMware Workstation 的图形界面; 2. 对目标虚拟机进行操作前先暂停其运行状态; 3. 寻找并点击菜单栏上的 “VM” -> “Settings...”,打开设置窗口; 4. 切换到左侧列表里的 "Network Adapter"(网络适配器)选项卡; 5. 将右侧的联网方式改为 NAT 模式,并应用更改; 完成上述步骤之后重新启动虚拟机内的操作系统,再次测试能否正常访问外部网站。 另外值得注意的是,有时即使是在物理主机上能够顺利上网的情况下,由于某些特定原因也可能导致虚拟环境中出现此类情况。因此除了检查虚拟机自身的网络参数外,还应该考虑宿主机端是否存在防火墙或其他安全策略阻止了必要的通信请求。 ```bash # 测试连通性的简单脚本 #!/bin/bash if ping -c 1 www.baidu.com &> /dev/null; then echo "成功连接至百度" else echo "仍然存在连接问题,请进一步排查其他可能性" fi ``` ### 验证DNS服务可用性 为了确保问题是出在DNS解析环节而非其他方面,可以通过替换不同的DNS服务器来进行验证。例如使用Cloudflare提供的免费公共DNS `1.1.1.1` 或者阿里云DNS `223.5.5.5` 来代替默认的选择。 ```bash sudo sed -i 's/^nameserver.*$/nameserver 1.1.1.1/' /etc/resolv.conf ``` 此命令会直接修改现有的 nameserver 记录为 Cloudflare 提供的服务。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值