DNS 服务器 - 如何区分客户端?

DNS 服务器 - 如何区分客户端?

我正在使用 Bind9 在远程计算机上运行自己的 DNS 服务器。此服务器目前仅供连接到同一路由器的计算机使用。我遇到的问题是,由于 DNS 服务器在单个网络上使用,因此连接到它的所有客户端计算机都具有相同的外部 IP。因此,当我查看日志时,我无法区分每个查询或问题来自哪台客户端计算机。我无法将 DNS 服务器移动到本地,以便它与计算机位于同一网络上。有什么办法可以解决这个问题吗?

答案1

NAT 后面的客户端无法根据 IP 地址进行区分。身份验证应在上层(应用层)进行,但 DNS 协议不提供身份验证机制。

可以使用中间层(如dnscrypt或(相互 TLS))来验证客户端。TLS

在这两种情况下,都需要在客户端进行额外的配置,因为大多数 DNS 客户端不支持 DoH/DoT 或 dnscrypt,或者不实施客户端证书。

看看客户端软件 dnscrypt-proxy。它允许提供客户端证书(看这里)用于双向 TLS 或用于 dnscrypt 的 query_meta(看这里)

答案2

只需配置您的客户端以通过其 IPv6 地址查询 DNS 服务器。

使用 IPv6 时,每个客户端自己的 IPv6 地址都应保留,这样您就可以避免整个 NAT 问题。

答案3

您是否查看过查询日志:

# vi /etc/named.conf
...
options {
        querylog yes;
}

...
logging {
        channel querylog {
                file "/var/log/querylog";
                severity debug 3;
        };
};

https://www.thegeekdiary.com/how-to-enable-bind-query-logging-to-find-out-whos-querying-a-name-server/

dnstop 也可能是一个选项:dnstop 可以从实时捕获设备(如 eth0 或 tcpdump 保存文件)读取数据包。您需要在安装缓存 DNS 服务器或 BIND 9/10 服务器的地方安装此工具。您可以使用此工具查看有关所有 DNS 客户端、DNS 查询等的信息。也许您可以通过 mac 地址进行区分。sudo arp-scan --interface=eth0 --localnet或者arp -a

相关内容