Debian 11,我遇到了互联网连接不可用的问题,并且 ping 无法解析域名。该/etc/resolv.conf
文件不断被 NetworkManager 覆盖,重新启动后它包含
# Generated by NetworkManager
nameserver ::1
我resolv.conf
通过添加条目来编辑文件
# Generated by NetworkManager
nameserver 8.8.8.8
但这种变化并不持久,重启后就会消失。我过去没有遇到过这个问题,我相信它是在使用 VPN 和 TOR 浏览器后出现的。如何解决这个问题?
编辑:我安装了resolvconf
工具,重新启动,但没有更改:
~$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "resolvectl status" to see details about the actual nameservers.
nameserver ::1
~$ resolvectl status
Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.
编辑 2:有两个活动网络连接,一个是路由器,第二个似乎来自 VPN 服务:
~$ nmcli c show TRENDnet752 | grep -i -e name_servers -e dns
connection.mdns: -1 (default)
ipv4.dns: 8.8.8.8
ipv4.dns-search: --
ipv4.dns-options: --
ipv4.dns-priority: 0
ipv4.ignore-auto-dns: yes
ipv6.dns: --
ipv6.dns-search: --
ipv6.dns-options: --
ipv6.dns-priority: 0
ipv6.ignore-auto-dns: no
IP4.DNS[1]: 8.8.8.8
~$ nmcli c show pvpn-ipv6leak-protection | grep -i -e name_servers -e dns
connection.mdns: -1 (default)
ipv4.dns: --
ipv4.dns-search: --
ipv4.dns-options: --
ipv4.dns-priority: 0
ipv4.ignore-auto-dns: no
ipv6.dns: ::1
ipv6.dns-search: --
ipv6.dns-options: --
ipv6.dns-priority: -1400
ipv6.ignore-auto-dns: yes
IP6.DNS[1]: ::1
编辑 3.我设法使用以下步骤解决了该问题:
sudo systemctl status resolvconf.service
(“Active: active (exited)” message)
Opened the head file:
sudo nano /etc/resolvconf/resolv.conf.d/head
Entered nameservers and saved:
nameserver 8.8.8.8
nameserver 8.8.4.4
Then updated resolv.conf to use the new nameservers:
sudo resolvconf --enable-updates
sudo resolvconf -u
答案1
由于所有 DNS 配置信息显然都来自 NetworkManager,因此下一步是调查 NetworkManager 设置。
首先,使用nmcli c
(c
是“connection/s”的简写)查看已配置的连接列表。如果您有彩色终端,则活动连接将显示为绿色。记下活动连接的名称。
然后,对于每个活动连接,运行:
nmcli c show <connection name here> | grep -i -e name_servers -e dns
替换<connection name here>
为您的活动连接的名称(如果您有多个活动连接,则一次一个)。您将看到与每个连接关联的所有 DNS 相关设置。应该::1
在那里可见。小写名称的设置应来自 NetworkManager 配置;具有大写名称的设置应由 DHCP 或某些其他自动配置机制生成(例如来自可选附加到 IPv6 路由器咨询数据包的 DNS 解析器信息)。
了解值为 的 NetworkManager DNS 设置的确切名称::1
应该可以帮助您(以及我们)确定该设置的实际来源。
在 Debian 中,NetworkManager 可以从三个地方获取其本地配置:
- 经典 Debian 中的只读
/etc/network/interfaces
- 从文件中
/etc/NetworkManager/system-connections
- 来自针对每个用户设置的桌面环境特定存储方法。
如果您发现::1
由自动配置机制指定(您找到一行显示例如IP6.DNS[1]: ::1
),您可以使用以下命令覆盖它:
nmcli c modify <connection name here> ipv6.ignore-auto-dns yes
这应该会使 DHCPv6 和基于路由器咨询的 IPv6 DNS 解析器自动配置在该连接上无效。然后您可以使用以下命令配置您选择的 DNS 服务器:
nmcli c modify <connection name here> +ipv4.dns 8.8.8.8
和/或
nmcli c modify <connection name here> +ipv6.dns 2001:4860:4860::8888
或者,如果您希望采用老式方式并让 NetworkManager 完全远离 DNS 解析设置,您可以添加一个名为/etc/NetworkManager/conf.d/DontTouchDNSResolution.conf
以下内容的文件:
[main]
dns=none
systemd-resolved=false
之后,您可以(并且必须)/etc/resolv.conf
手动配置。
答案2
我在 debian 11 上使用 ProtonVPN 客户端后遇到了上述问题。问题是/etc/NetworkManager/system-connections/
文件pvpn-ipv6leak-protection.nmconnection
在重新启动后仍然存在。删除此文件并重新启动网络解决了该问题。
我能够通过打开与客户端的 VPN 连接来重现该问题,但随后关闭客户端而不显式断开接口中的 VPN 隧道,然后重新启动主机。