You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Ubuntu 22.04.2 LTS无法解析Windows DNS服务器配置的本地域名问题求助

Ubuntu 22.04.2 LTS无法解析Windows DNS服务器配置的本地域名问题求助

我先理清楚你的问题场景:你把Windows虚拟机配置成了DNS服务器,所有Ubuntu虚拟机都通过netplan指向这个DNS服务器,外网域名(比如google.com)解析完全正常,但Windows DNS上手动添加的本地域home.local下的A记录(172.0.1.45 nginx.home.local),在Ubuntu上死活解析不了,Windows本机却能正常ping通。

先把你的配置和测试信息整理出来方便参考:

Ubuntu的Netplan配置

$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      addresses:
        - 172.0.1.51/24
      nameservers:
        addresses:
          - 172.0.1.34
        search: []
      routes:
        - to: default
          via: 172.0.1.29
  version: 2

外网解析测试(正常)

$ ping google.com
PING google.com 56(84) bytes of data.
64 bytes from seu35a21-eu-g67.2e345.net: icmp_seq=1 ttl=107 time=27.4 ms
64 bytes from seu35a21-eu-g67.2e345.net: icmp_seq=2 ttl=107 time=26.6 ms
64 bytes from seu35a21-eu-g67.2e345.net: icmp_seq=3 ttl=107 time=26.7 ms

本地域名解析测试(失败)

$ ping nginx.home.local
ping: nginx.home.local: Temporary failure in name resolution

resolvectl状态(显示DNS服务器已正确配置)

$ resolvectl status
Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub

Link 2 (ens160)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 172.0.1.34
       DNS Servers: 172.0.1.34

接下来给你几个排查方向,按顺序试应该能找到问题:

  • 第一步:直接测试Windows DNS服务器的解析能力
    跳过Ubuntu本地的解析服务,直接用dig或者nslookup查询Windows DNS:

    dig @172.0.1.34 nginx.home.local
    # 或者用nslookup
    nslookup nginx.home.local 172.0.1.34
    

    如果这两个命令能返回正确的172.0.1.45,说明问题出在Ubuntu本地的解析服务(systemd-resolved);如果返回空或者错误,那就是Windows DNS的配置问题,比如zone权限、递归查询限制或者记录写错了。

  • 第二步:补全Netplan的search域配置
    你的Netplan里search: []是空的,虽然用的是完整FQDN,但systemd-resolved有时候需要search域来辅助解析。修改Netplan配置:

    nameservers:
      addresses:
        - 172.0.1.34
      search: [home.local]
    

    然后执行sudo netplan apply,再测试ping nginx.home.local。

  • 第三步:清空systemd-resolved缓存并检查域配置
    有时候resolved会缓存错误的解析结果,先清空缓存:

    sudo resolvectl flush-caches
    

    再检查当前网卡的域配置:

    resolvectl domain ens160
    

    如果没显示home.local,手动添加:

    sudo resolvectl domain ens160 home.local
    

    之后再测试解析。

  • 第四步:检查Windows DNS服务器的关键设置

    1. 确认home.local主要区域,不是辅助区域;
    2. 检查DNS服务器的“属性”->“高级”->“递归查询”是否允许,并且Ubuntu所在的172.0.1.0/24网段在“允许列表”里;
    3. 重新核对A记录的拼写和IP,确保没有笔误;
    4. 如果开启了动态更新,检查记录有没有被意外覆盖。
  • 第五步:排查Ubuntu防火墙
    虽然外网解析正常,但Ubuntu的ufw可能误拦截了DNS请求?临时关闭防火墙试试:

    sudo ufw disable
    

    如果能正常解析了,再重新开启防火墙并添加DNS允许规则:

    sudo ufw enable
    sudo ufw allow 53/tcp
    sudo ufw allow 53/udp
    

备注:内容来源于stack exchange,提问作者user89978

火山引擎 最新活动