Tho*_*mas 13 upgrade networking internet dns 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
Run Code Online (Sandbox Code Playgroud)
我还尝试在网络管理器中手动添加8.8.8.8DNS 服务器(WiFi 设置 -> IPv4 -> DNS)。然后,两台服务器都显示在 DNS 配置中,但问题仍然存在。
知道原因可能是什么,我可以做什么来缩小问题范围或如何解决它?
Tho*_*mas 10
正如此答案和此答案中所指出的,解决方案(至少在我的情况下)是一个/etc/resolv.conf仅包含注释行“由 NetworkManager 生成”的问题。用符号链接替换该文件来/run/resolvconf/resolv.conf解决我的问题:
sudo rm -f /etc/resolv.conf
sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
这似乎是由 Ubuntu 22.04 期望通过 netplan 配置引起的。Netplan 配置是在全新安装时创建的,但如果您有升级的系统,则不存在必要的配置。
如果您的系统上没有配置文件(选中ls /etc/netplan/*.yaml),您将不会获得默认配置的 DNS 解析器。
所有覆盖systemd-resolved服务单元或/etc/resolv.conf直接覆盖的黑客建议都只是掩盖了症状。
您的系统上可能(应该)存在的可能文件 -根据需要运行ip a并替换值和设备名称:ip r
由 subiquity 创建的默认通用配置可能就足够了,除非您有特定需求
/etc/netplan/00-installer-config.yaml
network:
ethernets:
eno1:
dhcp4: true
version: 2
Run Code Online (Sandbox Code Playgroud)
具有硬编码 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]
Run Code Online (Sandbox Code Playgroud)
债券设置示例
/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]
Run Code Online (Sandbox Code Playgroud)
之后运行netplan apply以确保您仍然具有连接性(在没有其他访问权限的服务器上运行此程序时要小心!)或重新启动。
小智 6
对我来说,问题在于它/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 Code Online (Sandbox Code Playgroud)
第一行包括一个守卫,因此如果您由于某种原因没有守卫,整个操作将会失败/run/systemd/resolve/resolv.conf。希望这可以帮助!