Configurando dns dinâmico (ddns ) na aws usando aws-cli no linux.

Nesse artigo vou mostrar o passo a passo como você pode alterar um registro A em zona de dns hospedada na aws usando o aws-cli.

Pode ser útil em servidores em redes que não usam endereço de ip fixo.

Passo a passo:

  1. Criar um usuário no console da aws.

  2. Criar uma zona dns

  3. Conceder permissões especificas para o usuário.

  4. instalar o aws-cli no linux.

  5. Configurar o aws-cli

  6. Rodar o script

 

Iniciando .

1 – Criar um usuário no console da aws .

 

Clica em pesquisar > iam .

 

 

Depois em Usuários .

 

 

Clica em adicionar usuários .

 

 

Nome do Usuário : awsdns

Marcar : Chave de acesso: acesso programático .

Clica em Próximo .

 

 

Próximo .

 

 

Próximo.

 

 

Criar Usuário.

 

 

Copia o ID da chave de acesso e Chave de acesso secreta.

No meu caso :

ID da chave de acesso : AKIAQE5IJ4OKUMZLBHWM

Chave de acesso secreta : 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

 

2 – Criar uma zona dns .

 

Em route53 > Zonas hospedadas > Criar zona hospedada.

 

 

Em nome do domínio colocar teste.com.br ou seu próprio nome , depois criar zona .

 

 

Imagem da zona criada.

 

 

Dados da zona.

 

 

 

3 – Conceder permissões especificas para o usuário:

 

Em IAM > Usuários .

Clica no usuário awsdns .

 

 

 

Adicionar Política  em linha.

 

 

Clica em Serviço > pesquisar > você digita : route53  .

 

 

Clica em ações > Pesquisar > Selecionar  ListResourceRecordSets e   ChangeResourceRecordSets.

 

 

Depois.

 

 

Clica em Recursos > Adicionar ARN.

 

 

 

Você vai passar o id da zona que foi criada.

ID da zona hospedada.
Z06605111UZGPD5RNC7UN

Salvar Alterações.

 

 

Clica em revisar politica.

 

 

Insere o nome da politica : awsdns .

 

 

Resumo.

 

4 – instalar o aws-cli no linux.

 

Instalar o pacote unzip .

 

apt install unzip

 

Fazer o Download do pacote e instalar.

 

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
ubuntu@oracli:~$ /usr/local/bin/aws --version
aws-cli/2.4.8 Python/3.8.8 Linux/5.11.0-1016-oracle exe/x86_64.ubuntu.20 prompt/off

 

 

Próximo passo.

Os dados do usuário :

 

ID da chave de acesso : AKIAQE5IJ4OKUMZLBHWM

Chave de acesso secreta : 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

Zona padrão minha : us-east-1
aws configure
ubuntu@oracli:~$ aws configure
AWS Access Key ID [None]: AKIAQE5IJ4OKUMZLBHWM
AWS Secret Access Key [None]: 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
Default region name [None]: us-east-1
Default output format [None]: 
ubuntu@oracli:~$ 

 

Vamos consultar os dados da zona id Z06605111UZGPD5RNC7UN.

 

aws route53 list-resource-record-sets --hosted-zone-id Z06605111UZGPD5RNC7UN

 

 

 Instalar o pacote jq.

 

sudo apt install jq

 

 

Vamos usar o seguinte script para ajustar o registro A da zona .

Os seguintes dados precisam ser ajustados de acordo com seu senário .

 

Id da zona :
HOSTED_ZONE_ID="Z06605111UZGPD5RNC7UN" 
#Nome da sub-domínio:
NAME="dynamicdns.teste.com.br."

 

Segue o script completo.

 

#!/bin/bash

#Variable Declaration - Change These
HOSTED_ZONE_ID="Z06605111UZGPD5RNC7UN"
NAME="dynamicdns.teste.com.br."
TYPE="A"
TTL=60

#get current IP address
IP=$(curl http://checkip.amazonaws.com/)

#validate IP address (makes sure Route 53 doesn't get updated with a malformed payload)
if [[ ! $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
    exit 1
fi

#get current
aws route53 list-resource-record-sets --hosted-zone-id $HOSTED_ZONE_ID | \
jq -r '.ResourceRecordSets[] | select (.Name == "'"$NAME"'") | select (.Type == "'"$TYPE"'") | .ResourceRecords[0].Value' > /tmp/current_route53_value

cat /tmp/current_route53_value

#check if IP is different from Route 53
if grep -Fxq "$IP" /tmp/current_route53_value; then
    echo "IP Has Not Changed, Exiting"
    exit 1
fi


echo "IP Changed, Updating Records"

#prepare route 53 payload
cat > /tmp/route53_changes.json << EOF
    {
      "Comment":"Updated From DDNS Shell Script",
      "Changes":[
        {
          "Action":"UPSERT",
          "ResourceRecordSet":{
            "ResourceRecords":[
              {
                "Value":"$IP"
              }
            ],
            "Name":"$NAME",
            "Type":"$TYPE",
            "TTL":$TTL
          }
        }
      ]
    }
EOF

#update records
aws route53 change-resource-record-sets --hosted-zone-id $HOSTED_ZONE_ID --change-batch file:///tmp/route53_changes.json >> /dev/null

6 – Rodar o script.

 

Editar o arquivo no shell.

 

vi zone.sh

 

Conceder a permissão ao arquivo e executar .

 

chmod +x zone.sh
sudo ./zone.sh
ubuntu@oracli:~$ sudo ./zone.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    14  100    14    0     0     39      0 --:--:-- --:--:-- --:--:--    39
IP Changed, Updating Records
ubuntu@oracli:~$ 

 

Conferindo se o registro A foi atualizado.

 

 

Colocar na crontab.

 

sudo cp zone.sh /usr/local/bin
sudo chmod +x /usr/local/bin/zone.sh
sudo vi /etc/crontab

 

Rodar a cada 10 minutos .

 

*/10  * * * *   root  /usr/local/bin/zone.sh

 

Referências :

 

https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

https://docs.aws.amazon.com/pt_br/cli/latest/userguide/cli-configure-quickstart.html

https://www.cloudsavvyit.com/3103/how-to-roll-your-own-dynamic-dns-with-aws-route-53/

 

Deixe um comentário

O seu endereço de e-mail não será publicado.