我有许多不使用网络管理器的机器,只使用 dhcpcd 来设置 IP 地址。比如我的树莓派 4。我已经在 /etc/dhcpcd.conf 文件中静态分配了 IP 地址,并且可以正常工作,我很高兴。我想要做的是,如果我输入 nslookup machine2 (例如),它将配置的域附加到该查找。
在另一台使用 dhcpcd 的机器(我的 ArchLinux PC)中,我通过 dhcpcd 将地址配置为使用 dhcp(这次不是静态的)。在我的 DHCP 服务器上,我对其进行了设置,以便将“域名”字段指定为返回给客户端的选项。结果是我的 /etc/resolv.conf 文件更新为以下行:
域 mydomain.local
由于在这个文件中设置了这个“域”值,我只需键入 nslookup machine2,它会将 mydomain.local 附加到该查询,我的 dns 服务器会解析 machine2.mydomain.local 的 fqdn 的 IP。
所以理想情况下,我想模仿这个设置,这样我的树莓派 pi4 就会做同样的事情,但是它是静态设置的,那么我该怎么做呢?
请注意,我已经尝试将“search domain.local”添加到 /etc/resolv.conf 文件中,它会执行我想要它执行的操作,但是这些设置在重新启动时会丢失,因此我无法在此处设置此值. 我需要使用 dhcpcd 的适当工作解决方案。
更新:
我被要求将我的 /etc/resolv.conf 的输出放在这里:
$ cat /etc/resolv.conf
# Generated by resolvconf
nameserver 10.10.0.1
如果我(最后)理解正确,那么您已经使用 dhcpcd.conf(不是 dhcpd.conf)配置了您的网络
我想这种配置采用类似于以下的形式:
要设置域和搜索域,您应该能够添加如下内容:
换句话说,您只需要将 设置
domain_search
为静态选项。有关参考,请参见此处http://www.techsneeze.com/configuring-static-ip-raspberry-pi-running-raspbian/
正如OP所指出的,这个选项隐藏得很好。推断是因为 dhcpcd 是围绕 DHCP 概念构建的网络配置工具。在 dhcpcd 中,您通过定义(部分)DHCP 响应来设置静态配置。所以在这种情况下,答案就是简单地添加
domain_search
到静态定义的值。记录不佳的原因可能与 DHCP 允许添加自定义 DHCP 选项有关。因此,dhcpcd 不可能列出您可以静态定义的每个选项。碰巧
domain_search
它不是核心 DHCP 标准的一部分,它由RFC 3397固定。那就是说。它可以在手册中更好地描述。
我不确定如何使用 nslookup 获得答案。但是对于使用 nsswitch.conf 文件告诉它如何解决问题的程序,如果您的查询目标正在运行 avahi(或任何 zero_conf aka mDNS 守护程序),则可以这样做。getent cmd 就是这样一个实用程序。例如,我的 LAN 上有一台名为“shadow”的 PC
什么都不返回。
但
getent hosts shadow.local
返回:avahi-resolve -n shadow
返回avahi-resolve -n shadow.local 返回:
即使我从未在任何地方定义域“本地”。
为此,目标必须在线,以便它可以回答 mDNS 轮询。例如,如果主机 hector 离线:
超时没有返回
关键是在 /etc/nsswitch.conf 文件中包含以下行:
这将导致像 getent 这样的 cmd 首先检查 /etc/hosts 文件,如果在那里找不到主机,则尝试使用 mDNS 工具。
我认为安装和运行 avahi 会自动将必要的库添加到 getent 检查的路径中,以便当 getent 在 nsswitch.conf 文件中看到 mdns4_minimal 时它知道该怎么做。
以上是一个(不令人满意的)黑客。我很想知道如何强迫 dhcpd 做你想做的事。pgmer6809