Я создаю среду виртуализации с Ubuntu 14.04 и LXC. Я не хочу писать свой собственный шаблон, так как обновление от 12,04 до 14,04 показало, что назад совместимость не гарантируется.
Поэтому я развертываюсь, мои виртуальные машины через lxc-создают, с помощью шаблона Ubuntu по умолчанию. DNS для серверов обеспечивается Маршрутом Amazon 53, таким образом, никакой локальный сервер DNS не необходим.
Я также использую Марионетку для конфигурирования моих серверов, таким образом, я хочу сохранить ручное усилие на развертывании минимальным.
Теперь, шаблон Ubuntu по умолчанию присваивает IP-адреса через DHCP. Поэтому мне нужен локальный сервер DHCP для присвоения IP-адресов узлам, таким образом, я могу SSH в них и получать Марионеточное выполнение. Так как Марионетка требует надлежащей установки DNS, присвоение временных IP-адресов не является опцией, клиент должен получить правильное имя хоста и IP-адрес от запуска.
Какой сервер DHCP я использую и как я заставляю его присваивать IP-адрес, базирующийся только на опции DHCP имени хоста путем выполнения поиска DNS на том очень имени хоста?
Я пытался заставить его работать с помощью сервера DHCP ISC, однако, руководство ясно указывает:
Знайте, что только опция идентификатора клиента DHCP и аппаратный адрес могут использоваться для соответствия объявлению хоста или опциональному параметру идентификатора хоста для серверов DHCPv6. Например, не возможно соответствовать объявлению хоста к опции имени хоста. Это вызвано тем, что опция имени хоста, как могут гарантировать, не будет уникальна ни для какого данного клиента, тогда как и опция аппаратного адреса и идентификатора клиента DHCP, как по крайней мере теоретически гарантируют, будет уникальна для данного клиента.
Я также пытался создать класс, который соответствует имени хоста как это:
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), который я предпочту не делать.
Так как это используется только в загружающейся фазе на внутренней сети и затем заменяется статической конфигурацией сети Марионеткой, это не должно быть проблемой с точки зрения безопасности. Я, однако, знаю, что виртуальная машина загружается с "ubuntu:ubuntu" учетными данными, которые я намереваюсь зафиксировать, после того как это работает.
Надеюсь, вы сможете управлять аппаратными MAC-адресами ваших виртуальных ethernet-интерфейсов.
В этом случае у меня возникла похожая проблема, и ISC-связка в равной степени не взаимодействовала с моими усилиями по настройке конфигурации. Лучшее решение, которое я до сих пор надежно использую в течение многих лет, - это отредактировать файл leases file так, чтобы нужные IP-адреса были назначены соответствующему аппаратурному MAC.
Сначала вы просто запускаете клиентов, чтобы заполнить файл leases. Затем остановите клиентов и свяжите их, затем отредактируйте файл аренды.
.Как отметил друг, я могу использовать куклу для замены автоматически сгенерированного MAC-адреса в конфигурационном файле LXC. Это позволило бы мне использовать директиву фиксированного адреса с именем DNS.
.