páginas aleatórias de James Bottomley

uma das experiências recentes da Linux Plumbers Conference me convenceu de que, se você quiser fazer parte de uma verdadeira interação de áudio/vídeo baseada em WebRTC de código aberto, você precisa de um endereço de internet que não esteja por trás de um NAT. Na realidade, o protocolo ainda funciona, desde que você possa entrar em contato com um servidor stun para dizer qual é o seu endereço externo e, possivelmente, um servidor turn para proxy os pacotes se ambos os endpoints são NATed mas tudo isso buscando servidores externos leva tempo como aqueles de vocês que reclamaram sobre o teste de eco encontrado. A solução para tudo isso é conectar-se ao IPv6, que possui um espaço de endereço grande o suficiente para suportar todos os dispositivos do planeta com seu próprio endereço. Todas as distribuições Linux modernas suportam o IPv6 fora da caixa, então as chances são de que você o tenha usado acidentalmente sem nunca perceber, o que é uma das belezas da configuração automática do IPv6 (deve funcionar apenas).

no entanto, recentemente me mudei e, portanto, perdi minha conexão de internet de fibra para o cabo, mas o cabo que veio com um endereço IPv6, então esta é minha história de fazer tudo funcionar. Se você realmente não se importa com o básico do protocolo, você pode pular para o como. Este guia também está focado em uma configuração de” pilha dupla ” (que tem endereços IPv6 e IPv4). Configurações IPv6 puras são possíveis, mas como algumas partes da internet ainda são apenas IPv4, elas não estão completas, a menos que você configure uma ponte encapsuladora IPv4.

o básico do IPv6

IPv6 tem sido um protocolo Maduro há muito tempo, então presumi erroneamente que haveria um monte de bons HOWTOs sobre isso. No entanto, depois de ler 20 descrições diferentes de como o espaço de endereço IPv6 de 128 bits funciona e não muito mais, desisti em desespero e li os RFCs. Vou supor que você leu pelo menos um desses HOWTOS, então não preciso entrar em prefixos de endereço IPv6, sufixos, IDs de interface ou sub-redes, então começarei onde a maioria dos HOWTOs termina.

como funciona o IPv6?

IPv4, não há um protocolo chamado dynamic host configuration protocol (DHCP) para contanto que você pode encontrar um servidor DHCP, você pode obter todas as informações que você precisa para se conectar (local, endereço, roteador, servidor DNS, servidor de hora, etc). No entanto, este serviço deve ser configurado por alguém e o IPv6 foi projetado para configurar uma rede sem ela.

a primeira suposição que a configuração automática de endereço Sem Estado IPv6 (SLAAC) faz é que ela está em uma sub-rede /64 (portanto, cada sub-rede no IPv6 contém 1010 vezes mais endereços do que toda a internet IPv4). Isso significa que, como a maioria das sub-redes reais contém <100 sistemas, elas podem simplesmente escolher um endereço Aleatório e é muito improvável que colidam com os sistemas existentes. Na verdade, existem três maneiras de escolher um endereço na /64:

  1. EUI-64 (RFC 4291) com base no endereço MAC, que é basicamente o MAC com um bit invertido e ff:fe colocado no meio.
  2. stable Private (RFC 7217) que geram a partir de um hash baseado em uma chave estática, interface, prefixo e um contador (o contador é incrementado se houver um choque). Estes são preferidos para a EUI-64 aqueles que dê qualquer tipo de configuração associada ao endereço MAC (tais como o tipo de placa de rede que você tem)
  3. Privacidade Extensão de Endereços (RFC 4941) que são muito semelhantes aos estável endereços privados, exceto eles mudam ao longo do tempo utilizando o endereço IPv6 de substituição de mecanismo para sistemas cliente que deseja preservar o anonimato.

o próximo problema no Linux é quem configura a interface? A pilha IPv6 do Kernel é realmente projetada para fazê-lo e, a menos que seja dito para não fazê-lo, mas a maioria dos controladores de rede modernos (como NetworkManager) são malucos de controle e desligam a configuração automática do kernel para que eles possam fazê-lo sozinhos. Eles também padronizam para endereçamento privado estável usando um segredo estático mantido no sistema de arquivos (/var/lib/NetworkManager/secret_key).

a próxima coisa a entender sobre endereços IPv6 é que eles são divididos em escopos, sendo o mais importante os endereços locais de link (não rastreáveis) que convencionalmente sempre têm o prefixo fe80::/64. O endereço local do link é configurado primeiro usando um dos métodos acima e, em seguida, usado para sondar a rede.

multicast e Neighbor Discovery

ao contrário do IPv4, o IPv6 não tem capacidade de transmissão, portanto, toda a descoberta é feita por multicast. Os nós que aparecem na rede se inscrevem em endereços multicast específicos, por meio de pacotes especiais interceptados pelo switch, e não recebem multicast para os quais não estão inscritos. Convencionalmente, todos os endereços multicast locais de link têm o prefixo ff02::/64 (para outros tipos de endereço multicast, consulte RFC 4291). Todos os nós se inscrevem no endereço multicast” todos os nós ” ff02:: 1 e também devem se inscrever em seu próprio endereço multicast de nó solicitado em ff02:: 1: ffXX: XXXX, onde os últimos 24 bits correspondem aos 24 bits mais baixos do endereço IPv6 do nó. Este último é evitar a interrupção que costumava ocorrer no IPv4 de transmissões ARP porque agora você pode segmentar um subconjunto específico de nós para resolução de endereço.

IPV6, protocolo de resolução de endereço é chamada de Vizinho de Solicitação (NS), descrito na RFC 4861 usar com SLAAC descrito na RFC 4862, e é feito através do envio de um multicast para o vizinho de solicitação de endereço do nó que você deseja para descobrir o que contém o endereço IPv6 completo que você quiser saber, um nó com o endereço correspondente respostas, com a sua camada de link de endereço (MAC) em um Próximo Anúncio (NA) do pacote.

uma vez que um nó escolheu seu endereço local de link, ele primeiro envia um pacote NS para o endereço escolhido para ver se alguém responde e se ninguém o faz, ele assume que está OK para mantê-lo, caso contrário, segue o protocolo de prevenção de colisão associado à sua forma particular de endereço. Depois de encontrar um endereço exclusivo, o nó configura esse endereço local do link e procura um roteador. Observe que, se uma rede IPv6 não estiver presente, a descoberta para aqui, e é por isso que a maioria das interfaces de rede sempre mostra um endereço IPv6 local de link.

descoberta do roteador

uma vez que o nó tem seu próprio endereço local de link exclusivo, ele o usa para enviar pacotes de solicitação de roteador (RS) para o endereço multicast “todos os roteadores” ff02::2. Cada roteador na rede responde com um Router Advertisement (RA) de pacotes que descreve (entre outras coisas) o roteador vida, o MTU da rede, um conjunto de um ou mais prefixos o roteador é responsável, o roteador endereço do link e um conjunto de sinalizadores de opção, incluindo a M (Gerenciado) e O (Configuração) sinalizador e, possivelmente, um conjunto de servidores de DNS.

cada prefixo anunciado contém o prefixo e o comprimento do prefixo, um conjunto de sinalizadores incluindo A (configuração autônoma) e L (link local) e um conjunto de vidas. Os prefixos locais do Link informam quais prefixos globais os usuários da rede local (pode haver mais de um) e se você tem permissão para fazer SLAAC no prefixo global (se o sinalizador a estiver claro, você deve pedir ao roteador um endereço usando DHCPv6). Se o roteador tiver uma vida útil diferente de zero, você pode assumir que é um roteador padrão para a sub-rede.Agora que o nó descobriu um ou mais roteadores, ele pode configurar seu próprio endereço global (observe que cada nó routeable IPv6 tem pelo menos dois endereços: um link local e um global). Como isso depende dos sinalizadores de roteador e prefixo

configuração de endereço Global

a primeira coisa que um nó precisa saber é se deve usar o SLAAC para o endereço global ou DHCPv6. Isso é inteiramente determinado pelo sinalizador A de qualquer prefixo local de link no Pacote RA. Se a estiver definido, o nó pode usar SLAAC e se a estiver claro, o nó deve usar DHCPv6 para obter um endereço. Se Um é definido e também o M (Gerenciado) bandeira, em seguida, o nó pode usar SLAAC ou DHCPv6 (ou ambos) para obter um endereço e se o sinalizador M é clara, mas o (Outro Config) sinalizador estiver presente, então o nó deve usar SLAAC mas pode usar o DHCPv6 para obter outras informações sobre a rede (normalmente DNS).

uma vez que o nó tem um endereço global Em agora precisa de uma rota padrão. Ele forma a lista de rotas padrão dos pacotes RA que têm uma vida útil de roteador diferente de zero. Todos eles são configurados como rotas padrão para seu endereço local de link com a contagem de saltos especificada pelo RA. Por fim, o nó pode adicionar rotas de prefixo específicas de pacotes RA com vida útil zero do roteador, mas prefixos locais não vinculados.

DHCPv6 é um protocolo de configuração bastante complexo (ver RFC 8415), mas não pode especificar qualquer comprimento prefixo (o que significa que todos os endereços obtidos são configurados como /128) ou rotas (estes devem ser obtidos a partir de pacotes RA). Isso leva a uma sutileza de saída de seleção de endereço em que o mais específico é sempre preferencial, por isso, se você configurar tanto por SLAAC e DHCPv6, o SLAAC endereço será adicionado como /64 e o DHCPv6 endereço /128 que significa que o seu endereço IP de saída será sempre o DHCPv6 um (apesar de que se uma entidade externa conhece o seu SLAAC endereço, eles ainda serão capazes de chegar a você sobre ele).

Como: Configurar a sua própria Casa Roteador

Uma das coisas que você acha que a partir do exposto acima é que o IPv6 sempre auto configura e, embora seja verdade que, se você simplesmente ligar o seu computador portátil à porta ethernet de um modem de cabo, só vai configurar automaticamente, a maioria das pessoas tem mais complexo, casa de instalação, envolvendo um roteador, que precisa de alguns especiais de persuasão para funcionar. Isso significa que você precisa obter recursos adicionais do seu ISP usando solicitações DHCPv6 especiais.

esta seção é escrita do meu próprio ponto de vista: Eu tenho uma rede IPv4 bastante complexa que tem uma rede wifi completamente aberta, mas limitada por largura de banda (para clientes não confiáveis) e várias redes internas protegidas (uma para meu laboratório, uma para meus telefones e outra para as câmeras de vídeo domésticas), então preciso de pelo menos 4 sub-redes para dar a cada dispositivo em minha casa um endereço IPv6. Eu também uso OpenWRT como minha distribuição de roteador, então todas as informações de Configuração IPv6 são altamente específicas para ele (embora deva ser notado que coisas como NetworkManager também podem fazer tudo isso se você estiver preparado para cavar na documentação).

delegação de prefixo

como o DHCPv6 distribui apenas um endereço /128, isso não é suficiente porque é o endereço IP do próprio roteador. Para se tornar um roteador, você deve solicitar a delegação de parte do espaço de endereço IPv6 por meio da opção Identity Association for Prefix Delection (IA_PD) do DHCPv6. Uma vez feito isso, o endereço IP do roteador será assumido pelo ISP como a rota para todos os prefixos delegados. A sutileza aqui é que, se você quiser mais de uma sub-rede, você deve solicitá-la especificamente (o cliente deve especificar o comprimento exato do prefixo que está procurando) e, como é um comprimento de prefixo, e sua sub-rede padrão deve ser /64, Se você solicitar um comprimento de prefixo de 64, Você só terá uma sub-rede. Se você solicitar 63 você tem 2 e assim por diante. O problema é como você sabe quantas sub-redes o ISP está disposto a lhe dar? Infelizmente, não há como encontrar isso (eu tive que fazer uma pesquisa na internet para descobrir que meu ISP, Comcast, estava disposto a delegar um comprimento de prefixo de 60, ou seja, 16 sub-redes). Se a pesquisa não lhe disser o quanto seu ISP está disposto a delegar, você pode tentar começar em 48 e trabalhar seu caminho para 64 em incrementos de 1 para ver com qual a maior delegação você pode fugir (houve relatos de ISPs bloqueando você no seu primeiro comprimento de prefixo delegado, então não comece em 64). A sutileza final é que o prefixo que você está delegado pode não ser o mesmo prefixo que o endereço que seu roteador obteve (minha configuração comcast atual tem meu roteador em 2001:558:600A:… mas meu prefixo delegado é 2601:600:8280:66d0:/60). Observação você pode executar o odhcp6c manualmente com a opção-P Se precisar examinar seu ISP para descobrir qual tamanho de prefixo você pode obter.

configurando o roteador para Delegação de prefixo

em termos OpenWRT, a configuração do roteador WAN DHCP (v6) é controlada por /etc/Padrão/rede. Você já terá uma interface WAN (provavelmente chamada de ‘wan’) para DHCPv4, então você simplesmente adiciona uma interface ‘wan6’ adicional para obter um IPv6 adicional e se tornar dual stack. Na minha configuração, isso se parece com

config interface 'wan6' option ifname '@wan' option proto 'dhcpv6' option reqprefix 60

a ligeira estranheza é o ifname: @ wan simplesmente diz à configuração para usar o mesmo ifname que a interface ‘wan’. Nomeá-lo dessa maneira é essencial se sua wan for uma ponte, mas é uma boa prática de qualquer maneira. A outra opção ‘reqprefix’ diz ao DHCPv6 para solicitar uma delegação de prefixo /60.

distribuindo prefixos delegados

isso acaba sendo notavelmente simples. Em primeiro lugar, você deve atribuir um prefixo delegado a cada uma de suas outras interfaces no roteador, mas pode fazer isso sem adicionar uma nova interface OpenWRT para cada uma delas. Minha interno de rede IPv4 tem todos os endereços estáticos, então você adicionar três directivas para cada uma das interfaces:

config interface 'lan' ... interface designation (bridge for me) option proto 'static' ... ipv4 addresses option ip6assign '64' option ip6hint '1' option ip6ifaceid '::ff'

ip6assign ‘N’ significa que você está um /N rede (portanto, este está sempre /64 para mim) e ip6hint ‘N’ significa usar N, bem como o seu id de sub-rede e ip6ifaceid ‘S’ significa usar S, como o IPv6 sufixo (Isto assume ::1 então, se você está OK com isso, omitir a presente directiva). Então, dado que tenho um prefixo 2601:600:8280:66d0:: / 60, o endereço global desta interface será 2601: 600: 8280: 66d1:: ff. Agora, o teste acid, se você acertou, este endereço global deve ser pingável de qualquer lugar na Internet IPv6 (se não for, é provável que seja um problema de firewall, veja abaixo).

a publicidade como roteador

simplesmente receber um prefixo delegado em uma interface de roteador local é insuficiente . Agora você precisa fazer com que seu roteador responda às solicitações do roteador no ff02::2 e, opcionalmente, Faça DHCPv6. Infelizmente, OpenWRT tem dois mecanismos para fazer isso, geralmente ambos instalados: odhcpd e dnsmasq. O que descobri foi que nenhuma das minhas diretivas em /etc/config/dhcp entraria em vigor até que eu desabilitasse o odhcpd completamente

/etc/init.d/odhcpd stop/etc/init.d/odhcpd disable

e como uso o dnsmasq extensivamente em outro lugar (DNS dividido para redes internas/externas), isso me convinha muito bem. Descreverei em primeiro lugar quais opções você precisa no dnsmasq e em segundo lugar como você pode conseguir isso usando entradas no arquivo OpenWRT /etc/config/dhcp (acho isso útil porque é sempre aconselhável verificar o que o OpenWRT colocou no /var/etc/dnsmasq.arquivo conf).

a primeira opção dnsmasq que você precisa é ‘enable-ra’, que é um parâmetro global instruindo dnsmasq para lidar com anúncios de roteador. O próximo parâmetro de que você precisa é o ‘ra-param’ por interface, que especifica os parâmetros de anúncio do roteador global e deve aparecer uma vez para cada interface na qual deseja anunciar. Finalmente, a opção ‘dhcp-range’ permite uma configuração mais detalhada do tipo de sinalizadores RA e DHCPv6 opcional.

SLAAC ou DHCPv6 (ou ambos)

de muitas maneiras, isso é uma questão de escolha pessoal. Se você permitir o SLAAC, os hosts que desejam usar endereços de extensão de privacidade (como telefones Android) podem fazê-lo, o que é uma coisa boa. Se você também permitir a seleção de endereços DHCPv6, você terá uma lista de endereços atribuídos aos hosts e o dnsmasq fará a resolução de DNS para eles (embora possa fazer DNS para endereços SLAAC, desde que seja informado sobre eles). Existe uma tag especial ‘construtor’ para a opção ‘dhcp-range’ que lhe diz para construir o endereço fornecido (para RA ou DHCPv6) a partir do prefixo Global IPv6 da interface especificada, que é como você desmaiar nossos endereços de prefixo delegados. Os modos para ‘dhcp-range’ São ‘Ra-only’ para proibir DHCPv6 inteiramente, ‘slaac’ para permitir a seleção de endereço DHCPv6 e’ Ra-stateless ‘ para proibir a seleção de endereço DHCPv6, mas permitir que outras informações de configuração DHCPv6.

baseado em tentativa e erro (e finalmente examinando o script em / etc / init.d / dnsmasq) as opções OpenWRT necessárias para alcançar as opções dnsmasq acima são

config dhcp lan option interface lan option start 100 option limit 150 option leasetime 1h option dhcpv6 'server' option ra_management '1' option ra 'server'

com ‘ra_management’ como a opção chave com ‘0’ significando SLAAC com opções DHCPv6, ‘1’ significando SLAAC com DHCPv6 completo, ‘2’ significando apenas DHCPv6 e ‘3’ significando apenas SLAAC. Outra estranheza do OpenWRT é que não parece haver uma maneira de definir o intervalo de Locação: sempre o padrão é apenas estático ou ::1000 para ::ffff.

configuração do Firewall

uma das coisas que atrapalha as pessoas é o fato de que o Linux tem dois firewalls completamente separados: um para IPv4 e outro para IPv6. Se você já escreveu quaisquer regras personalizadas para eles, as chances são que você fez isso no openwrt /etc/firewall.arquivo de usuário e você usou o comando iptables, o que significa que você só adicionou as regras ao firewall IPv4. Para adicionar a mesma regra para IPv6, você precisa duplicá-la usando o comando ip6tables. Outro problema significativo, se você estiver usando um rastreamento de conexão para detecção de batida de porta como eu sou, é que o rastreamento de conexão Linux tem dificuldade com multicast IPv6, então os pacotes que saem para um multicast, mas voltam como unicast (como a maioria dos protocolos de descoberta) obtêm o estado conntrack errado. Para corrigir isso, eventualmente tive que ter uma regra de entrada apenas aceitando todos os ICMPv6 e DHCPv6 (portas udp 546 e 547 ). As outras considerações do firewall são que agora todo mundo tem seu próprio endereço IP, não há necessidade de NAT (OpenWRT pode ser persuadido a cuidar disso automaticamente, mas se você estiver duplicando as regras IPv4 manualmente, não duplique as regras NAT). O último é provavelmente mais aplicável a mim: minha interface wifi foi projetada para ser uma extensão da internet local e espera-se que todas as máquinas que se conectam a ela possam se proteger, pois migrarão para ambientes hostis como o Wi-Fi do aeroporto, portanto, faço a exposição completa de dispositivos conectados Wi-Fi à internet geral para todas as portas, incluindo sondas de porta. Para meus dispositivos internos, tenho uma regra relacionada e estabelecida para garantir que eles não sejam sondados, pois não foram projetados para migrar da rede interna.

agora os problemas com OpenWRT: já que você quer NAT IPv4, mas não sobre o IPv6, você precisa ter dois separados wan zonas para eles: se você tentar combiná-los (como eu fiz), então o OpenWRT irá adicionar um IPv6 –ctstate INVÁLIDO regra que impedirá o Próximo Descoberta de trabalhar por causa do conntrack problemas com IPv6, multicast, assim, a minha wan horários são (bem, isso é uma mentira, porque o meu firewall está agora artesanais, mas isso é o que eu verifiquei trabalhou antes de eu colocar a mão crafted firewall):

config zone option name 'wan' option network 'wan' option masq '1' ...config zone option name 'wan6' option network 'wan6' ...

E as regras de encaminhamento para a rede local (zona totalmente acessíveis) são

config forwarding option src 'lan' option dest 'wan'config forwarding option src 'lan' option dest 'wan6'config forwarding option src 'wan6' option dest 'lan'

Colocá-lo Juntos: Obtendo os clientes IPv6 conectados

agora que você tem seu roteador configurado, tudo deve funcionar. Se isso aconteceu, a interface wifi do seu laptop agora deve ter um endereço IPv6 global

ip -6 address show dev wlan0

se isso voltar vazio, você precisará habilitar o IPv6 em sua distribuição. Se tiver apenas um endereço local de link (fe80:: prefix), o IPv6 está ativado, mas seu roteador não está anunciando (problemas de firewall suspeitos com pacotes de descoberta ou configuração incorreta do dnsmasq). Se você vir um endereço global, está feito. Agora você deve ser capaz de ir para https://testv6.com e garantir uma pontuação de 10/10.

a peça final do quebra-cabeça está preferindo sua nova conexão IPv6 quando o DNS oferece uma escolha de endereços IPv4 ou IPv6. Todos os clientes Linux modernos devem preferir IPv6 quando disponíveis se conectados a uma rede de pilha dupla , então tente … se você fizer ping, digamos, www.google.com e veja um endereço IPv6 que você está feito. Caso contrário, você precisa entrar no mundo obscuro da rotulagem de endereços IPv6 (RFC 6724) e gai.conf.

conclusão

adicionar IPv6 e a configuração IPv4 existente atualmente não é uma operação simples de plug-in e go. No entanto, desde que você entenda algumas diferenças entre os dois protocolos, também não é um problema intransponível. Eu também encobri muitos dos problemas que você pode encontrar com seu ISP. Algumas pessoas relataram que seus ISPs distribuem apenas um endereço IPv6 sem delegação de prefixo, caso em que acho que encontrar um novo ISP seria o mais sábio. Outros relatam que o ISP delegará apenas um prefixo /64, portanto, sua escolha aqui é executar apenas uma sub-rede (provavelmente suficiente para muitas redes domésticas) ou sub-rede maior que /64 e proibir o SLAAC, o que definitivamente não é uma configuração recomendada. No entanto, desde que seu ISP seja razoável, esta postagem do blog deve pelo menos ajudá-lo a começar.

Write a Comment

O seu endereço de email não será publicado.