Ubuntu 22.04 Netplan DNS配置被覆盖问题求助
我完全懂你被Ubuntu这套DNS配置折腾得头大的感觉——从14.04到现在,netplan+systemd-resolved组合确实把原本简单的DNS设置搞复杂了,再碰上ISP这种不灵活的路由器,简直雪上加霜。咱们一步步拆解解决你的问题:
核心问题根源
你其实已经摸到了关键:虽然在netplan里关了DHCPv4,但默认DHCPv6是开启的!ISP路由器的IPv6 DHCP服务偷偷给你推送了额外的DNS服务器(那个2600开头的IPv6地址)和搜索域attlocal.net,导致systemd-resolved把这些配置和你手动设置的合并,甚至优先级更高,直接干扰了内部DNS的解析逻辑。
完整解决步骤
1. 彻底修正Netplan配置,禁用所有DHCP
编辑你的/etc/netplan/01_wired.yaml,确保同时禁用DHCPv4和DHCPv6,并且明确锁定DNS和搜索域:
network: renderer: networkd ethernets: eth_lan0: dhcp4: no dhcp6: no addresses: [192.168.1.12/24] gateway4: 192.168.1.254 nameservers: addresses: [192.168.1.2] search: [lovelady.com] optional: true match: macaddress: 90:2b:34:36:ae:bc set-name: eth0 version: 2
注意:yaml对缩进要求严格,每一层必须对齐;别忘加
version: 2,这是netplan的必填配置项。
然后应用配置:
sudo netplan generate && sudo netplan apply
2. 清理残留DHCP配置(解决attlocal.net残留问题)
你提到还有个00-installer-config.yaml,里面的eno1和enp6s0网卡开启了DHCPv4,这两个闲置网卡从DHCP获取的attlocal.net搜索域会被systemd-resolved保留下来。编辑这个文件,把这两个网卡的DHCP也关掉:
# This is the network config written by 'subiquity' network: ethernets: eno1: optional: true dhcp4: no enp6s0: optional: true dhcp4: no version: 2
再次应用配置:
sudo netplan apply
3. 重启systemd-resolved,确保配置生效
sudo systemctl restart systemd-resolved
现在用resolvectl status检查,应该只会看到你指定的192.168.1.2作为DNS服务器,搜索域也只有lovelady.com了。
4. 验证DNS解析
再测试dig velmicro,应该能直接返回正确的192.168.1.6;如果还是有问题,可以尝试绕过stub resolver,直接使用真实的resolv.conf:
# 备份当前链接 sudo mv /etc/resolv.conf /etc/resolv.conf.bak # 直接指向systemd-resolved的真实配置文件 sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf # 重启服务 sudo systemctl restart systemd-resolved
这样系统会直接使用你指定的DNS服务器,避免127.0.0.53 stub resolver带来的解析优先级问题。
最后碎碎念
Ubuntu这套DNS配置确实有点反直觉,尤其是默认开启的DHCPv6很容易被忽略。你已经找到了解决的核心(加dhcp6: no),剩下的就是清理残留的DHCP配置,确保所有网卡都遵循你手动指定的DNS规则。
备注:内容来源于stack exchange,提问作者Dennis




