我昨天从 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 然后重新打开,该文件就会再次被重置。
我已经尝试过了:
和:
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