Skip to main content

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.

Importante

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.

Requisito: Codificação em Base64

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.

Siga estes três passos para provisionar uma instância Linux com o IPv6 desativado.

  1. 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
  2. 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)
  3. 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.

  1. 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>
  2. 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)
  3. 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.

Por que usar o parâmetro do kernel?

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.

  1. Acesse sua instância via SSH.

  2. 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
  3. Atualize o GRUB para aplicar a mudança:

    sudo update-grub
  4. 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
  5. 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
  6. Reinicie a instância:

    sudo reboot
  7. Verifique com o comando ip a. Nenhuma linha inet6 deve aparecer nas interfaces.

  1. Acesse sua instância via SSH.

  2. 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
  3. 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
  4. 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
  5. 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
  6. Reinicie a instância:

    sudo reboot
  7. Confirme a desativação com ip a. Nenhuma linha inet6 deve aparecer nas interfaces.

  1. Acesse sua instância via SSH.

  2. 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
  3. 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
  4. 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
  5. 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
  6. Reinicie a instância:

    sudo reboot
  7. Verifique o resultado com ip a. Nenhuma linha inet6 deve aparecer nas interfaces.

  1. Acesse sua instância via SSH.

  2. 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
  3. Atualize o GRUB:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  4. 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
  5. 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
  6. Reinicie a instância:

    sudo reboot
  7. Confirme com ip a. Nenhuma linha inet6 deve aparecer nas interfaces.

  1. Acesse sua instância Windows via RDP.
  2. Abra o Editor do Registro (regedit).
  3. Navegue até a chave: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\
  4. Crie um novo Valor DWORD (32 bits) com o nome DisabledComponents.
  5. Modifique o valor de DisabledComponents para FF (Base Hexadecimal).
  6. Reinicie a instância para que as alterações entrem em vigor.
Permissões de Administrador

Execute o PowerShell como Administrador.

  1. 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
  2. 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.