我正在努力为我和我的室友建立一个家庭内部网。我的想法是,我们将能够将诸如过去的水电费账单之类的东西存储在比厨房抽屉等更容易访问的地方。无论如何,我在我的 LAN 上的 Raspberry Pi 上运行了 Apache 2,如果我使用它的 IP 地址,我可以访问 Pi 上提供的页面。由于我做这个项目是为了更多地了解网络,以便为我的公寓提供服务,所以我认为如果我的网络可以为我的 LAN 提供主机名解析,那就太酷了。因此,我可以将浏览器指向(其主机名)并查看 Pi 提供的网页,而不是将浏览器指向192.168.1.151
Pi 的 IP 地址。oberon
现在我知道我不是第一个想做这件事的人,所以我开始通过谷歌搜索。这个问题,也在 Unix 和 Linux 上,对我帮助很大:如何使用主机名从 LAN 访问计算机。至此,我已经尝试了经过验证的答案中的所有内容。我考虑过使用该hosts
文件,但这意味着我必须告诉我的室友配置他们的机器,我不希望他们这样做。我尝试在路由器(NETGEAR WNR1000v2(又名 N150))上为 Pi 保留 DHCP 租约,虽然保留有效,但主机名解析不起作用。这让我很沮丧,因为我告诉我的路由器 Pi 的 IP和它的主机名,但它仍然不向我的 LAN 上的客户端提供此信息。
由于这两种方法都不起作用,我决定dnsmasq
在 Pi 上安装。配置似乎很简单,我很乐意学习新工具。我安装并运行得很好(看起来)。我可以dig
输入nslookup
Pi 的昵称(我将其设置/etc/hosts
为oberon
和homenet
)并获得正确的结果。我可以对像 和 之类的互联网名称做同样的事情yahoo.com
,得到正确的答案,因为我在 中设置了 Google 的8.8.8.8
和8.8.4.4
作为备份服务器/etc/dnsmasq.conf
。看看这个:
me@oberon~$ dig oberon
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> oberon
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10787
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;oberon. IN A
;; ANSWER SECTION:
oberon. 0 IN A 192.168.1.151
;; Query time: 10 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Oct 6 18:59:18 2013
;; MSG SIZE rcvd: 40
请注意,SERVER
is 127.0.0.1
:oberon
正在自行查找自己的 IP 地址。这是我期望看到的。如果我这样做,输出是相同的dig oberon @localhost
。由于这个输出,我认为dnsmasq
工作正常。所以为了把它提升到一个新的水平,我想要全部我的 LAN 上的客户端能够oberon
在浏览器中输入内容并转到 的oberon
索引页面。为此,我知道我需要配置我的路由器(如果这偏离了严格的 Unix 和 Linux 领域,我深表歉意)。
我有一台我相当熟悉的 Netgear WNR1000v2。我已经配置了端口转发,这样我就可以通过 SSH 连接到 Pi,并且我也研究了其他设置。我知道在开始这个项目之前,我是从 ISP 获取 DNS 服务器,但现在我想主要使用这些 DNS 服务器,但也用作192.168.1.151
最后检查。所以我将路由器的 DNS 配置更改为以下内容:
因此,通过此配置,我希望能够nslookup oberon
在我的(Windows)桌面上执行并获得192.168.1.151
.但这并没有发生。这就是发生的事情:
C:\Users\me>nslookup oberon
Server: UnKnown
Address: fe80::226:f2ff:fefa:bea
*** UnKnown can't find oberon: Non-existent domain
重置dnsflushing
Windows 计算机上的网络适配器不会改变任何内容。
现在这就是我为什么要在这里抓狂的原因:
C:\Users\me>nslookup oberon 192.168.1.151
Server: oberon.lan
Address: 192.168.1.151
Name: oberon
Address: 192.168.1.151
显然,dnsmasq
工作得很好。如果我告诉我的 Windows 盒子使用 来192.168.1.151
解析名称oberon
,一切都很好(.lan
域是 的配置的一部分dnsmasq
,所以我希望在那里看到它)。如果我能让我的路由器告诉我的 Windows 机器192.168.1.151
在进行 DNS 查询时使用,我应该会很好!
所以在我看来,问题出在我的路由器上,但我只是不知道除了更改 DNS 服务器以包含192.168.1.151
我已经拥有的 DNS 服务器之外还能做什么。有人能帮我一下吗?我将尽力提供所需的任何进一步信息。
答案1
您的问题在于您对这些 DNS 服务器的使用方式的误解,我不知道 Windows 用于选择要查询的 DNS 服务器的方法的确切细节,但我敢打赌它的主要>辅助>第三/始终/。即使它不是并且是循环的,您仍然会在 3 次中查询 2 次无用的服务器。
将会发生的情况是主服务器将被查询。如果超时(可能是一两秒),将查询下一个服务器。 DNS 不是一个“共识”系统,如果查询其中一台远程服务器,从其作为互联网 DNS 服务器的角度来看,它最终会发现您的主机名不存在。
您需要自己的 LAN DNS 作为主 DNS 服务器。其他 DNS 服务器可以作为合适的备份服务器,但我会考虑完全放弃它。
另外值得注意的是,您的反向 dns(IP 到名称查找)解析为“hostname.lan”,但您的正向解析测试仅使用主机名。您还应该在某处设置 hostname.lan 的前向解析。虽然主机可能有许多“名称到地址”正向查找,但期望存在 IP 到名称的反向查找,而名称又具有与该 IP 记录相匹配的名称。它并不总是很重要,有时只会使日志文件发出抱怨声,但有些事情对此比其他事情更敏感。
另外,一旦一切正常,不要忘记删除您放置的任何主机文件(我不知道这是否与 dnsmasq 相关,从未使用过它,我使用 ISC-BIND 名称有一个类似但更复杂的配置)服务器,您可以将其配置为转发到您正在使用的其他服务器,或者只是将其用作非转发 DNS 服务器,自行进行全名解析 - 这就是我所设置的)。
不用说,正如您最初推测的那样,您并不是唯一进行此设置的人,几乎每个合理发展的企业 LAN 和许多过度发展的家庭 LAN 都会有这种设置。
答案2
也许有点晚了,但在我的无线适配器上禁用 ipv6 就成功了。