为什么本地名称解析不起作用?

为什么本地名称解析不起作用?

我目前正在尝试解决异构网络(带有 Arch 的 Linux 服务器、Windows 客户端)中的问题。

现在的情况:

我有一个NAT 网关它运行 dnsmasq 作为 DNS 和 DHCP 服务器。它有 3 个接口(WAN、家庭、客户),具有不同的网络。接口通过 systemd-networkd 具有静态 IP。文件位于/etc/systemd/network/eth*.network

eth0 (广域网):

[Match]
Name=eth0

[Network]
Address=192.168.0.4/24
Gateway=192.168.0.254
DNS=192.168.0.254

eth1(来宾):

[Match]
Name=eth1

[Network]
Address=172.17.0.254/16

eth2 (主网):

[Match]
Name=eth2

[Network]
Address=172.16.0.254/16

nsswitch.conf看起来像这样:

# Name Service Switch configuration file.
# See nsswitch.conf(5) for details.

passwd: files mymachines systemd
group: files mymachines systemd
shadow: files

publickey: files

hosts: files mymachines myhostname resolve [!UNAVAIL=return] dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

netgroup: files

dnsmasq 设置如下:

domain-needed
bogus-priv
no-resolv
dhcp-sequential-ip

interface=lo
interface=eth1
interface=eth2
bind-interfaces

domain=local
expand-hosts
local=/local/

server=192.168.0.254
#server=8.8.8.8
#server=8.8.4.4

dhcp-range=eth1,172.17.2.1,172.17.2.200,255.255.0.0,168h
dhcp-range=eth2,172.16.2.1,172.16.2.200,255.255.0.0,168h
dhcp-option=eth1,3,172.17.0.254
dhcp-option=eth2,3,172.16.0.254
dhcp-option=eth1,6,172.17.0.254
dhcp-option=eth2,6,172.16.0.254

在...后面NAT 网关还有另一种路由器(192.168.0.254)它提供 DNS 服务。我在 172.16.0.1 (server01) 上有另一个 Linux 服务器。我/etc/hostsnat 网关像这样:

Static table lookup for hostnames.
# See hosts(5) for details.
127.0.0.1       localhost
172.16.0.254     server02
172.17.0.254     server02
192.168.0.4       server02
172.16.0.1     server01

/etc/resolv.conf上面没有写任何东西NAT 网关

我可以 pingwww.google.de或类似问题,可从我网络中的每个设备进行搜索,并能正常解析。如果我在 Linux 机器上使用任何主机名的 drill(无论它们是在本地主机还是在互联网上搜索),都会出现此错误:

错误:发送查询时出错:解析器中未定义(有效)名称服务器

如果我使用nslookup我的Linux 计算机它们超时了(无论是在本地主机还是在互联网上寻找)。

Ping www.google 成功。在 server01 上 Ping server02(或 server02.local、.lan 等)失败。

我在 server01 上使用 systemd-resolved 作为我的 dns 服务。server01 的接口配置如下:

[Match]
Name=eth0

[Network]
Address=172.16.0.1/16
Gateway=172.16.0.254
DNS=172.16.0.254

server01 上的 resolvectl 状态:

Global
       LLMNR setting: yes
MulticastDNS setting: yes
  DNSOverTLS setting: no
      DNSSEC setting: allow-downgrade
    DNSSEC supported: yes
Fallback DNS Servers: 1.1.1.1
                      9.9.9.10
                      8.8.8.8
                      2606:4700:4700::1111
                      2620:fe::10
                      2001:4860:4860::8888
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      18.172.in-addr.arpa
                      19.172.in-addr.arpa
                      20.172.in-addr.arpa
                      21.172.in-addr.arpa
                      22.172.in-addr.arpa
                      23.172.in-addr.arpa
                      24.172.in-addr.arpa
                      25.172.in-addr.arpa
                      26.172.in-addr.arpa
                      27.172.in-addr.arpa
                      28.172.in-addr.arpa
                      29.172.in-addr.arpa
                      30.172.in-addr.arpa
                      31.172.in-addr.arpa
                      corp
                      d.f.ip6.arpa
                      home
                      internal
                      intranet
                      lan
                      local
                      private
                      test

Link 2 (eth0)
      Current Scopes: DNS LLMNR/IPv4
DefaultRoute setting: yes
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: allow-downgrade
    DNSSEC supported: yes
  Current DNS Server: 172.16.0.254
         DNS Servers: 172.16.0.254

如果我使用nslookup我的Windows 计算机我获得了任何主机名(server01、server01.local 等)的解析(无论它们是本地的还是在互联网上)。如果我 ping server02,它无法解析。如果我 ping server02.local 或 server01.local,它就会解析。

我真的无法解释这种行为。我最好的猜测是,这与在我的网络中某个隐藏位置运行的另一个 DNS 服务器有关。但这肯定是一个客户端或其他什么,因为只有两个服务器,并且设置非常少。我寻找过在任何地方运行的 avahi-daemons,但我没有找到,或者我做错了。

有人能提示我去哪里解决我的问题吗?我最大的问题是我想通过主机名解析访问 server01 上的 samba 共享,但这行不通。

答案1

我有一个类似的 dnsmasq 设置,并且经过尝试,它只有在你添加在 dnsmasq 配置中设置的域时才会解析。--> domain=local expand-hosts local=/local/ 。经过大量研究,它将主机文件作为:name.domain 推送到 dnsmasq 配置中配置的 ip,但不是独立的名称。将域名添加到它上面有用吗?我正在使用 FQDN,并且仍然在努力阅读文档。如果我偶然发现任何东西,我会发布它。我只是想更深入地了解你的要求:name.domain 有效吗?(如上所述)我以这种方式工作而没有问题,如果你愿意,可以发布我的配置吗?

答案2

我得到了部分解决。至少我的 Linux 机器现在可以通过 DNS 进行通信。

我在 /etc/resolv.conf 中添加了 172.16.0.254 作为名称服务器,并在 /etc/systemd/resolved.conf 中激活了 llmnr。现在可以通过 llmnr 进行 Ping,并且 nslookup 可以通过 dns 服务器进行解析。

我还是不明白为什么我必须激活 llmnr 才能 ping 以及为什么它不使用我的 dns 服务器...对于我的 Windows 客户端,情况仍然相同

编辑

所以我猜它已经工作了。我做了什么:

在 /etc/systemd/resolved.conf 中禁用 llmnr(默认情况下激活),在主机(带有 dnsmasq 的 nat server02)中,我为每个服务器设置了一个如下所示的条目:

ip server*.local server* (* is the number in my case, so 01 or 02)

现在我的 Windows 和 Linux 客户端可以解析主机名,而不必在它们后面加上 .local。一个小问题是,我 ping server02 时得到的 IP 非常不一致

相关内容