nss-myhostname 中文手册

译者:金步国


版权声明

本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。

其他作品

本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:

联系方式

由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。


手册索引 · 指令索引systemd-241

名称

nss-myhostname, libnss_myhostname.so.2 — 为本地配置的系统主机名 提供解析功能

大纲

libnss_myhostname.so.2

描述

nss-myhostname 是一个 glibc(GNU C Library) NSS(Name Service Switch) 插件, 提供了解析本地配置的系统主机名的功能。 所谓"本地配置的系统主机名"其实就是 gethostname(2) 函数的返回值。 该模块的解析规则如下:

  • 本机的主机名 将会被解析为所有本地IP地址,并按照他们所属的 scope 排序。 如果 scope 不存在, 则会被解析为本地回环接口上的 IPv4 127.0.0.2 以及 IPv6 ::1

  • "localhost" 与 "localhost.localdomain" 以及所有以 ".localhost" 或 ".localhost.localdomain" 结尾的主机名, 都会被解析为 127.0.0.1 与 ::1

  • "_gateway" 会被 解析为当前所有的默认网关地址, 并按照地址的数字顺序排序。 这样就为当前网关分配了一个固定的主机名, 从而可以让应用程序在不关心网络配置的情况下,直接引用网关。

许多软件依赖于存在一个可以永远被解析的本地主机名。 当使用动态主机名的时候, 传统的做法是在主机名发生变化的同时修改 /etc/hosts 文件。 这种做法的缺点在于要求 /etc 目录必须是可写的, 而且有可能在修改 /etc/hosts 文件的同时, 系统管理员也正在编辑它。启用 nss-myhostname 之后, 就可以不必修改 /etc/hosts 文件。更进一步, 在许多系统上甚至无需存在这个文件。

要激活此NSS模块,可将 "myhostname" 添加到 /etc/nsswitch.conf 文件中以 "hosts:" 开头的行里面。

建议将 "myhostname" 放置在 nsswitch.conf 文件中以 "hosts:" 开头的行的末尾,以确保优先使用传统的基于DNS与 /etc/hosts 文件的解析方法。

例子

下面是一个正确开启了 nss-myhostname 插件的 /etc/nsswitch.conf 文件的例子:

passwd:         compat mymachines systemd
group:          compat mymachines systemd
shadow:         compat

hosts:          files mymachines resolve [!UNAVAIL=return] dns myhostname
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

可以使用 glibc 软件包中的 getent 工具检查配置的有效性:

$ getent ahosts `hostname`
::1       STREAM omega
::1       DGRAM
::1       RAW
127.0.0.2       STREAM
127.0.0.2       DGRAM
127.0.0.2       RAW

本例中的本地主机名是 omega

参见

systemd(1), nss-systemd(8), nss-resolve(8), nss-mymachines(8), nsswitch.conf(5), getent(1)