我正在用Ubuntu 14.04和LXC构build一个虚拟化环境。 我不想写自己的模板,因为从12.04到14.04的升级已经显示向后兼容性不能保证。
因此,我使用默认的Ubuntu模板通过lxc-create部署我的虚拟机。 服务器的DNS由Amazon Route 53提供,因此不需要本地DNS服务器。
我也使用Puppet来configuration我的服务器,所以我想尽量减less部署上的手动工作。
现在,默认的Ubuntu模板通过DHCP分配IP地址。 因此,我需要一个本地的DHCP服务器来为节点分配IP地址,所以我可以通过SSH进入并运行Puppet。 由于Puppet需要正确的DNS设置,因此不能select分配临时IP地址,客户端需要从一开始就获取正确的主机名和IP地址。
我可以使用什么DHCP服务器,以及如何通过在主机名上执行DNS查找来根据主机名DHCP选项分配IP地址?
我试图使用ISC DHCP服务器,但是,手册中明确指出:
请注意,只有dhcp-client-identifier选项和硬件地址可用于匹配主机声明或DHCPv6服务器的主机标识符选项参数。 例如,不可能将主机声明与主机名选项相匹配。 这是因为主机名选项不能保证对于任何给定的客户端是唯一的,而硬件地址和dhcp-client-identifier选项至less在理论上保证对于给定的客户端是唯一的。
我也尝试创build一个匹配主机名的类,如下所示:
class "my-client-name" { match if option host-name = "my-client-name"; fixed-address my-client-name.my-domain.com; }
不幸的是,在类语句中不允许使用固定地址选项 。 我可以用一个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服务器)pipe理IP地址, 我不想这样做 。
由于这只用于内部networking的引导阶段,然后由Puppet进行静态networkingconfiguration来取代,从安全的angular度来看,这不是一个问题。 但是,我知道虚拟机使用“ubuntu:ubuntu”凭据引导,我打算在运行时解决这个问题。
希望你可以控制虚拟以太网接口的硬件MAC地址 。
在这种情况下,我遇到了类似的问题,ISC绑定与我的configuration工作同样不合作。 最好的解决scheme,我仍然使用多年的可靠,是编辑租约文件,以便所需的IP地址分配给相应的硬件MAC。
首先,您只需启动客户端来填充租约文件。 然后停止客户端并绑定,然后编辑租约文件。
朋友指出,我可以使用PuppetreplaceLXCconfiguration文件中自动生成的MAC地址。 这将允许我使用DNS名称的固定地址指令。