我有许多不使用网络管理器的计算机,仅使用 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
答案1
如果我(最后)理解正确,那么您已经使用 dhcpcd.conf (而不是 dhcpd.conf)配置了您的网络
我想这个配置采用类似于这样的形式:
interface eth0
static ip_address=192.168.2.31/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1 8.8.8.8 4.2.2.1
要设置域和搜索域,您应该能够添加如下内容:
static domain_name=example.com
static domain_search=example.com
换句话说,您只需将其设置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。
就是这样说的。手册中可以更好地描述它。
答案2
我不确定如何使用 nslookup 获得答案。但是对于使用 nsswitch.conf 文件告诉它如何解决问题的程序,如果查询的目标正在运行 avahi (或任何 Zero_conf 又名 mDNS 守护进程),则可以执行此操作。 getent cmd 就是这样一个实用程序。例如,我的 LAN 上有一台名为“shadow”的 PC
`getent hosts shadow`
什么也不返回。
但
getent hosts shadow.local
返回:
192.168.1.76 影子.本地
avahi-resolve -n shadow
回报
无法创建主机名解析器:主机名无效
avahi-resolve -n Shadow.local 返回:
影子.本地192.168.1.76
尽管我从未在任何地方定义过“本地”域。
为此,目标必须在线才能回答 mDNS 轮询。例如,如果主机 hector 离线:
avahi-resolve -n hector.local
无法解析主机名“hector.local”:已达到超时
getent hosts hector.local
超时且没有任何返回
关键是在 /etc/nsswitch.conf 文件中包含以下行:
主机:文件 mdns4_minimal [NOTFOUND=return] dns myhostname
这将导致像 getent 这样的 cmd 首先检查 /etc/hosts 文件,如果在那里找不到主机,则尝试使用 mDNS 设施。
我认为安装和运行 avahi 会自动将必要的库添加到 getent 检查的路径中,这样当 getent 在 nsswitch.conf 文件中看到 mdns4_minimal 时,它就知道要做什么。
上面是一些(不令人满意的)黑客行为。我很想知道如何强制 dhcpd 做你想做的事。 PGMER6809