升级到 22.04 后无法解析主机名

升级到 22.04 后无法解析主机名

将 ubuntu 从 21.10 升级到 22.04 后,我的互联网连接不再起作用。我已连接到 WLAN,并且可以 ping IP 地址(从本地网络以及互联网)- 但是,解析名称不再起作用。因此,ping 151.101.65.69在 0% 数据包丢失的情况下可以正常工作,但ping askubuntu.com会出现错误Name or service not known(它可以从连接到同一路由器的另一台机器上运行)。

运行 nmcli 时,它会显示以下 DNS 配置:

DNS configuration:
    servers: 192.168.17.1
    domains: fritz.box
    interface: wlp64s0

我还尝试8.8.8.8在网络管理器中手动添加 DNS 服务器(WiFi 设置 -> IPv4 -> DNS)。然后,两个服务器都显示在 DNS 配置中,但问题仍然存在。

知道可能是什么原因吗,我可以做些什么来缩小问题范围或如何解决它?

答案1

正如指出的那样这个答案以及这个答案,解决方案(至少在我的情况下)是/etc/resolv.conf仅包含注释掉的行“由 NetworkManager 生成”的问题。用符号链接替换该文件即可/run/resolvconf/resolv.conf解决问题:

sudo rm -f /etc/resolv.conf
sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf

答案2

这似乎是由于 Ubuntu 22.04 需要通过 netplan 进行配置而导致的。Netplan 配置是在全新安装时创建的,但如果您升级了系统,则不存在必要的配置。

如果您的系统上没有配置文件(检查ls /etc/netplan/*.yaml),您将不会获得默认配置的 DNS 解析器。

所有覆盖systemd-resolved服务单元或/etc/resolv.conf直接覆盖的黑客建议都只是掩盖症状。

您的系统上可能(应该)存在的文件 - 运行ip aip r根据需要替换值和设备名称:

由 subiquity 创建的默认通用配置可能就足够了,除非你有特殊需求
/etc/netplan/00-installer-config.yaml

network:
  ethernets:
    eno1:
      dhcp4: true
  version: 2

带有硬编码 IPv4、网关和 DNS 解析器的 LXD 容器配置
/etc/netplan/50-cloud-init.yaml

network:
  version: 2
  ethernets:
    eth0:
      addresses: [10.0.0.50/16]
      routes:
      - to: default
        via: 10.0.0.1
      nameservers:
        addresses: [10.0.0.11,10.0.0.12]

债券设置示例
/etc/netplan/01-netcfg.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: no
      dhcp6: no
    eno2:
      dhcp4: no
      dhcp6: no
  bonds:
    bond0:
      interfaces: [eno1,eno2]
      dhcp4: no
      dhcp6: no
      parameters:
        mode: 802.3ad
        mii-monitor-interval: 100
  bridges:
    br0:
      interfaces: [bond0]
      addresses: [10.0.0.100/16]
      routes:
      - to: default
        via: 10.0.0.1
      nameservers:
        addresses: [10.0.0.11,10.0.0.12]

之后运行netplan apply以确保您仍然具有连接(在您无权访问的服务器上运行此操作时请小心!)或重新启动。

答案3

对我来说,问题在于它/etc/resolv.conf链接到一个存根解析器(/run/systemd/resolve/stub-resolv.conf),而不是通常的解析器(/run/systemd/resolve/resolv.conf)。

检查符号链接的目标/etc/resolv.conf,看看你的目标是否相同。

我这样修复了这个问题:

ls /run/systemd/resolve/resolv.conf && sudo mv /etc/resolv.conf /etc/resolv.conf.bak
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved

第一行包含一个保护,因此如果出于某种原因您没有保护,整个操作将失败/run/systemd/resolve/resolv.conf。希望这能有所帮助!

答案4

我遇到了同样的问题。我将其追溯到 ifupdown/managed=false

/etc/NetworkManager/NetworkManager.conf

[ifupdown]
managed=false

将其更改为 true 即可解决问题。

相关内容