Eu encontrei uma boa solução para isso. Eu tenho usado o terraform para iniciar e fazer a configuração inicial de minhas instâncias usando dados de usuário cloud-init, e o seguinte arquivo de dados do usuário EC2 funciona bem para mim:
#cloud-config
preserve_hostname: false
hostname: centos-01
fqdn: centos-01.example.com
manage_etc_hosts: true
write_files:
- path: /etc/cloud/cloud.cfg.d/99-custom-networking.cfg
owner: root:root
permissions: 0600
content: |
network:
version: 1
config:
- type: physical
name: eth0
subnets:
- type: dhcp
- type: dhcp6
power_state:
mode: reboot
delay: now
message: Rebooting post-config
timeout: 30
condition: True
As partes importantes dessa configuração são a seção write_files
, que instala a configuração cloud-init apropriada para ativar o IPv6 e, em seguida, power_state
, que aciona uma reinicialização imediata de pós-configuração, que aplica as alterações na configuração de rede .
Após a reinicialização, a configuração da rede é assim:
[centos@centos-01 ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=dhcp
DEVICE=eth0
DHCPV6C=yes
IPV6INIT=yes
IPV6_AUTOCONF=no
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
Estou feliz com a solução, embora não tenha certeza do motivo de não poder simplesmente especificar a configuração de rede em meus dados de usuário diretamente, em vez de ter que gravá-la em um arquivo e reinicializá-la. De qualquer forma, isso funciona e é bastante indolor.