Atribuir endereço IP fixo via DHCP por pesquisa de DNS

4

Prefácio

Estou construindo um ambiente de virtualização com o Ubuntu 14.04 e o LXC. Não quero escrever meu próprio modelo, pois a atualização de 12.04 a 14.04 mostrou que a compatibilidade com versões anteriores não é garantida.

Portanto, estou implantando minhas máquinas virtuais via lxc-create, usando o modelo padrão do Ubuntu. O DNS para os servidores é fornecido pelo Amazon Route 53, portanto, nenhum servidor DNS local é necessário.

Eu também uso o Puppet para configurar meus servidores, por isso quero manter o esforço manual na implantação mínima.

Agora, o modelo padrão do Ubuntu atribui endereços IP via DHCP. Portanto, eu preciso de um servidor DHCP local para atribuir endereços IP aos nós, para que eu possa fazer SSH neles e colocar o Puppet em funcionamento. Como o Puppet requer uma configuração de DNS adequada, atribuir endereços IP temporários não é uma opção, o cliente precisa obter o nome de host e o endereço IP corretos desde o início.

Pergunta

Qual servidor DHCP eu uso e como posso obtê-lo para atribuir o endereço IP com base apenas na opção DHCP do nome do host executando uma pesquisa de DNS nesse mesmo nome de host?

O que eu tentei

Eu tentei fazer isso funcionar usando o servidor ISC DHCP, no entanto, o manual afirma claramente:

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.

Eu também tentei criar uma classe que corresponde ao nome do host assim:

class "my-client-name" {
    match if option host-name = "my-client-name";
    fixed-address my-client-name.my-domain.com;
}

Infelizmente, a opção endereço fixo não é permitida nas declarações de classe . Posso substituí-lo por um pool de tamanho 1, que funciona como esperado:

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;
    }
}

No entanto, isso exigiria que eu administrasse os endereços IP em dois locais (Amazon Route53 e o servidor DHCP), que eu preferiria não fazer .

Sobre segurança

Como isso é usado apenas na fase de bootstrapping em uma rede interna e é substituído por uma configuração de rede estática pelo Puppet, isso não deve ser um problema do ponto de vista de segurança. Estou, no entanto, ciente de que a máquina virtual é inicializada com credenciais "ubuntu: ubuntu", que eu pretendo corrigir assim que isso estiver em execução.

    
por Janos Pasztor 01.06.2014 / 15:44

2 respostas

2

Espero que você possa controlar o hardware endereços MAC de suas interfaces Ethernet virtuais.

Nesse caso, tive um problema semelhante e o bind do ISC foi igualmente pouco cooperativo com meus esforços de configuração. A melhor solução, que ainda uso há anos de forma confiável, é editar o arquivo de concessões para que o desejado Endereços IP são atribuídos ao MAC de hardware correspondente.

Primeiro, basta iniciar os clientes para preencher o arquivo de concessões. Em seguida, pare os clientes e ligue-os e edite o arquivo de concessões.

    
por 01.06.2014 / 16:57
0

Como um amigo apontou, eu poderia usar o Puppet para substituir o endereço MAC gerado automaticamente no arquivo de configuração do LXC. Isso me permitiria usar a diretiva de endereço fixo com o nome DNS.

    
por 02.06.2014 / 01:00