Ubuntu 22.04.1 名称服务器不断被覆盖

Ubuntu 22.04.1 名称服务器不断被覆盖

我昨天从 Ubuntu 20.04 升级到了 22.04.1。

现在,每当我重新打开 WiFi(从暂时关闭状态)时,都无法访问互联网。

我检查了:

ls -lah /etc/resolv.conf
lrwxrwxrwx 1 root root 28 Feb  7 14:24 /etc/resolv.conf -> /opt/valet-linux/resolv.conf 
cat /etc/resolv.conf

search attlocal.net
nameserver 127.0.0.1

然后我做出改变:

sudo vim /opt/valet-linux/resolv.conf
cat /opt/valet-linux/resolv.conf

nameserver 8.8.8.8

然后互联网又可以正常工作了。

但如果我关闭 Wi-Fi 然后重新打开,该文件就会再次被重置。

我已经尝试过了:

DNS

和:

cat /etc/netplan/01-network-manager-all.yaml 
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    eth0:
      nameservers:
        addresses:
        - 8.8.8.8
        - 8.8.4.4

https://linuxize.com/post/how-to-set-dns-nameservers-on-ubuntu-18-04/以及 AskUbuntu 和 StackOverflow 上的无数帖子。

我也尝试过:

cat /etc/dhcp/dhclient.conf
...
# https://stackoverflow.com/a/48652642/470749
supersede domain-name-servers 8.8.8.8;

https://stackoverflow.com/a/48652642/470749

什么都不起作用。我对 Ubuntu 失去了耐心。

我到底做了什么事让自己陷入这种困境?谢谢。

答案1

只能有一个写入/管理的条目/etc/resolv.conf

例如,NetworkManager或者人工管理员。还有resolvconf,这是一个接受多个 DNS 配置源,然后将它们合并为一个的工具/etc/resolv.conf

默认情况下,NetworkManager 使用[main].rc-manager=symlink设置运行。请参阅man NetworkManager.conf。除非您更改了该配置,否则 NetworkManager 不会触碰该文件。另请参阅有关[main].dns=设置。

一般来说,您需要决定应该如何配置它,然后配置所有相关软件以达成一致。由于 NetworkManager 默认已经保留该文件,因此如果它是符号链接,您无需告诉 NetworkManager 保持关闭状态。

如果您使用其中一个 GUI 配置 DNS,那么这些 GUI 实际上会在 NetworkManager 中配置配置文件。这仅在 NetworkManager 被指示写入时才有效/etc/resolv.conf

通常systemd-resolved使用。Resolved 不会写入/etc/resolv.conf,但它可以将其用作输入。如果使用它,通常/etc/resolv.conf应该只是一个符号链接,如/ETC/RESOLV.CONF中的部分所述man systemd-resolved。在这种情况下,NetworkManager 可以将其 DNS 配置推送到systemd-resolved。运行resolvectl以查看 中的配置systemd-resolved

更改/etc/dhcp/dhclient.conf似乎非常错误。特别是如果您使用 NetworkManager,默认情况下不使用 dhclient。无论如何,在 DHCP 客户端中注入 DNS 设置是不对的。在 NetworkManager 中,您可以通过在 NetworkManager 的连接配置文件中设置 DNS 来配置 DNS(+ 设置您的系统和 NetworkManager 以使用这些设置执行正确的操作)。

没有唯一的答案,因为这取决于你到底想如何设置你的系统。通常你会坚持使用你的发行版为你提供的功能。了解你的发行版设置的目的是什么,并在那种情况下使用适当的机制。谁创建了/etc/resolv.conf符号链接,为什么这样做?(NetworkManager 和 systemd-resolved 都不会这样做)。

答案2

由于我多年没有使用过 valet-linux,我已经完全忘记了它,甚至不认识它的名字。

感谢@chili555 的评论,指出了我甚至没有注意到的不寻常之处。

我终于找到了https://github.com/cpriego/valet-linux/issues/115#issuecomment-1406379951,与以下命令结合使用(灵感来自https://cpriego.github.io/valet-linux/#uninstalling),似乎有效:

composer global remove cpriego/valet-linux
sudo rm -rf /opt/valet-linux/
sudo systemctl revert systemd-resolved
sudo systemctl restart systemd-resolved
sudo apt-get remove dnsmasq
sudo rm /etc/resolv.conf
sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
sudo systemctl stop valet-dns
sudo systemctl disable valet-dns
sudo rm /etc/systemd/system/valet-dns.service
sudo systemctl daemon-reload
sudo systemctl reset-failed
sudo systemctl restart NetworkManager

答案3

使用systemd-resolve而不是手动编辑resolve.conf

例如:

sudo systemd-resolve --interface wlp2s0 --set-dns 192.168.88.22 --set-domain yourdomain.local

答案4

在 /etc/wsl.conf 下添加以下内容 [network] generateResolvConf = false 然后重新启动并在 etc 下手动创建 resolv.conf 并添加 nameserver

名称服务器 8.8.8.8 名称服务器 xxxx

相关内容