Endereçamento IPv6, parte local estática do prefixo dinâmico

10

O roteador na minha rede distribui um prefixo IPv6 atribuído pelo meu ISP. Esse prefixo é dinâmico, mas "bastante persistente".

Gostaria que minhas máquinas escolhessem automaticamente o prefixo anunciado nos RAs, mas o combinassem com uma parte local especificada pelo usuário, em vez de gerar uma aleatoriamente ou com base no endereço MAC. Existe alguma maneira fácil de fazer isso?

plugwash
fonte
1
Eu não vi nenhum sistema operacional que permita que você faça isso :(
Sander Steffann
@SanderSteffann Nunca usou o Linux?
Michael Hampton
1
@ Michael Eu nunca vi um SO que permita configurar tokens de IID. Tecnicamente, o kernel pode fazê-lo, mas nenhuma OS (como na distribuição) suporta :(
Sander Steffann

Respostas:

11

Existem duas maneiras de fazer isso. Um é o caminho mais fácil e o outro é o caminho mais difícil.

A maneira mais fácil é executar um servidor DHCPv6 na sua rede e atribuir endereços de host a cada dispositivo. Ou deixe o servidor escolher a parte do host; os servidores DHCPv6 que eu vi manterão a mesma parte do host, mesmo que o prefixo seja alterado.

A maneira mais difícil é usar ip tokenpara definir identificadores de interface tokenizados. Isto é descrito como:

O suporte ao identificador de interface tokenizada IPv6 é usado para atribuir endereços de parte do host conhecidos aos nós enquanto ainda obtém um prefixo de rede global a partir de anúncios do roteador. O destino principal para identificadores tokenizados são plataformas de servidor em que os endereços geralmente são configurados manualmente, em vez de usar DHCPv6 ou SLAAC. Ao usar identificadores tokenizados, os hosts ainda podem determinar seu prefixo de rede usando o SLAAC, mas mais rapidamente serão renumerados automaticamente caso o prefixo da rede seja alterado. Os identificadores de IPv6 com token são descritos no rascunho: <draft-chown-6man-tokenised-ipv6-identifiers-02>.

A razão pela qual essa é a maneira mais difícil é que, embora o Linux inclua essa funcionalidade, nenhuma distribuição do Linux que eu conheça inclua suporte para tornar essa configuração persistente e aplicá-la no momento da inicialização, como fazem para endereços configurados manualmente ou DHCP. Portanto, provavelmente não vai funcionar muito bem para você, até que alguma distribuição o faça. Observe que agora é possível configurar tokens IPv6 no NetworkManager e systemd-networkd; respostas mais recentes têm instruções de configuração específicas.


Por fim, se o seu ISP alterar ocasionalmente o seu prefixo, considere o uso de endereços locais exclusivos na sua rede. Dessa forma, todos os seus dispositivos sempre terão um endereço que nunca será alterado, com o qual eles poderão conversar entre si. Alguns roteadores domésticos / SOHO compatíveis com IPv6 (como o OpenWrt) têm uma opção para habilitar o ULA em toda a rede doméstica; se houver vários roteadores em casa, isso deve ser ativado no roteador que se conecta ao ISP.

Michael Hampton
fonte
O problema que realmente fez a pergunta foi que meu roteador de ISPs envia RAs com uma vida útil curta. Isso causa grandes problemas com endereços de privacidade. OTOH Não gosto muito da idéia de revelar meu endereço MAC para o mundo.
plugwash
Uma parte local estática evita os problemas com endereços de privacidade sem revelar meu endereço MAC, obrigado.
plugwash
Você sabe uma maneira de adicionar vários tokens para uma única interface de múltiplos set "estática dinâmica' endereço IPv6?
wedi
O @wedi Linux suporta apenas um token por interface. Os tokens IPv6 provavelmente não são a solução para o seu problema, seja ele qual for.
Michael Hampton
6

Michael fez um resumo muito bom e a dica recente do plugwash foi a melhor que pude encontrar depois de procurar por várias horas uma solução do CentOS 7 / RHEL (também systemd e gerenciador de rede). Depois de me acostumar com o nmcli (eu ainda estava usando ifcfg e ip) - eu poderia aplicá-lo com sucesso.

Mas aprofundando-se de acordo com https://developer.gnome.org/NetworkManager/stable/settings-ipv6.html O NetworkManager suporta diretamente identificadores de interface com token IPv6 como uma propriedade (a partir da versão 1.4 de agosto de 2016 http://news.softpedia.com/ news / networkmanager-1-4-adiciona-suporte-para-configurar-ipv6-tokenized-interface-identifiers-507601.shtml ).

Portanto, você não precisa definir as configurações de IPv6 do gerenciador de rede para ignorar, mas deve defini-las como

nmcli connection modify eth0 ipv6.method "auto" # if not already
nmcli connection modify eth0 ipv6.addr-gen-mode "eui64" # use interface token
nmcli connection modify eth0 ipv6.token "::2"

que gravará IPV6_TOKEN=::2em / etc / sysconfig / network-scripts / ifcfg-eth0 para sobreviver a uma reinicialização. Para aplicar imediatamente isso, reinicie a interface

nmcli connection up id eth0  # restart
Jürgen
fonte
3

Agradecemos a Michael por confirmar que o Linux suportava o recurso e apontar para o comando de baixo nível. Esta resposta aborda como fazê-lo funcionar na prática em uma área de trabalho extensível Debian (com systemd e gerenciador de rede).

Primeiro edite a conexão no gerenciador de rede e defina as configurações do IPv6 para ignorar.

Agora crie um arquivo /etc/NetworkManager/dispatcher.d/pre-up.d/iptoken. O arquivo deve pertencer à raiz, permissões 755 e com o seguinte conteúdo.

#!/bin/sh
ip token set ::2 dev eth0

Substitua eth0 pelo dispositivo desejado e :: 2 pelo sufixo desejado.

plugwash
fonte
2

No Linux, você pode usar systemd-network.

Basta criar um .networkarquivo em /etc/systemd/network/somename.network:

[Match]
Name=e*

[Network]
DHCP=yes
IPv6Token=::1

em vez de e*corresponder a todas as interfaces iniciadas e, você pode inserir o nome completo da interface. Isso habilita o DHCP {v4, v6} e usa ::1como sufixo. Você pode escolher qualquer endereço IPv6, mas os primeiros 64 bits devem ser definidos como zero.

Depois disso, ative e inicie o systemd-networkd.service.

Inrin
fonte