No meu caso específico, meu roteador concede endereços IPv6 para minhas VMs em execução no meu servidor (em premissas) via DHCP e, portanto, não preciso codificar ou gerar qualquer configuração de IP. Eu só preciso informar um servidor DNS sobre os endereços gerados dinamicamente.
O snippet abaixo (do meu script cloud-config
) cria /etc/sysctl.conf
para que ele ative o IPv6 em uma VM que esteja executando o Centos7.
Ele também cria um script de shell que atualiza o endereço IPv6 atual para FreeDNS a cada 15 minutos, exigindo o FQDN e uma chave DDNS que podem ser obtidos quando você configura um registro AAAA marcado como dinâmico.
local fqdn="vm.example.com"
local ddnspasswd='obtain-ddns-key-at-dns.he.net'
cat > user-data <<EOF
# configure IPv6
write_files:
- content: |
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
path: /etc/sysctl.conf
owner: root:root
permissions: 0600
- content: |
#!/bin/bash
function ddns_update_ipv4 {
local fqdn="${fqdn}"
local ddnspasswd="${ddnspasswd}"
/usr/bin/curl -4 "https://dyn.dns.he.net/nic/update" -d "hostname=\${fqdn}" -d "password=\${ddnspasswd}" >> /dev/null 2>&1
local STATUS=\$?
if [[ \$STATUS -ne 0 ]]; then
echo "IPv4 DNS update failed, return code: \$STATUS" >> /var/log/ddns.log
return 1
fi
return 0
}
function ddns_update_ipv6 {
local fqdn="${fqdn}"
local ddnspasswd="${ddnspasswd}"
/usr/bin/curl -6 "https://dyn.dns.he.net/nic/update" -d "hostname=\${fqdn}" -d "password=\${ddnspasswd}" >> /dev/null 2>&1
local STATUS=\$?
if [[ \$STATUS -ne 0 ]]; then
echo "IPv6 DNS update failed, return code: \$STATUS" >> /var/log/ddns.log
return 1
fi
return 0
}
ddns_update_ipv6
path: /sbin/ddns-update
owner: root:root
permissions: 0500
# Update IPv6 on FreeDNS (http://dns.he.net/) every 15 mins
runcmd:
- systemctl stop network && systemctl start network
- echo "0,15,30,45 * * * * /sbin/ddns-update" | tee -a /etc/crontab
- crontab -u root /etc/crontab
EOF