Я создаю среду виртуализации с Ubuntu 14.04 и LXC. Я не хочу писать свой собственный шаблон, поскольку обновление с 12.04 до 14.04 показало, что обратная совместимость не гарантируется.
Поэтому я развертываю свои виртуальные машины через lxc-create, используя шаблон Ubuntu по умолчанию. DNS для серверов предоставляется Amazon Route 53, поэтому локальный DNS-сервер не требуется.
Я также использую Puppet для настройки своих серверов, поэтому хочу, чтобы ручные усилия по развертыванию были минимальными.
Теперь шаблон Ubuntu по умолчанию назначает IP-адреса через DHCP. Поэтому мне нужен локальный DHCP-сервер для назначения IP-адресов узлам, чтобы я мог подключиться к ним по SSH и запустить Puppet. Поскольку Puppet требует правильной настройки DNS, назначение временных IP-адресов не является вариантом, клиенту необходимо с самого начала получить правильное имя хоста и IP-адрес.
Какой DHCP-сервер я использую и как заставить его назначать IP-адрес только на основе параметра DHCP имени хоста, выполнив поиск DNS для этого самого имени хоста?
Я пытался заставить его работать с помощью DHCP-сервера ISC, однако в руководстве четко сказано:
Имейте в виду, что только параметр dhcp-client-identifier и аппаратный адрес могут использоваться для соответствия объявлению хоста или параметру параметра host-identifier для серверов DHCPv6. Например, невозможно сопоставить объявление хоста с параметром имени хоста. Это связано с тем, что нельзя гарантировать уникальность опции host-name для любого данного клиента, в то время как и аппаратный адрес, и опция dhcp-client-identifier, по крайней мере, теоретически гарантированно уникальны для данного клиента.
Я также попытался создать класс, который соответствует имени хоста следующим образом:
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;
}
}
Однако для этого мне потребуется администрировать IP-адреса в двух местах (Amazon Route53 и DHCP-сервер), чего я бы предпочел не делать.
Поскольку это используется только на этапе начальной загрузки во внутренней сети и затем заменяется статической сетевой конфигурацией Puppet, это не должно быть проблемой с точки зрения безопасности. Однако мне известно, что виртуальная машина загружается с учетными данными "ubuntu: ubuntu", которые я собираюсь исправить, как только это будет запущено.
Надеюсь, вы сможете управлять оборудованием MAC-адреса ваших виртуальных интерфейсов Ethernet.
В этом случае у меня была аналогичная проблема, и привязка ISC также несовместима с моими усилиями по настройке. Лучшее решение, которое я надежно использую уже много лет, - это отредактировать файл аренды так что желаемые IP-адреса будут назначены соответствующему аппаратному MAC.
Во-первых, вы просто запускаете клиентов для заполнения файла аренды. Затем остановите клиентов и выполните привязку, а затем отредактируйте файл аренды.
Как заметил друг, я мог бы использовать Puppet для замены автоматически сгенерированного MAC-адреса в файле конфигурации LXC. Это позволило бы мне использовать директиву фиксированного адреса с именем DNS.