IPv6 (Português) - ArchWiki

Jump to content

# IPv6 (Português)

From ArchWiki
Status de tradução: Este artigo é uma tradução de IPv6. Data da última tradução: 2019-11-06. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Artigos relacionados

- Configuração de tunnel broker IPv6

No Arch Linux, IPv6 está habilitado por padrão.

## Descoberta de vizinhança

Pingar o endereço multicast `ff02::1` resulta em todos os hosts no escopo link-local responderem. Uma interface tem que ser especificada:

    $ ping ff02::1%eth0

Após isso, você pode obter uma lista de todos os vizinhos na rede local com:

    $ ip -6 neigh

Com um ping para o endereço multicast `ff02::2` apenas roteadores vão responderem.

Se você adicionar uma opção `-I seu-ipv6-global`, hosts link-local vão responder com seus endereços de escopo link-global. A interface pode ser omitida neste caso:

    $ ping -I 2001:4f8:fff6::21 ff02::1

## Autoconfiguração sem estado (SLAAC)

A maneira mais fácil de adquirir um endereço IPv6, desde que sua rede esteja configurada, é através de Stateless address autoconfiguration (abreviado para SLAAC, que poderia ser traduzido para português como "Autoconfiguração de endereço sem estado"). O endereço é inferido automaticamente do prefixo que o seu roteador anuncia e não requer nenhuma configuração adicional nem software especializado, como um cliente DHCP.

### Para clientes

Se você está usando o netctl, você só precisa adicionar a seguinte linha para sua configuração Ethernet ou sem fio.

    IP6=stateless

Se você está usando o NetworkManager, então endereços IP são habilitados automaticamente se houver anúncios para eles na rede.

Observe que a autoconfiguração sem estado funciona com a condição de que pacotes icmp IPv6 sejam permitidos em toda a rede. Portanto, para o lado do cliente, os pacotes `ipv6-icmp` devem ser aceitos. Se você estiver usando um Firewall stateful simples ou o iptables, você só precisa adicionar:

    -A INPUT -p ipv6-icmp -j ACCEPT

Se você estiver usando um outro front-end de firewall (ufw, shorewall, etc), consulte sua documentação sobre como habilitar os pacotes `ipv6-icmp`.

Se a sua solução de gerenciamento de rede escolhida não ter suporte a configuração do resolvedor DNS com IPv6 sem estado (por exemplo, netctl), será possível usar rdnssd(8) do pacote ndisc6 para isso.

### Para gateways

Para distribuir corretamente os IPv6s aos clientes da rede, precisaremos usar um daemon de anúncio. A ferramenta padrão para este trabalho é radvd e está disponível em repositórios oficiais. Configuração do radvd é bastante simples. Edite `/etc/radvd.conf` para incluir:

    # substitua LAN com sua interface de LAN
    interface LAN {
      AdvSendAdvert on;
      MinRtrAdvInterval 3;
      MaxRtrAdvInterval 10;
      prefix ::/64 {
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr on;
      };
    };

A configuração acima dirá aos clientes para se autoconfigurarem usando endereços do bloco /64 anunciado. Observe que a configuração acima anuncia "todos os prefixos disponíveis" atribuídos à interface de LAN. Se você quiser limitar os prefixos anunciados em vez de `::/64` use o prefixo desejado, por exemplo, `2001:DB8::/64`. O bloco `prefix` pode ser repetido várias vezes para mais prefixos.

Para anunciar servidores DNS para seus clientes LAN, você pode usar o recurso RDNSS. Por exemplo, adicione as seguintes linhas a `/etc/radvd.conf` para anunciar os servidores DNS v6 do Google:

    RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 {
    };

O gateway também deve permitir o tráfego de pacotes `ipv6-icmp` em todas as cadeias básicas. Para um Firewall stateful simples ou o iptables, adicione:

    -A INPUT -p ipv6-icmp -j ACCEPT
    -A OUTPUT -p ipv6-icmp -j ACCEPT
    -A FORWARD -p ipv6-icmp -j ACCEPT

Ajuste de acordo com outros front-ends de firewall e não se esqueça de habilitar `radvd.service`.

## Extensões de privacidade

Quando um cliente adquire um endereço através do SLAAC, seu endereço IPv6 é derivado do prefixo anunciado e do endereço MAC da interface de rede do cliente. Isso pode aumentar as preocupações de segurança, pois o endereço MAC do computador pode ser facilmente derivado pelo endereço IPv6. Para resolver este problema, o padrão IPv6 Privacy Extensions (RFC 4941) foi desenvolvido. Com as extensões de privacidade, o kernel gera um endereço temporário que é destacado do endereço original configurado automaticamente. Os endereços privados são preferidos ao se conectar a um servidor remoto, portanto, o endereço original fica oculto. Para ativar as extensões de privacidade, reproduza as seguintes etapas:

Adicione essas linhas a `/etc/sysctl.d/40-ipv6.conf`:

    # Habilita IPv6 Privacy Extensions
    net.ipv6.conf.all.use_tempaddr = 2
    net.ipv6.conf.default.use_tempaddr = 2
    net.ipv6.conf.nic0.use_tempaddr = 2
    ...
    net.ipv6.conf.nicN.use_tempaddr = 2

Sendo que `nic0` a `nicN` são suas placas de rede (Network Interface Cards). Você pode encontrar seus nomes usando as instruções em Configuração de rede#Listando interfaces de rede. Os parâmetros `all.use_tempaddr` ou `default.use_tempaddr` não são aplicados nas NICs que já existem quando as configurações de sysctl são executadas.

Após uma reinicialização, no final, Privacy Extensions devem estar habilitadas.

### dhcpcd

dhcpcd inclui em seu arquivo de configuração padrão desde a versão 6.4.0 a opção `slaac private`, que ativa "Endereços IPv6 privados estáveis ao invés de baseados em hardware", implementando RFC 7217. Portanto, não é necessário alterar nada, exceto se for desejado alterar o endereço IPv6 com mais frequência do que a cada vez que o sistema for conectado a uma nova rede. Defina para `slaac hwaddr` para um endereço estável.

### NetworkManager

NetworkManager não honra as configurações colocadas em `/etc/sysctl.d/40-ipv6.conf`. Isso pode ser verificado executando `$ ip -6 addr show interface` após reiniciar: nenhum endereço `scope global temporary` aparece além do regular.

Para habilitar IPv6 Privacy Extensions por padrão, adicione essas linhas a `/etc/NetworkManager/NetworkManager.conf`

    /etc/NetworkManager/NetworkManager.conf

    ...
    [connection]
    ipv6.ip6-privacy=2

Para habilitar as IPv6 Privacy Extensions para conexões gerenciadas pelo NetworkManager, edite o arquivo de conexão desejado em `/etc/NetworkManager/system-connections/` e acrescente à sua seção `[ipv6]` o par de valores-chave `ip6-privacy=2`:

    /etc/NetworkManager/system-connections/conexao-exemplo

    ...
    [ipv6]
    method=auto
    ip6-privacy=2

Nota Embora possa parecer que o endereço IPv6 `scope global temporary` criado ao ativar as Privacy Extensions nunca é renovado (nunca muda para o status `deprecated` no termo de sua vida útil `valid_lft`), deve ser verificado durante um período de tempo mais longo que esse endereço realmente muda.

### systemd-networkd

Systemd-networkd também não honra as configurações `net.ipv6.conf.xxx.use_tempaddr` colocadas em `/etc/sysctl.d/40-ipv6.conf` a menos que a opção `IPv6PrivacyExtensions` esteja definida com o valor `kernel` no(s) arquivo(s) .network.

Outras opções para as IPv6 Privacy Extensions como:

    net.ipv6.conf.xxx.temp_prefered_lft
    net.ipv6.conf.xxx.temp_valid_lft

são honradas.

Nota `temp_prefered_lft` é o nome da variável, preferred tem que ser escrito errado mesmo.

Veja systemd-networkd e systemd.network(5) para detalhes.

### connman

Adicione a `/var/lib/connman/settings` sob a seção global:

    [global]
    IPv6.privacy=preferred

## Endereços privados estáveis

Outra opção é um endereço IP privado estável (RFC 7217). Isso permite que os IPs sejam estáveis dentro de uma rede sem expor o endereço MAC da interface.

Para que o kernel gere uma chave (por `wlan0`, por exemplo) podemos definir:

    sysctl net.ipv6.conf.wlan0.addr_gen_mode=3

Desative a interface e ative-a novamente e você deverá ver `stable-privacy` ao lado de cada endereço IPv6 depois de executar `ip addr show dev wlan0`. O kernel gerou um segredo de 128 bits para gerar endereços IP para esta interface, para vê-lo rodar `sysctl net.ipv6.conf.wlan0.stable_secret`. Vamos persistir esse valor, então adicione as seguintes linhas ao `/etc/sysctl.d/40-ipv6.conf`:

    # Habilita modo de privacidade estável de IPv6
    net.ipv6.conf.wlan0.stable_secret = <saída do comando anterior>
    net.ipv6.conf.wlan0.addr_gen_mode = 2

### NetworkManager

As configurações acima não são respeitadas pelo NetworkManager, mas o NetworkManager usa endereços privados estáveis por padrão.

## Endereço estático

Às vezes, usar um endereço estático pode melhorar a segurança. Por exemplo, se o seu roteador local usa Neighbor Discovery ou radvd (RFC 2461), sua interface receberá automaticamente um endereço baseado em seu endereço MAC (usando a configuração automática sem estado do IPv6). Isso pode ser menos do que ideal para segurança, pois permite que um sistema seja rastreado mesmo que a parte da rede do endereço IP seja alterada.

Para atribuir um endereço IP estático usando netctl, veja no exemplo de perfil em `/etc/netctl/examples/ethernet-static`. As seguintes linhas são importantes:

    ...
    # Para configuração de endereço IPv6 estático
    IP6=static
    Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96')
    Routes6=('abcd::1234')
    Gateway6='1234:0:123::abcd'

Nota Se você estiver conectado somente a IPv6, precisará determinar seu servidor DNS IPv6. Por exemplo:

    DNS=('6666:6666::1' '6666:6666::2')

Se o seu provedor não forneceu DNS IPv6 e você não está executando o seu próprio, você pode escolher o artigo resolv.conf.

## IPv6 e PPPoE

A ferramenta padrão para o PPPoE, `pppd`, fornece suporte a IPv6 sob PPPoE desde que seu provedor de internet e seu modem tenham suporte a isso. Basta adicionar ao seguinte a `/etc/ppp/options`

    +ipv6

Se você estiver usando netctl para PPPoE, basta adicionar o seguinte a sua configuração de netctl

    PPPoEIP6=yes

## Delegação de prefixo (DHCPv6-PD)

Nota Esta seção é direcionada para a configuração de gateway personalizada, não para máquinas clientes. Para roteadores de mercado padrão, consulte a documentação do seu roteador sobre como habilitar a delegação de prefixo.

A delegação de prefixo é uma técnica comum de implementação de IPv6 usada por muitos ISPs. É um método de atribuição de um prefixo de rede a um site do usuário (por exemplo, rede local). Um roteador pode ser configurado para atribuir diferentes prefixos de rede a várias sub-redes. O ISP distribui um prefixo de rede usando DHCPv6 (geralmente um `/56` ou `/64`) e um cliente dhcp atribui os prefixos à rede local. Para um simples gateway de duas interfaces, ele praticamente atribui um prefixo IPv6 à interface conectada à rede local a partir de um endereço adquirido através da interface conectada à WAN (ou uma pseudo-interface como ppp).

### Com dhcpcd

O dhcpcd além do suporte a dhcp IPv4 também fornece uma implementação bastante completa do padrão de cliente DHCPv6 que inclui o DHCPv6-PD. Se você estiver usando `dhcpcd` edite `/etc/dhcpcd.conf`. Você pode já estar usando o dhcpcd para IPv4, portanto, basta atualizar sua configuração existente.

    duid
    noipv6rs
    waitip 6
    # Descomente esta linha se você está usando dhcpcd para apenas IPv6.
    #ipv6only

    # usa a interface conectada a WAN
    interface WAN
    ipv6rs
    iaid 1
    # use a interface conectada a sua LAN
    ia_pd 1 LAN
    #ia_pd 1/::/64 LAN/0/64

Essa configuração solicitará um prefixo da interface WAN (`WAN`) e a delegará para a interface interna (`LAN`). No caso de um intervalo `/64` ser emitido, você precisará usar a segunda `ia_pd instruction` comentada em seu lugar. Ele também desativará as solicitações do roteador em todas as interfaces, exceto na interface WAN (`WAN`).

Dica Leia também dhcpcd(8) e dhcpcd.conf(5).

### Com WIDE-DHCPv6

WIDE-DHCPv6 é uma implementação de código aberto do Protocolo de Configuração de Host Dinâmico para IPv6 (DHCPv6) originalmente desenvolvido pelo projeto KAME. Pode ser instalado com o pacote wide-dhcpv6AUR.

Se você está usando `wide-dhcpv6`, edite `/etc/wide-dhcpv6/dhcp6c.conf`

    # use a interface conectada a sua WAN
    interface WAN {
      send ia-pd 0;
    };

    id-assoc pd 0 {
      # use a interface conectada a sua LAN
      prefix-interface LAN {
        sla-id 1;
        sla-len 8;
      };
    };

Nota `sla-len` deve ser definido de forma que `(WAN-prefix) + (sla-len) = 64`. Neste caso, é configurado para um `/56` prefix 56+8=64. Para um prefixo `/64`, `sla-len` deve ser `0`.

O cliente wide-dhcpv6 pode ser iniciado/habilitado usando o arquivo unit systemd `dhcp6c@interface.service`, sendo que `interface` é o nome da interface no arquivo de configuração. Por exemplo, para um nome de interface "WAN", use `dhcp6c@WAN.service`.

Dica Leia dhcp6c(8) e dhcp6c.conf(5) para mais informações.

### systemd-networkd

    /etc/systemd/network/lan.network

    [Network]
    Address=192.168.1.1
    IPv6PrefixDelegation=dhcpv6

    /etc/systemd/network/wan.network

    [Network]
    DHCP=yes
    IPForward=yes
    IPv6Token=::1
    IPv6AcceptRouterAdvertisements=2
    IPv6AcceptRA=yes
    IPv6DuplicateAddressDetection=1
    IPv6PrivacyExtensions=kernel

### Outros clientes

dhclient também pode solicitar um prefixo, mas atribuir esse prefixo ou partes desse prefixo a interfaces deve ser feito usando um script de saída do dhclient. Por exemplo: https://github.com/jaymzh/v6-gw-scripts/blob/master/dhclient-ipv6.

## Desabilitar IPv6

Nota O Arch kernel tem suporte a IPv6 compilado diretamente e, portanto, um módulo não pode ser inserido na lista negra.

### Desabilitar funcionalidade

Atenção Desabilitar a pilha IPv6 pode quebrar certos programas que esperam que ela seja ativada. FS#46297

Adicionar `ipv6.disable=1` à linha do kernel desabilita toda a pilha IPv6, o que é provável o que você deseja se estiver tendo problemas. Veja Parâmetros do kernel para mais informações.

Como alternativa, adicionar `ipv6.disable_ipv6=1` manterá a pilha do IPv6 funcional, mas não atribuirá endereços IPv6 a nenhum de seus dispositivos de rede.

Também é possível evitar a atribuição de endereços IPv6 a interfaces de rede específicas, adicionando a seguinte configuração de sysctl a `/etc/sysctl.d/40-ipv6.conf`:

    # Desabilita IPv6
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.nic0.disable_ipv6 = 1
    ...
    net.ipv6.conf.nicN.disable_ipv6 = 1

Observe que você deve listar explicitamente todas as interfaces de destino, pois a desabilitação de `all.disable_ipv6` não se aplica a interfaces que já estão "up" quando as configurações de sysctl são aplicadas.

Outra observação: se desabilitar o IPv6 por sysctl, você deve comentar os hosts IPv6 em seu `/etc/hosts`:

    #<endereço-ip> <hostnam.domínio.org> <hostname>
    127.0.0.1 localhost.localdomain localhost
    #::1 localhost.localdomain localhost

caso contrário, pode haver alguns erros de conexão, pois os hosts são resolvidos para o endereço IPv6, que não pode ser acessado.

### Outros programas

Desabilitar a funcionalidade do IPv6 no kernel não impede que outros programas tentem usar o IPv6. Na maioria dos casos, isso é completamente inofensivo, mas se você tiver problemas com esse programa, consulte as páginas de manual do programa para obter uma maneira de desabilitar essa funcionalidade.

#### dhcpcd

dhcpcd vai continuar sem prejuízo tentar realizar uma solicitação IPv6 ao roteador. Para desabilitar isso, conforme documentado na página man dhcpcd.conf(5), adicione o seguinte ao `/etc/dhcpcd.conf`:

    noipv6rs
    noipv6

#### NetworkManager

Para desabilitar IPv6 no NetworkManager, clique com o botão direito no ícone de status de rede, e selecione Editar conexões > Cabeada > Nome da rede > Editar > Configurações IPv6 > Método > Ignorado/Desabilitado

Então, clique em "Salvar".

#### ntpd

Seguindo o conselho em systemd (Português)#Arquivos drop-in, edite `ntpd.service` para definir como o systemd o inicia.

Isso criará um trecho drop-in que será executado em vez do padrão `ntpd.service`. O sinalizador `-4` impede que o IPv6 seja usado pelo daemon ntp. Coloque o seguinte no trecho drop-in:

    [Service]
    ExecStart=
    ExecStart=/usr/bin/ntpd -4 -g -u ntp:ntp

que primeiro limpa o `ExecStart` anterior e, em seguida, o substitui por um que inclua o sinalizador `-4`.

### systemd-networkd

O networkd possui suporte a desabilitação do IPv6 por interface. Quando a seção `[Network]` de uma unidade de rede possui `LinkLocalAddressing=ipv4` ou `LinkLocalAddressing=no`, o networkd não tentará configurar o IPv6 na correspondência interfaces.

No entanto, observe que, mesmo ao usar a opção acima, o networkd ainda esperará receber anúncios do roteador se o IPv6 não estiver desabilitado globalmente. Se o tráfego IPv6 não estiver sendo recebido pela interface (por exemplo, devido a configurações sysctl ou ip6tables), ele permanecerá no estado de configuração e poderá causar tempos limites para os serviços aguardando a configuração completa da rede. Para evitar isso, a opção `IPv6AcceptRA=no` também deve ser definida na seção `[Network]`.

## Preferir IPv4 a IPv6

Descomente a seguinte linha no `/etc/gai.conf`:

    #
    #    Para sites que preferem conexões IPv4, mude a última linha para
    #
    precedence ::ffff:0:0/96  100

## Veja também

- IPv6 - documentação do kernel.org
- Endereços temporários IPv6 - um resumo sobre endereços temporários e extensões de privacidade
- IPv6 prefixes[link inativo 2024-10-12 ⓘ] - um resumo de tipos de prefixo
- net.ipv6 options[link inativo 2024-10-12 ⓘ] - documentação de parâmetros do kernel

Category:

- Networking (Português)

Hidden category:

- Pages with dead links

IPv6 (Português)
Add topic