Como Desativar o IPv6 em sua Instância
A Magalu Cloud foi projetada com uma visão de futuro, adotando o IPv6 como parte integral de sua arquitetura de rede. O IPv6 é o sucessor do IPv4 e oferece um espaço de endereçamento vastamente maior, além de melhorias em eficiência e segurança, sendo crucial para o crescimento sustentável da internet.
Por essa razão, a desativação do IPv6 não é uma funcionalidade nativa na plataforma (como a exclusão de sub-redes IPv6 ou a remoção de endereços em VNICs). Acreditamos que ambas as versões do protocolo devem coexistir para garantir a máxima compatibilidade e preparação para o futuro.
No entanto, entendemos que algumas aplicações ou sistemas legados podem ter requisitos específicos que exigem a desativação do IPv6. Para esses casos, a configuração deve ser realizada diretamente no sistema operacional da sua instância.
Desativar o IPv6 pode ter efeitos colaterais em certas aplicações ou serviços do sistema operacional que dependem dele. Proceda com cautela e apenas se for um requisito estrito para o seu ambiente. A recomendação geral, sempre que possível, é manter o IPv6 ativado.
Este guia demonstra como desativar o IPv6 na Magalu Cloud, seja de forma automatizada via CLI durante a criação da instância, ou manualmente em uma máquina já existente.
Opção 1: Desativar Durante a Criação da Instância (via CLI e User Data)
A forma mais eficiente de aplicar essa configuração é através do parâmetro --user-data ao criar uma instância com a CLI da Magalu Cloud (mgc). O script fornecido será executado na primeira inicialização, garantindo que a VM já comece com o IPv6 desativado.
A API da Magalu Cloud espera que o conteúdo do script user-data seja codificado no formato Base64. O processo abaixo demonstra como criar o script, codificá-lo e usá-lo no comando de criação.
- Linux (Cloud-Init)
- Windows Server (PowerShell)
Siga estes três passos para provisionar uma instância Linux com o IPv6 desativado.
-
Crie um arquivo de script, por exemplo,
disable-ipv6.sh:disable-ipv6.sh#!/bin/bash
# 1. Desativa o IPv6 via parâmetro do kernel no GRUB (método definitivo)
sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 ipv6.disable=1"/' /etc/default/grub
update-grub
# 2. Impede o cloud-init de regenerar a configuração de rede a cada boot
tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<'EOF'
network: {config: disabled}
EOF
# 3. Adiciona as regras sysctl como camada complementar de segurança
tee /etc/sysctl.d/99-disable-ipv6.conf <<'EOF'
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
sysctl -p /etc/sysctl.d/99-disable-ipv6.conf -
Codifique o script em Base64 e armazene em uma variável. O parâmetro
-w 0é importante para evitar quebras de linha na saída.USER_DATA_B64=$(base64 -w 0 disable-ipv6.sh) -
Crie a instância usando a CLI
mgc, passando o conteúdo codificado no parâmetro--user-data.mgc virtual-machine instances create \
--name="minha-vm-sem-ipv6" \
--image.name="Ubuntu 24.04 LTS" \
--machine-type.name="BV1-1-10" \
--ssh-key-name="[NOME_DA_SUA_CHAVE_SSH]" \
--user-data="$USER_DATA_B64"
O processo para Windows é similar, mas usa um script PowerShell.
-
Crie um arquivo de script, por exemplo,
disable-ipv6.ps1. Note que as tags<powershell>são necessárias dentro do arquivo.disable-ipv6.ps1<powershell>
# Cria a chave de registro para desativar componentes do IPv6
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\TCPIP6\Parameters" -Name DisabledComponents -PropertyType DWord -Value 0xFF -Force
# Reinicia a máquina para aplicar a configuração
Restart-Computer -Force
</powershell> -
Codifique o script em Base64 usando PowerShell e armazene em uma variável:
$UserDataFile = ".\disable-ipv6.ps1"
$UserDataBytes = [System.IO.File]::ReadAllBytes($UserDataFile)
$USER_DATA_B64 = [System.Convert]::ToBase64String($UserDataBytes) -
Crie a instância com a CLI
mgc, passando a variável no parâmetro--user-data.mgc virtual-machine instances create \
--name="meu-windows-sem-ipv6" \
--image.name="windows-server-2022" \
--machine-type.name="BV1-2-20" \
--ssh-key-name="[NOME_DA_SUA_CHAVE_SSH]" \
--user-data="$USER_DATA_B64"
Opção 2: Desativar em uma Instância Existente (Método Manual)
Se você precisa desativar o IPv6 em uma máquina virtual que já está em execução, siga os passos abaixo de acordo com o sistema operacional.
Em ambientes cloud com cloud-init e Netplan, a abordagem apenas via sysctl não é suficiente para persistir entre reinicializações. O kernel inicializa as interfaces de rede e atribui endereços IPv6 link-local (fe80::) antes que as regras sysctl sejam aplicadas pelo systemd.
A solução definitiva é passar o parâmetro ipv6.disable=1 diretamente ao kernel via GRUB. Dessa forma, o suporte a IPv6 é desativado no momento zero do boot, antes de qualquer interface ser inicializada.
- Ubuntu / Debian
- Rocky / Oracle / RHEL
- Fedora
- openSUSE
- Windows Server
-
Acesse sua instância via SSH.
-
Adicione o parâmetro de desativação ao GRUB:
sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 ipv6.disable=1"/' /etc/default/grub -
Atualize o GRUB para aplicar a mudança:
sudo update-grub -
Impeça o cloud-init de regenerar a configuração de rede a cada boot:
sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<'EOF'
network: {config: disabled}
EOF -
Adicione as regras sysctl como camada complementar:
sudo tee /etc/sysctl.d/99-disable-ipv6.conf <<'EOF'
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
sudo sysctl -p /etc/sysctl.d/99-disable-ipv6.conf -
Reinicie a instância:
sudo reboot -
Verifique com o comando
ip a. Nenhuma linhainet6deve aparecer nas interfaces.
-
Acesse sua instância via SSH.
-
Adicione o parâmetro de desativação ao GRUB:
sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 ipv6.disable=1"/' /etc/default/grub -
Atualize o GRUB. O comando varia conforme o firmware da máquina:
# Para sistemas com BIOS:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# Para sistemas com UEFI:
sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg -
Impeça o cloud-init de regenerar a configuração de rede a cada boot:
sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<'EOF'
network: {config: disabled}
EOF -
Adicione as regras sysctl como camada complementar:
sudo tee /etc/sysctl.d/99-disable-ipv6.conf <<'EOF'
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
sudo sysctl -p /etc/sysctl.d/99-disable-ipv6.conf -
Reinicie a instância:
sudo reboot -
Confirme a desativação com
ip a. Nenhuma linhainet6deve aparecer nas interfaces.
-
Acesse sua instância via SSH.
-
Adicione o parâmetro de desativação ao GRUB:
sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 ipv6.disable=1"/' /etc/default/grub -
Atualize o GRUB. O comando varia conforme o firmware da máquina:
# Para sistemas com BIOS:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# Para sistemas com UEFI:
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg -
Impeça o cloud-init de regenerar a configuração de rede a cada boot:
sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<'EOF'
network: {config: disabled}
EOF -
Adicione as regras sysctl como camada complementar:
sudo tee /etc/sysctl.d/99-disable-ipv6.conf <<'EOF'
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
sudo sysctl -p /etc/sysctl.d/99-disable-ipv6.conf -
Reinicie a instância:
sudo reboot -
Verifique o resultado com
ip a. Nenhuma linhainet6deve aparecer nas interfaces.
-
Acesse sua instância via SSH.
-
Adicione o parâmetro de desativação ao GRUB:
sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 ipv6.disable=1"/' /etc/default/grub -
Atualize o GRUB:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg -
Impeça o cloud-init de regenerar a configuração de rede a cada boot:
sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<'EOF'
network: {config: disabled}
EOF -
Adicione as regras sysctl como camada complementar:
sudo tee /etc/sysctl.d/99-disable-ipv6.conf <<'EOF'
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
sudo sysctl -p /etc/sysctl.d/99-disable-ipv6.conf -
Reinicie a instância:
sudo reboot -
Confirme com
ip a. Nenhuma linhainet6deve aparecer nas interfaces.
- 🖥️ Interface Gráfica (Regedit)
- >_ PowerShell
- Acesse sua instância Windows via RDP.
- Abra o Editor do Registro (
regedit). - Navegue até a chave:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\ - Crie um novo Valor DWORD (32 bits) com o nome
DisabledComponents. - Modifique o valor de
DisabledComponentsparaFF(Base Hexadecimal). - Reinicie a instância para que as alterações entrem em vigor.
Execute o PowerShell como Administrador.
- Execute o comando para criar a chave de registro:
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\TCPIP6\Parameters" -Name DisabledComponents -PropertyType DWord -Value 0xFF -Force - Reinicie a instância para aplicar a alteração:
Restart-Computer -Force
Verificação no Windows Server
Após a reinicialização, confirme com ipconfig no Prompt de Comando ou verificando as propriedades da sua conexão de rede (ncpa.cpl), onde a opção para "Protocolo IP Versão 6" estará desmarcada.