Ir para o conteúdo

Como atribuo um servidor DNS estático a uma instância do EC2 que persiste quando eu reinicializo?

8 minuto de leitura
0

Quero configurar uma instância do Amazon Elastic Compute Cloud (Amazon EC2) que tenha um servidor DNS estático que persiste durante a reinicialização.

Resolução

Por padrão, as instâncias do EC2 associadas a uma Amazon Virtual Private Cloud (Amazon VPC) solicitam um endereço de servidor DNS na inicialização. O Protocolo de Configuração Dinâmica de Host (DHCP) envia a solicitação e, em seguida, a Amazon grava a resposta DHCP com os endereços do servidor DNS no arquivo /etc/resolv.conf.

Ao reiniciar a instância, você perde as modificações manuais no arquivo resolv.conf que contém endereços de servidor DNS personalizados. Para manter seu servidor DNS estático ao reinicializar sua instância, atualize sua configuração com base na sua distribuição Linux.

Importante: antes de alterar sua instância, use uma imagem de máquina da Amazon (AMI) para criar um backup. Ou use um snapshot do Amazon Elastic Block Store (Amazon EBS) para criar um backup. Quando você altera as configurações de rede de uma instância, ela pode ficar inacessível.

AL2023

O Amazon Linux 2023 (AL2023) usa systemd-resolved. Para obter mais informações, consulte systemd-resolved no site do Archlinux.

Configurar o resolvedor

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

Exemplo de arquivo de configuração:

# /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8
Domains=~.

Ou crie um drop-in. Por exemplo, use o arquivo /etc/systemd/resolved.conf.d/dns\ _servers.conf.

Exemplo de arquivo de configuração:

#/etc/systemd/resolved.conf.d/dns_servers.conf
[Resolve]
DNS=8.8.8.8 8.8.4.4
Domains=~.

Observação: defina a opção Domains=~., para que systemd-resolved não use os servidores 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. Quando nomes de domínio são resolvidos, eles usam seus respectivos servidores DNS por link.

Alterar a localização de pontos /etc/resolv.conf

Por padrão, /etc/resolv.conf aponta para o resolvedor de stub do host local. Para alterar o resolvedor, recrie o arquivo com campos atualizados ou apontando para algum lugar diferente do resolvedor de stub do host local. Por exemplo, é possível apontar para /run/systemd/resolve/resolv.conf, que contém uma lista simplificada de servidores usados pelo systemd-resolved.

Exemplo de status do arquivo de configuração quando você usa o cache DNS local:

### Default Symbolic link status : point to stub-resolv.conf
### Flow: DNS query => Local Cache DNS 127.0.0.53 ( systemd-resolved ) => External DNS

# ls -al /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Mar  5 02:28 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

# cat /etc/resolv.conf
nameserver 127.0.0.53      
options edns0 trust-ad
search .

### 127.0.0.53 is used for systemd-resolved ( local cache dns )
# lsof -nP -p `pidof systemd-resolved` |grep TCP
systemd-r 339 systemd-resolve   14u     IPv4               2753      0t0  TCP 127.0.0.53:53 (LISTEN)

Exemplo de status do arquivo de configuração quando você não usa o cache DNS local:

### Changed Symbolic link status : point to /run/systemd/resolve/resolv.conf
# cat  /run/systemd/resolve/resolv.conf
nameserver 1.1.1.1
nameserver 1.0.0.1
search .

# ln -sf ../run/systemd/resolve/resolv.conf /etc/resolv.conf

# ls -al /etc/resolv.conf
lrwxrwxrwx 1 root root 34 Apr  1 16:05 /etc/resolv.conf -> ../run/systemd/resolve/resolv.conf

Para testar sua configuração, execute os seguintes comandos:

# resolvectl status
# resolvectl query amazonaws.com

Exemplos de saídas:

# resolvectl status

Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: uplink
      DNS Servers 8.8.8.8 8.8.4.4
       DNS Domain ~.

Link 2 (ens5)
Current Scopes: DNS
     Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
   DNS Servers: 10.2.0.2
    DNS Domain: ap-northeast-2.compute.internal
# resolvectl query amazonaws.com
amazonaws.com: 207.171.166.22                               -- link: ens5
               72.21.206.80                                 -- link: ens5
               72.21.210.29                                 -- link: ens5

-- Information acquired via protocol DNS in 3.0ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: cache

AL1 ou AL2

Para configurar suas instâncias do Amazon Linux 1 (AL1) ou do Amazon Linux 2 (AL2), atualize o arquivo etc/dhcp/dhclient.conf ou o arquivo ifcfg-eth0.conf. Se você configurar os dois arquivos, os servidores DNS que você especificar no arquivo ifcfg-eth0.conf terão precedência.

Pré-requisitos: defina o valor do parâmetro PEERDNS no arquivo ifcfg-eth0.conf como sim. Quando você define o parâmetro PEERDNS para não, o Amazon EC2 ignora os servidores DNS especificados nos arquivos ifcfg-* ou fornecidos pelo DHCP.

Atualizar o arquivo etc/dhcp/dhclient.conf

Conclua as etapas a seguir:

  1. Abra o arquivo /etc/dhcp/dhclient.conf. Ou crie um novo.
    Observação: você deve ter permissões de usuário-raiz para editar esse arquivo. Use sudo -i para se tornar o usuário-raiz ou use sudo para implementar todos os comandos.
  2. Para substituir os servidores de nome do domínio, adicione o comando supersede ao arquivo:
    supersede domain-name-servers 000.000.000.000, 000.000.000.000;
    Observação: substitua 000.000.000.000 pelo endereço IP do servidor ou servidores DNS que você deseja que a instância use.
  3. Defina o parâmetro PEERDNS para sim no seu arquivo de configuração por interface /etc/sysconfig/network-scripts/ifcfg-*.
  4. Reinicialize a instância do EC2. 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.

Atualize o arquivo ifcfj-eth0

Conclua as etapas a seguir:

  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.
    O arquivo de exemplo a seguir mostra o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0 de uma instância Amazon Linux que é modificada para incluir dois servidores DNS personalizados:

    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 no seu arquivo de configuração por interface /etc/sysconfig/network-scripts/ifcfg-*.

Observação: se sua instância executa o Ubuntu 16.04 ou o Red Hat Enterprise Linux (RHEL) 7.5, você também pode usar as etapas de resolução anteriores.

Ubuntu 18.04, 20.04 e 22.04

No Ubuntu 18.04 o pacote netplan.io manipula a configuração da interface de rede e o serviço systemd-resolved usa um resolvedor stub para gerenciar consultas de DNS. O endereço IP do resolvedor de stub está localizado no arquivo /etc/resolv.conf, que é um link simbólico para o arquivo /run/systemd/resolve/stub-resolv.conf. Se o arquivo /etc/resolv.conf tiver as seguintes configurações, a declaração substituição em /etc/dhcp/dhclient.conf pode não funcionar conforme o esperado:

  • 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.

Para substituir os valores do servidor DNS, execute as seguintes etapas:

  1. Crie um arquivo chamado /etc/netplan/99-custom-dns.yaml com os seguintes dados:

    ### Create Customer DNS config
    # 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
    
    ### Required File Permission
    # chmod 600 /etc/netplan/99-custom-dns.yaml
    
    ### Checking Netplan Configuration status
    # netplan get
    network:
      version: 2
      ethernets:
        ens5:
          match:
            macaddress: "0a:e5:a1:40:a2:f5"
          nameservers:
            addresses:
            - 1.1.1.1
            - 1.0.0.1
          dhcp4: true
          dhcp4-overrides:
            use-dns: false
            use-domains: false
          dhcp6: false
          set-name: "ens5"

    Observação: substitua 1.1.1.1, 1.0.0.1 pelo endereço IP do seu servidor DNS. O Netplan armazena os arquivos de configuração no diretório /etc/netplan. O exemplo anterior usa a interface ens5. Certifique-se de que o nome da interface corresponda à sua interface. Para ver o nome da sua interface, execute o seguinte comando:

    # ip a

    Exemplo de saída:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
        link/ether 0a:e5:a1:40:a2:f5 brd ff:ff:ff:ff:ff:ff
        inet 172.31.35.233/20 metric 100 brd 172.31.47.255 scope global dynamic ens5
           valid_lft 2828sec preferred_lft 2828sec
        inet6 fe80::8e5:a1ff:fe40:a2f5/64 scope link
           valid_lft forever preferred_lft forever
  2. Para converter o arquivo YAML do Netplan em arquivos de configuração, execute o seguinte comando netplan:

    # netplan generate
    # netplan try
    # netplan apply

    Observação: você pode receber a mensagem “WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running”. Ignore a mensagem e prossiga para a próxima etapa. Se você não quiser ver a mensagem de AVISO, instale o pacote Open vSwitch with DPDK. O endereço IP do resolvedor stub está localizado em /etc/resolv.conf. Esse é um comportamento esperado porque o endereço IP do resolvedor de stub é local em seu sistema operacional (SO). 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. Para confirmar se o sistema usa corretamente os endereços IP do servidor DNS pretendidos, execute o seguinte comando com base na sua versão do Ubuntu:
    Ubuntu 18.04:

    systemd-resolve --status

    Ubuntu 20.04 e 22.04:

    resolvectl status

RHEL 7.5

Por padrão, o serviço NetworkManager gerencia o arquivo resolv.conf para distribuições RHEL. Em seguida, o serviço preenche o arquivo com servidores DNS fornecidos pelo DHCP. Para usar servidores DNS personalizados, bloqueie o NetworkManager no arquivo resolv.conf para que o arquivo resolv.conf ignore os servidores DNS fornecidos pelo DHCP.

Conclua as etapas para Atualizar o arquivo etc/dhcp/dhclient.conf em AL1 ou AL2. Ou crie o arquivo /etc/NetworkManager/conf.d/90-dns-none.conf com o conteúdo a seguir:

[main]
dns=none

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

Informações relacionadas

Conjuntos de opções DHCP no Amazon VPC

arquivos de rede no site Archlinux

resolved.conf (5) no site Archlinux

dhclient.conf (5) no site Archlinux

networkmanager.conf (5) no site Archlinux

AWS OFICIALAtualizada há 9 meses