我只是有个小问题。
我的 DNS 服务器由我们的 DHCP 服务器(Microsoft Windows 2003 R2 SP2)更新。
我的客户是 Debian Linux Distro,我必须修改我的 DHCLIENT.CONF 文件以发送他的完全限定主机名。
但是我有大约 1600 台计算机,我不想逐一修改每个客户端,那么,我可以例如在配置文件上使用系统变量吗?
例如:
#DHCLIENT CONF;
其中 $hostname 变量是 BASHRC 上为 hostname -f 命令写入的别名。
send "$hostname"
如果您需要更多信息,请告诉我。
答案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 不支持你列出的变量扩展。因此剩下两个明显的选择:
- 登录所有主机并构建配置文件的脚本
- 配置管理(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 的强大工具,并提高了我的脚本编写技能。
主题已解决。