家庭 LAN 网络中 IP 的别名

san*_*han 33 networking router dns lan

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

192.168.1.1 -> router.home
Run Code Online (Sandbox Code Playgroud)

或者

192.168.1.22 -> printer.home
Run Code Online (Sandbox Code Playgroud)

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

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

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

Tur*_*Tux 26

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

首先,您需要一台要在其上运行 DNS 服务器的计算机。这可以是您的一台普通计算机(如果它们运行 Linux 并且大部分时间都在运行)或例如Raspberry Pi。这种设备的优点是价格便宜,不需要太多电力,而且体积小。

设置 DNS 服务器

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

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

sudo apt-get install dnsmasq
Run Code Online (Sandbox Code Playgroud)

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

dnsmasq/etc/hosts. 编辑此文件如下:

# IP address    Host name
192.168.1.1     router
192.168.1.22    printer
Run Code Online (Sandbox Code Playgroud)

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

现在,您已经设置了自己的 DNS 服务器,但是您网络中的计算机还没有使用它。要让他们使用这个服务器,你必须做一个准备工作:

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

listen-address=127.0.0.1
listen-address=192.168.1.42
Run Code Online (Sandbox Code Playgroud)

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

使用 DNS 服务器

您必须告诉网络中的每台计算机它应该(也)192.168.1.42用作 DNS 服务器。执行此操作的方式取决于您的操作系统。您可以轻松地在 Internet 上为您指定的操作系统查找此信息(只需搜索“在 <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
Run Code Online (Sandbox Code Playgroud)

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

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

就是这样,你完成了。您现在/etc/hosts只需使用您提供的主机名即可访问您在 dnsmasq 服务器中输入的所有设备。

(可选)检查功能

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

$ dig router
Run Code Online (Sandbox Code Playgroud)

这应该返回这样的东西

; <<>> 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
Run Code Online (Sandbox Code Playgroud)

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

(可选)指定 TLD

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

expand-hosts # Tells dnsmasq to add a TLD to each host name
domain=home # The TLD
Run Code Online (Sandbox Code Playgroud)

您可能需要重新启动。

(未经测试,可选)如何避免更改所有计算机上的 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|
                                                          |-----------------|
Run Code Online (Sandbox Code Playgroud)

资料来源/进一步阅读

关于dnsmasq

关于bind(如果你有兴趣的话):

如何更改路由器的 DNS:

如何配置 DNS 缓存:


小智 12

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


编辑您的主机文件(懒惰的方式)

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

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

<IP>       <the hostname to assign>
Run Code Online (Sandbox Code Playgroud)

例如。

192.168.1.1      router
Run Code Online (Sandbox Code Playgroud)

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

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

http://router/
Run Code Online (Sandbox Code Playgroud)

或者

router/
Run Code Online (Sandbox Code Playgroud)

本地 DNS 服务器

请参阅TuringTux 的答案以获取更多信息