DHCLIENT.CONF 系统变量

DHCLIENT.CONF 系统变量

我只是有个小问题。

我的 DNS 服务器由我们的 DHCP 服务器(Microsoft Windows 2003 R2 SP2)更新。

我的客户是 Debian Linux Distro,我必须修改我的 DHCLIENT.CONF 文件以发送他的完全限定主机名。

但是我有大约 1600 台计算机,我不想逐一修改每个客户端,那么,我可以例如在配置文件上使用系统变量吗?

例如:

#DHCLIENT CONF;
send "$hostname"
其中 $hostname 变量是 BASHRC 上为 hostname -f 命令写入的别名。

如果您需要更多信息,请告诉我。

答案1

dhclient 的最新版本(4.2.x)通过提供 gethostname() 函数来支持此功能。

因此,使用最新的 dhclient alpha,您可以在 dhclient.conf 中输入类似这样的内容

send host-name = gethostname();

Ubuntu 有一个修补在他们版本的 dhclient 中,你可以这样做

send host-name = "<hostname>";

它将用正确的主机名替换它。

Redhat 修补了其 dhclient,以提供 -H 和 -F(-H = 发送主机名,-F = 发送 fqdn.fqdn)命令行选项。因此,在 Redhat 上,您可以运行

dhclient -H $(hostname) 

它将发送正确的主机名。

不过,我不知道 Debian 有什么可用的补丁 - 你可能需要使用 Ubuntu 补丁来修补你的 dhclient

答案2

我猜你有很多不同的方法。据我所知,dhclient.conf 不支持你列出的变量扩展。因此剩下两个明显的选择:

  1. 登录所有主机并构建配置文件的脚本
  2. 配置管理(puppet/cfengine/chef)

选项 1 不太好,它能帮你克服这个障碍,但很难维护。不知不觉中,你就得定期编写脚本来登录所有机器,这会花费很长时间,容易出错(例如,如何妥善处理主机宕机并稍后恢复),而且很难维护。

选项 2. 绝对是我推荐的,而且我会推荐 puppet,因为它相对于 cfengine 更加灵活和易于使用,而且相对成熟。

这是你的清单(未经测试)

class dhcp-client {
   file { "/etc/dhclient.conf":
       content => template("dhclient.conf")
   }
}

模板如下:

other dhclient.conf stuff
send "<%= fqdn %>"

和节点配置:

node default { 
   include dhcp-client
}

答案3

非常感谢大家(你们两位),我发现了一个名为 Puppet 的强大工具,并提高了我的脚本编写技能。

主题已解决。

相关内容