Minha instância privada do Amazon EC2 está executando Amazon Linux, Ubuntu ou RHEL. Como atribuo um servidor DNS estático à instância do EC2 que persiste durante a reinicialização?

7 minuto de leitura
0

Quero configurar uma instância do Amazon Elastic Compute Cloud (Amazon EC2) com entradas de servidor DNS estáticas que persistem durante a reinicialização.

Breve descrição

Por padrão, as instâncias do Amazon EC2 associadas a uma Amazon Virtual Private Cloud (Amazon VPC) solicitam um endereço de servidor DNS na inicialização. Essa solicitação é enviada usando o Protocolo de Configuração Dinâmica de Host (DHCP). A resposta DHCP retorna os endereços de servidor DNS gravados no arquivo local /etc/resolv.conf. As modificações manuais no resolv.conf com endereços de servidor DNS personalizados são perdidas ao reiniciar a instância. O método usado para resolver esse problema depende da sua distribuição Linux. Para mais informações sobre os servidores VPCs e DNS, consulte Conjuntos de opções DHCP no Amazon VPC.

Resolução

Importante: Antes de alterar sua instância do EC2, crie um backup usando um snapshot da imagem de máquina da Amazon (AMI) ou do Amazon Elastic Block Store (Amazon EBS). Alterar as configurações de rede de uma instância pode torná-la inacessível.

Amazon Linux 2023

O Amazon Linux 2023 usa systemd-resolved. Para obter mais informações, consulte resolved.conf (5) no site archlinux.org.

Configurar o resolvedor

Edite o arquivo /etc/systemd/resolved.conf e altere o DNS e as Opções de domínio:

# /etc/systemd/resolved.conf

[Resolve]
DNS=8.8.8.8
Domains=~.

Ou crie um drop-in. Por exemplo, /etc/systemd/resolved.conf.d/dns_servers.conf.

#/etc/systemd/resolved.conf.d/dns_servers.conf

[Resolve]
DNS=8.8.8.8 8.8.4.4
Domains=~.

Observação: lembre-se ao configurar a opção Domains=~. no resolved.conf(5):

  • Se a opção Domains=~. não estiver definida, então systemd-resolved pode usar os servidor DNS por link na configuração por link.
  • A opção Domains=~. não afeta as consultas dos nomes de domínio que correspondem aos domínios de pesquisa mais especificados nas configurações por link. Os nomes de domínio ainda são resolvidos usando seus respectivos servidores DNS por link.

Para obter mais informações sobre a configuração por link, consulte os arquivos systemd-networkd #network no site archlinux.org.

Alterar a localização /etc/resolv.conf aponta para

Por padrão, /etc/resolv.conf aponta para o resolvedor de stub localhost. Para alterar isso, recrie o arquivo com conteúdo diferente ou apontando para algum lugar diferente do resolvedor de stub localhost. Por exemplo, você pode apontar para /run/systemd/resolve/resolv.conf, que contém uma lista simplificada de servidores usados pelo systemd-resolved.

É possível testar sua configuração usando o comando resolvectl status e, por exemplo, resolvectl query amazonaws.com e revisar a saída.

Amazon Linux, Amazon Linux 2

Use uma das opções a seguir para configurar sua instância do Amazon EC2. Se você aplicar ambas as opções, então os servidores DNS especificados no arquivo ifcfg-eth0 terão precedência (opção 2).

Para qualquer opção funcionar, o valor de parâmetro PEERDNS no arquivo ifcfg-eth0 deve ser definido como sim. Definir o parâmetro PEERDNS para não significa que os servidores DNS especificados nos arquivos ifcfg-* ou fornecidos pelo DHCP são ignorados.

Opção 1:

1.Edite ou crie o arquivo /etc/dhcp/dhclient.conf.

Observação: você deve ter privilégios de usuário raiz para editar esse arquivo. Torne-se raiz com sudo -i ou implemente todos os comandos com sudo.

2.Adicione o comando supersede para o arquivo para substituir os servidores de nome do domínio. No exemplo a seguir, substitua xxx.xxx.xxx.xxx pelo endereço IP do servidor ou servidores DNS que você deseja que a instância use:

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

Após a modificação anterior, o arquivo resolv.conf atualiza na reinicialização da instância para conter apenas os servidores DNS que você especificou no arquivo dhclient. Para mais informações sobre o comando supersede, consulte dhclient.conf(5) na página do manual do Linux.

3.Defina o parâmetro PEERDNS para sim nos seus arquivos de configuração por interface (/etc/sysconfig/network-scripts/ifcfg-*).

4.Reinicialize a instância do EC2.

Opção 2:

1.Para substituir os valores do servidor DNS no arquivo /etc/dhcp/dhclient.conf, especifique os servidores DNS nos arquivos de configuração por interface (/etc/sysconfig/network-scripts/ifcfg-*).

Por exemplo, os exemplos a seguir mostram o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0 de uma instância Amazon Linux modificada para incluir dois servidores DNS personalizados (DNS1 e DNS2):

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
PERSISTENT_DHCLIENT=yes
RES_OPTIONS="timeout:2 attempts:5"
DHCP_ARP_CHECK=no
MTU="9001"
DNS1=8.8.8.8
DNS2=8.8.4.4

2.Defina o parâmetro PEERDNS para sim nos seus arquivos de configuração por interface (/etc/sysconfig/network-scripts/ifcfg-*).

Ubuntu 16.04

1.Edite ou crie o arquivo /etc/dhcp/dhclient.conf.

Observação: você deve ter privilégios de usuário raiz para editar esse arquivo. Torne-se raiz com sudo -i ou implemente todos os comandos com sudo.

2.Adicione o comando supersede para o arquivo para substituir os servidores de nome do domínio. No exemplo a seguir, substitua xxx.xxx.xxx.xxx pelo endereço IP do servidor ou servidores DNS que você deseja que a instância use:

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

Após essa modificação, o arquivo resolv.conf atualiza na reinicialização da instância para conter apenas os servidores DNS que você especificou no arquivo dhclient. Para mais informações sobre o comando supersede, consulte o dhclient.conf (5) na página do manual do Linux.

3.Reinicialize a instância.

Ubuntu 18.04

Por padrão, no Ubuntu 18.04 o pacote netplan.io manipula a configuração da interface de rede e o serviço systemd-resolved lida com consultas de DNS usando um resolvedor stub. O IP do resolvedor stub está localizado em /etc/resolv.conf.

Por sua vez, o arquivo /etc/resolv.conf é um link simbólico para o arquivo /run/systemd/resolve/stub-resolv.conf. A declaração de substituição em /etc/dhcp/dhclient.conf pode não funcionar conforme o esperado se uma das seguintes opções for verdadeira para o arquivo /etc/resolv.conf:

  • O arquivo não é um link simbólico em sua instância.
  • O arquivo é um link simbólico apontando para um arquivo diferente, como /run/systemd/resolve/resolv.conf.

Qualquer uma dessas condições indica a personalização da configuração padrão do Ubuntu 18.04.

Execute as seguintes etapas para substituir os valores do servidor DNS:

1.O Netplan normalmente armazena os arquivos de configuração no diretório /etc/netplan. Crie um arquivo chamado /etc/netplan/99-custom-dns.yaml e preencha-o com as seguintes linhas. Certifique-se de substituir os endereços IP do servidor DNS do espaço reservado pelos seus endereços preferidos:

cat << 'EOF' | sudo tee /etc/netplan/99-custom-dns.yaml
network:
  version: 2
  ethernets:
    ens5:
      nameservers:
        addresses: [1.1 .1 .1, 1.0 .0 .1]
      dhcp4-overrides:
        use-dns: false
        use-domains: false
EOF

Observação: no exemplo anterior, a interface é especificada como ens5. Certifique-se de que o nome da interface corresponda à interface da sua configuração. Para visualizar seu nome de interface, use o comando ip a.

2.Execute o seguinte comando:

netplan generate

Após essas alterações, você ainda verá o IP do resolvedor stub em /etc/resolv.conf. Isso é esperado. O IP do resolvedor stub é local em seu sistema operacional. Em segundo plano, o resolvedor stub usa os servidores DNS que você especificou no arquivo 99-custom-dns.yaml.

3.Reinicialize a instância.

4.Execute o comando systemd-resolve para confirmar que o sistema escolhe o endereço IP do servidor DNS corretamente:

systemd-resolve --status

RHEL 7.5

Por padrão, o serviço NetworkManager gerencia o arquivo resolv.conf. Em seguida, o serviço preenche o arquivo com servidores DNS fornecidos pelo DHCP. Impeça que o NetworkManager gerencie o arquivo resolv.conf de forma que o arquivo resolv.conf ignore os servidores DNS fornecidos pelo DHCP.

Opção 1:

1.Edite ou crie o arquivo /etc/dhcp/dhclient.conf.

Observação: você deve ter privilégios de usuário raiz para editar esse arquivo. Torne-se raiz com sudo -i ou implemente todos os comandos com sudo.

2.Adicione o comando supersede para o arquivo para substituir os servidores de nome do domínio. No exemplo a seguir, substitua xxx.xxx.xxx.xxx pelo endereço IP do servidor ou servidores DNS que você deseja que a instância use:

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

Após essa modificação, o arquivo resolv.conf atualiza na reinicialização da instância para conter apenas os servidores DNS que você especificou no arquivo dhclient. Para mais informações sobre o comando supersede, consulte o dhclient.conf (5) na página do manual do Linux.

3.Defina o parâmetro PEERDNS para sim nos seus arquivos de configuração por interface (/etc/sysconfig/network-scripts/ifcfg-*).

4.Reinicialize a instância.

Opção 2:

1.Crie o arquivo /etc/NetworkManager/conf.d/90-dns-none.conf com o conteúdo a seguir:

[main]
dns=none

2.Reinicialize a instância, e em seguida preencha o arquivo /etc/resolv.conf manualmente.

Informações relacionadas

networkmanager.conf (5) (página inicial do Linux)

AWS OFICIAL
AWS OFICIALAtualizada há um ano