我尝试使用 bind9 和 dnsmasq。我还将服务器计算机设置为具有静态 IP 地址。操作系统是 Ubuntu 18.04。我想在 Windows 7 和 10 计算机上访问域。我已经测试过,我的笔记本电脑可以使用 IP 地址访问所有内容,但我无法让它访问 .local 域名。本质上,我无法弄清楚如何在任何 DNS 服务器软件上获得半工作配置。
大多数教程都告诉我要使用 Google DNS 并使用 resolv.conf。我不想使用外部服务器来路由应该只在我的网络上的名称,也许我有点偏执,但对我来说这似乎是一个隐私问题。
使用 Google 禁用转发并使用 resolv.conf 作为名称服务器的教程变得令人困惑,因为语言表明我正在尝试创建自己的 DNS 服务器来访问 Facebook 等外部网站。我并不是想劫持我网络的 DNS 注册商或做任何类似的事情,我只是想让一些 .local 域访问一台机器上托管的几个应用程序。
这些教程都有 ns1.example.com、ns2.example.com、host1.example.com、host2.example.com,每个都有各自的 IP 地址。也许我误解了这是什么意思,但他们似乎想让我为所有东西都配备单独的机器。我只想要一台机器运行我的 DNS 服务器、我的 CUPS 服务器、我的 FTP 服务器、我的 PXE 服务器以及我决定在这台机器上安装的任何其他 Web 或网络应用程序。
我希望在每台机器上使用 name.local:port 或 app.name.local 而不是 ipaddress:port 来访问这些应用程序,并且我不想在每台机器的 hosts 文件中指定这一点。
我最终放弃了使用 bind9,因为我甚至无法让它为我正在使用的机器提供服务,于是尝试了 dnsmasq。有人告诉我这个神奇的程序会让一切变得轻而易举。说明书告诉我要修改 hosts 文件,这暂时给人一种它正在工作的错觉。当我将笔记本电脑连接到网络并尝试时,我意识到 hosts 文件是唯一起作用的东西。又一个完全不执行任何操作的 DNS 配置。我的配置如下所示。我尝试添加和删除各种选项,例如 no-dchp-interface,但都没有效果。ipaddress 是我机器的 ip 地址,modemip 是我调制解调器的 ip 地址,用作我的路由器和网关设置。
port=5353
#domain-needed
#bogus-priv
no-dhcp-interface=yes
no-resolv
no-poll
server=/name.local/ipaddress
local=/name.local/
expand-hosts
domain=name.local
dhcp-range=iprange,72h
# subnet mask
dhcp-option=1,255.255.255.0
# gateway
dhcp-option=3,modemip
# dns
dhcp-option=6,modemip
这是我的 etc/bind/named.conf.options。
acl "trusted" {
ipaddress;
modemip;
localhost;
localnets;
};
options {
directory "/var/cache/bind";
recursion no;
allow-query { trusted; };
listen-on { ipaddress; };
allow-transfer { none; };
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
};
我有一种感觉,这些教程可能忽略了我应该知道的一些事情,但问题是,如果是这样的话,我不知道如何弄清楚它是什么。例如,我今天早上才弄清楚我应该使用 systemctl 启用和启动 bind9。我读过的四五篇文章中只有一篇告诉我这一点。
如果需要,我将提供更多相关信息。
所有细节都说完了。如何在不使用解析或外部 DNS(如 Google 的 8.8.8.8)的情况下创建 DNS 服务器(换句话说,好像没有互联网访问),只使用一台机器,并且可以通过输入 name.local:port 或 app.name.local 来访问所有内容?这可能吗?
谢谢。
答案1
笔记:虽然技术上虽然可以在一台计算机上设置多个 DNS 服务器,但这样做实际上并不起作用。大多数计算机只使用该列表中的单个 DNS 服务器,并且只有在第一个服务器没有响应时才会选择另一个。但是,如果第一个服务器响应没有结果 ( NXDOMAIN
),计算机将不会尝试另一个服务器。
所以,您需要设置您的计算机以指向此 DNS 服务器仅有的,而不是您的 ISP/网络。
考虑到这一点,请参阅下面的说明,了解您需要做什么。
为了理解您所遵循的设置教程,您只需要记住 DNS 服务器可以执行两个功能:
- 权威 DNS
- 递归 DNS
权威 DNS 服务器负责回答“属于它”的查询。就您而言,这是您的*.local
域。
递归 DNS 服务器负责接受以下查询:不要“属于它”并将它们转发到上游可以回答它们的另一个服务器,然后返回响应。通常,递归服务器会将响应缓存一段时间,以便不需要再次请求。(缓存时间称为TTL
,其长度由上游服务器设置。)这是“递归”的原因是,可能会有一长串 DNS 服务器处理响应,直到它最终回到权威服务器。但是,答案可以由链中的任何缓存服务器给出。
你看到的最初教程告诉你使用 Google DNS,只是告诉你使用它来递归查找设置。但是,您的服务器认为它是权威服务器的任何请求都不会发送到上游服务器。
如果您想在此网络上访问互联网,您需要让服务器既充当您自己域的权威服务器,又充当其他所有域的递归服务器。这是他们告诉您设置的配置。
如果这就是您想要的,您应该按照找到的教程操作,其中说要使用 Google 的 DNS。不必担心您的内部查询会被发送到 Google(除非您严重错误地配置了服务器),因为该服务器知道它可以处理的任何查询都不会被发送到上游。
如果您不想使用 Google,您还有其他几个上游选项,包括以下内容:
- 您的 ISP 运行的 DNS 服务器
- OpenDNS - 208.67.222.222 和 208.67.220.220
- Cloudflare - 1.1.1.1 和 1.0.0.1
如果你真的不想在这个网络上访问任何互联网,你应该专门寻找一个关于设置“权威”DNS服务器的教程,不是递归。