我正在使用Ubuntu 14.04和LXC构建虚拟化环境.我不想编写自己的模板,因为从12.04升级到14.04表明无法保证向后兼容性.
因此,我使用默认的Ubuntu模板通过lxc-create部署我的虚拟机.服务器的DNS由Amazon Route 53提供,因此不需要本地DNS服务器.
我还使用Puppet来配置我的服务器,因此我希望尽可能减少部署中的手动操作.
现在,默认的Ubuntu模板通过DHCP分配IP地址.因此,我需要一个本地DHCP服务器为节点分配IP地址,因此我可以通过SSH连接它们并让Puppet运行.由于Puppet需要正确的DNS设置,因此无法分配临时IP地址,客户端需要从一开始就获得正确的主机名和IP地址.
题
我使用什么DHCP服务器,如何通过对该主机名执行DNS查找,仅根据主机名DHCP选项分配IP地址?
我试过的
我尝试使用ISC DHCP服务器使其工作,但是,手册明确指出:
Please be aware that only the dhcp-client-identifier option and the hardware address can be used to match a host declaration,or the host-identifier option parameter for DHCPv6 servers. For example,it is not possible to match a host declaration to a host-name option. This is because the host-name option cannot be guaranteed to be unique for any given client,whereas both the hardware address and dhcp-client-identifier option are at least theoretically guaranteed to be unique to a given client.
我还尝试创建一个匹配主机名的类,如下所示:
class "my-client-name" { match if option host-name = "my-client-name"; fixed-address my-client-name.my-domain.com; }
不幸的是,类语句中不允许使用fixed-address选项.我可以将它替换为1个大小的池,它按预期工作:
subnet 10.103.0.0 netmask 255.255.0.0 { option routers 10.103.1.1; class "my-client-name" { match if option host-name = "my-client-name"; } pool { allow members of "my-client-name"; range 10.103.1.2 10.103.1.2; } }
但是,这需要我在两个地方(Amazon Route53和DHCP服务器)管理IP地址,我不想这样做.
关于安全
由于这仅用于内部网络的自举阶段,然后被Puppet的静态网络配置所取代,从安全角度来看,这不应成为问题.但是,我知道虚拟机引导了“ubuntu:ubuntu”凭据,一旦运行,我打算修复它.
解决方法
在那种情况下,我遇到了类似的问题,ISC绑定与我的配置工作同样不合作.我可靠地使用多年的最佳解决方案是编辑leases file,以便将所需的IP地址分配给相应的硬件MAC.