简易使用局域网Local域名
习惯了在公网服务器上用多个子域名访问不同应用,在局域网环境中我们也常常希望这么做。
对于自带DNS服务器并维护了.lan
域名的路由器来说,一切非常简单,不需要额外配置就能直接使用主机名.lan
解析其他主机地址。当然,也仅限于此,增加子域名解析或泛域名解析还需要额外配置。
在局域网里增设一个DNS服务器,直接解析内网主机的地址,或许这是最为强大的方法,但也或许是最麻烦的方法。
Windows的NetBIOS,以及Linux的Avahi,是操作系统附带的主机地址广播方案,在我看来似乎是更加灵活的选择。
且Windows 10自较为近期的版本开始,就自带解析 .local
mDNS的组件,Windows和Linux之间的地址广播方案实现了互通。
接下来就以在Linux服务器上配置.local
域名作为例子。
基本组件
在Debian系统上直接安装:
1 | sudo apt install avahi-daemon avahi-utils |
现在起,<主机名>.local
将指向这台主机。
添加额外域名
在一些服务,尤其是HTTP服务中,通过不同域名指向不同服务是非常便利的方法,如blog.<主机名>.local
指向博客,nextcloud.<主机名>.local
指向Nextcloud实例等等。
甚至,有些HTTP应用必须运行在/
下,无法通过绑定子目录方式访问,此时必须为其分配独立的域名/子域名。
Avahi的确可以添加泛域名或子域名记录,但大部分操作系统并不能正确解析mDNS的泛域名或子域名记录,或是依赖客户端系统的复杂配置,并不简单易行。
但是,在局域网环境中,域名空间常常充足,退而求其次,我们完全可以为同一台主机分配多个.local
记录,只要不与网内其他主机冲突即可。
avahi-utils
软件包提供了avahi-publish
工具,该工具可以广播用户指定的mDNS记录到内网。例如:
1 | avahi-publish -a -R another.local 192.168.1.123 |
这可以将another.local
域名指向IP地址192.168.1.123
。-R
选项代表不要广播反向(IP到主机名)解析记录,由于IP地址到主机名的唯一性,这一选项应当被保留。
也可以将其编写成一个Systemd服务单元,例如,可以将以下内容填入/etc/systemd/system/avahi-alias@.service
:
1 | [Unit] |
之后执行:
1 | sudo systemctl daemon-reload |
即可对外发布mDNS记录。