编辑 hosts 文件(偷懒的方法)

编辑 hosts 文件(偷懒的方法)

是否可以为 IP 地址(如 192.168.1.1)分配可读的字符串别名?也许是这样的:

192.168.1.1 -> router.home

或者

192.168.1.22 -> printer.home

router.home 无需从外部网络访问,只需在 LAN 中访问即可。事实上,它不应该从外部网络访问。

我猜目标是拥有一个本地 DNS 服务器,它响应 router.home 地址。知道如何创建这样的别名吗?

编辑:Yamakaja 的答案很有效,但它需要在 LAN 中的每台计算机上更改主机文件。本地 DNS 查找可以在家庭路由器上进行吗?这样可以省去很多手动工作。

答案1

此外Yamakaja 的回答,这就是您设置本地 DNS 服务器的方式。

首先,你需要一台运行 DNS 服务器的电脑。这台电脑可以是你的普通电脑(如果它们运行 Linux 并且大部分时间都在运行),也可以是树莓派。这种装置的优点是价格便宜,耗电量小,而且体积小。

设置 DNS 服务器

我决定使用以下方法在 Raspberry Pi 上设置 DNS 服务器dnsmasq,这是一个小型 DNS 服务器工具,非常适合在小型网络中使用。您还可以使用bind,事实上的标准 DNS 工具,但对于小型家庭网络来说,这可能有点太强大了。

使用包管理器进行安装dnsmasq,在基于 Debian 的系统(例如 Raspbian)上,命令为

sudo apt-get install dnsmasq

我现在假设您已经设置了静态 IP 地址分配(即您在问题中提到的 IP 地址不会改变)。如果没有,dnsmasq也可以用作 DHCP 服务器,但我还没有这样做。

dnsmasq从 中获取主机名/etc/hosts。编辑此文件如下:

# IP address    Host name
192.168.1.1     router
192.168.1.22    printer

主机名router现已分配给192.168.1.1printer192.168.1.22

现在,您已经设置了自己的 DNS 服务器,但网络中的计算机尚未使用它。要让它们使用此服务器,您必须执行一步准备:

使用 查找 dnsmasq 设备的 IP 地址ip address(我们假设是192.168.1.42)。打开/etc/dnsmasq.conf并附加以下行:

listen-address=127.0.0.1
listen-address=192.168.1.42

这告诉它应该在请求被寻址到(即当它自己想要使用其 DNS 服务器时)或(即当其他计算机想要使用其 DNS 服务器时)时dnsmasq监听对它的请求。127.0.0.1192.168.1.42

使用 DNS 服务器

您必须告诉网络中的每台计算机它(也)应该用作192.168.1.42DNS 服务器。执行此操作的方式取决于您的操作系统。您可以在互联网上轻松查找您指定的操作系统(只需搜索“在 <OS> 上更改 DNS 服务器”或类似内容)。

对于 Windows 7,你可以按照本教程操作:https://www.opennicproject.org/configure-your-dns/how-to-change-dns-servers-in-windows-7/

在我的系统(Arch Linux)上,我必须将以下行附加到/etc/resolvconf.conf

name_servers=192.168.1.42

请注意,您必须使用的文件取决于您的网络管理器配置。在您要使用 DNS 的每台计算机上添加 DNS 服务器 IP。

如果它不能立即工作,您可能必须重新启动设备。

/etc/hosts就这样,您就大功告成了。现在,您只需使用您指定的主机名,即可访问 dnsmasq 服务器中输入的所有设备。

(可选)检查功能

如果要检查 DNS 解析是否正常工作,请dnsutils在应使用服务器的系统上安装 (Linux)。然后执行

$ dig router

这应该返回类似这样的内容

; <<>> DiG 9.10.4-P1 <<>> router
;; global options: +cmd
;; Got answer:
...

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;router.                        IN      A

;; ANSWER SECTION:
router.                 0       IN      A       192.168.1.1

;; Query time: 14 msec
;; SERVER: 192.168.1.42#53(192.168.1.42)
;; WHEN: So Jun 26 10:43:18 CEST 2016
;; MSG SIZE  rcvd: 50

它会显示您想要解析的主机名、解析到的 IP 地址以及使用的 DNS 服务器。如您所见,一切正常。

(可选)指定 TLD

router如果您不仅想使用或 ,printer还想使用router.home和来访问设备printer.home,请将以下几行添加到您的 中/etc/dnsmasq.conf

expand-hosts # Tells dnsmasq to add a TLD to each host name
domain=home # The TLD

您可能需要重新启动。

(未经测试,可选)如何避免更改所有计算机上的 DNS 配置

我不确定以下段落的事实准确性,如果发现错误,请随时纠正

家庭网络中的所有计算机都应默认使用路由器提供的 DNS 服务器。为了避免更改所有计算机上的 DNS 配置,您可以改为让路由器使用您的 DNS 服务器。此后,网络中的每个人都应该能够解析您在dnsmasq配置中指定的主机名。

但是,由于您的 DNS 服务器不知道如何处理指向外部网络的任何其他域,因此您可能无法解析它们。要解决此问题,您可以将 DNS 服务器配置为 DNS 缓存,缓存来自公共 DNS 服务器的 DNS 条目。

如果您的计算机随后需要解析域,则请求将采用以下路径(最终遵循选项 a)或 b)):

                                                               /etc/hosts
                                                                   ^
                                                                   |
                                                              b) lookup
                                                                   |
|-------------|                |-----------|                |---------------|
|Your Computer|--DNS request-->|Your Router|--DNS request-->|Your DNS server|
|-------------|                |-----------|                |---------------|
                                                                   |
                                                            a) DNS request
                                                                   |
                                                                   v
                                                          |-----------------|
                                                          |Public DNS server|
                                                          |-----------------|

来源/进一步阅读

关于dnsmasq

关于bind(如果您感兴趣的话):

如何更改路由器的 DNS:

如何配置 DNS 缓存:

答案2

是的,并且有两个(或更多?)选项:


编辑 hosts 文件(偷懒的方法)

根据您的操作系统,您必须在“hosts”文件中添加一个条目。您可以在/etc/hosts大多数 Unixoid 和C:\Windows\system32\drivers\etc\hostsWindows 上找到它。

要添加您的条目​​,请转到文件底部并添加以下格式的行:

<IP>       <the hostname to assign>

例如。

192.168.1.1      router

(请注意,ip 和主机名之间的空格无关紧要。但如果与其他条目匹配,看起来会更好。您可以使用制表符或空格)

然后你就可以在浏览器中访问你的路由器了,只需访问

http://router/

或者

router/

本地 DNS 服务器

请参见TuringTux 的答案了解更多信息

答案3

我想更新上面的精彩答案:

您可能需要检查您的路由器并检查它是否支持手动 DNS 输入。

如果是这样,您只需将本地192.168.1.22地址添加到其中即可printer.home。否则,恐怕您将只能编辑本地主机文件或设置自己的 DNS 服务器。

相关内容