Dicas

IPv6 link-local: acessar equipamento sem IP configurado

Notebook ligado por cabo direto a um roteador, com o endereço fe80 em ciano e laranja

Acontece em qualquer bancada: o equipamento está ligado, os LEDs piscam, mas o IPv4 de gerência não responde. Pode ser uma regra de firewall que trancou o input, um IP trocado por engano, um roteador usado que chegou com configuração desconhecida ou um switch recém-tirado da caixa. Antes de procurar o cabo de console, vale tentar o IPv6 link-local.

Toda interface com IPv6 ligado gera sozinha um endereço fe80, sem DHCP e sem configuração. Esse endereço só vale dentro do próprio enlace, mas é justamente o que você precisa quando o notebook está ligado direto no equipamento. Este guia mostra como descobrir o endereço do vizinho, como entrar por SSH e Winbox no Linux e no Windows, o que o Mikrotik e o Huawei precisam ter ligado e como não transformar esse atalho numa porta aberta.

Resposta rápida

  1. Ligue o notebook por cabo direto na porta do equipamento (ou no mesmo switch, na mesma VLAN).
  2. Descubra o nome ou o índice da sua placa: eth0 no Linux, um número como 12 no Windows.
  3. Mande um ping para ff02::1%interface, o endereço de todos os nós do enlace.
  4. Leia a tabela de vizinhos IPv6 e anote o endereço fe80 do equipamento.
  5. Entre com ssh usuario@fe80::...%interface ou, no Winbox, com [fe80::...%indice].

O detalhe que mais derruba gente é o %interface no fim. Sem ele o sistema não sabe por qual placa sair, porque toda placa tem um endereço fe80 e todas usam o mesmo prefixo.

O que é o endereço IPv6 link-local

A RFC 4291 reserva o bloco fe80::/10 para endereços de enlace. Os 64 bits da esquerda ficam como fe80:0000:0000:0000 e os 64 da direita formam o identificador da interface. Todo nó IPv6 precisa ter um endereço desses em cada interface, porque o Neighbor Discovery, o anúncio de roteador e o próximo salto do OSPFv3 dependem dele, e o BGP pode usá-lo como next-hop em sessões IPv6. Se você quer revisar a base, o post sobre o que é IPv6 explica os tipos de endereço.

Como ele nasce sozinho, o IPv6 link-local existe mesmo quando ninguém configurou IPv6 de propósito. Num Mikrotik com RouterOS v7, por exemplo, o IPv6 vem ligado e cada interface ativa ganha um fe80 assim que o link sobe. É por isso que o truque funciona em equipamento que acabou de sair da caixa ou que perdeu o IPv4 de gerência.

ItemComo funcionaObservação
Prefixofe80::/10, na prática sempre fe80::/64RFC 4291
AlcanceSó o enlace local; roteador nenhum encaminhaNão passa de um salto
Quem criaO próprio sistema, quando o IPv6 sobe na interfaceSem DHCP, sem RA
IdentificadorEUI-64 do MAC ou valor aleatórioEquipamento de rede costuma usar EUI-64
Zone id%eth0, %12, %en0Diz por qual placa sair

Do MAC ao endereço: o EUI-64

Quando o identificador vem do MAC, a conta é simples. Pegue o MAC 00:0c:42:12:34:56, inverta o sétimo bit do primeiro byte (00 vira 02) e enfie ff:fe no meio, entre a terceira e a quarta dupla. O resultado é 20c:42ff:fe12:3456 (o zero à esquerda some), e o endereço completo fica fe80::20c:42ff:fe12:3456. Com o MAC da etiqueta do equipamento você já sabe qual fe80 procurar, sem precisar de varredura.

Nem todo sistema usa EUI-64. O Windows e boa parte das distribuições Linux com NetworkManager geram o identificador do próprio notebook de forma aleatória ou estável por rede, para não expor o MAC. Isso não atrapalha nada: o que importa é o endereço do equipamento, e roteadores e switches normalmente seguem o EUI-64.

Por que o %interface é obrigatório

Como todas as placas usam fe80::/64, a tabela de rotas tem o mesmo prefixo em cada interface. Ao digitar só o endereço, o sistema não tem como escolher a saída. O sufixo depois do % é o zone id da RFC 4007: no Linux é o nome da placa, no Windows é o número da interface (ifIndex) e no macOS é o nome, como en0. Sem ele você recebe erro de rede inalcançável ou de argumento inválido.

Cenário de bancada

O exemplo usa um notebook ligado por cabo direto na porta de gerência de um Mikrotik, a ether8. O equipamento perdeu o acesso IPv4 depois de uma regra de firewall mal colocada, mas o IPv6 link-local continua de pé porque a regra só tratou o IPv4. A placa do notebook é a eth0 no Linux e a interface 12 no Windows. O mesmo roteiro serve para um switch Huawei ou qualquer equipamento com IPv6 ligado.

Diagrama: notebook ligado direto na porta de gerência, ping em ff02::1, tabela de vizinhos e SSH no endereço fe80 com zone id
Com o cabo direto, o notebook chama todos os nós do enlace em ff02::1, lê o endereço fe80 do equipamento na tabela de vizinhos e entra por SSH ou Winbox indicando a interface de saída.

Cabo direto não é obrigatório. Se o notebook e o equipamento estão no mesmo switch e na mesma VLAN, o enlace é o mesmo e o fe80 responde. O que não funciona é atravessar um roteador: o IPv6 link-local morre no primeiro salto, de propósito.

Acesso por IPv6 link-local no Linux

Confira primeiro se a sua placa tem um fe80. O segundo comando mostra se o IPv6 está desligado naquela interface (valor 1):

ip -6 addr show dev eth0 scope link
sysctl net.ipv6.conf.eth0.disable_ipv6

Se não aparece nenhum endereço com scope link, ligue o IPv6 na placa e suba o link. Algumas imagens de servidor vêm com IPv6 desativado por sysctl:

sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=0
sudo ip link set eth0 up

Descobrindo o equipamento com ff02::1

O ff02::1 é o grupo multicast de todos os nós do enlace. Um ping para ele, saindo pela placa certa, faz cada vizinho responder com o próprio endereço. Depois, a tabela de vizinhos guarda o par endereço e MAC:

ping -6 -c 3 ff02::1%eth0
ip -6 neigh show dev eth0

A saída do ping mostra duas origens. Uma é o próprio notebook, que também faz parte do grupo; a outra é o equipamento, marcada como DUP! porque responde ao mesmo icmp_seq. A saída abaixo está sem a coluna de tempo, para caber na tela:

PING ff02::1%eth0(ff02::1%eth0) 56 data bytes
64 bytes from fe80::9c1d:22ff:fe4b:a1e%eth0: icmp_seq=1 ttl=64
64 bytes from fe80::20c:42ff:fe12:3456%eth0: icmp_seq=1 ttl=64 (DUP!)
64 bytes from fe80::9c1d:22ff:fe4b:a1e%eth0: icmp_seq=2 ttl=64
64 bytes from fe80::20c:42ff:fe12:3456%eth0: icmp_seq=2 ttl=64 (DUP!)

A tabela de vizinhos confirma qual endereço pertence ao MAC da etiqueta. A palavra router indica que o vizinho se anunciou como roteador, o que ajuda a separar o Mikrotik de outro notebook no mesmo switch:

fe80::20c:42ff:fe12:3456 lladdr 00:0c:42:12:34:56 router REACHABLE

SSH e cópia de arquivo

ssh admin@fe80::20c:42ff:fe12:3456%eth0
scp backup.rsc 'admin@[fe80::20c:42ff:fe12:3456%eth0]:'

O SSH aceita o endereço com o zone id direto, sem colchetes. O scp precisa dos colchetes porque usa dois-pontos para separar o caminho, e as aspas simples evitam que o shell interprete os colchetes. Com isso você consegue entrar, corrigir a regra que trancou o IPv4 e até salvar um backup antes de mexer.

IPv6 link-local no Windows e no Winbox

No Windows o zone id é um número. O jeito mais rápido de achar é o PowerShell; o ipconfig também mostra o número depois do % no endereço de link local da placa. Com o índice em mãos, o roteiro é o mesmo do Linux:

Get-NetIPInterface -AddressFamily IPv6
ping -n 3 ff02::1%12
Get-NetNeighbor -AddressFamily IPv6 -InterfaceIndex 12
ssh admin@fe80::20c:42ff:fe12:3456%12

O ping do Windows para multicast não lista bem quem respondeu, então use-o só para provocar o tráfego e leia o resultado no Get-NetNeighbor, que mostra o endereço fe80 e o MAC de cada vizinho. O cliente OpenSSH que vem no Windows 10 e 11 aceita o endereço com %12 do mesmo jeito que o Linux.

Winbox com endereço fe80

A documentação do Winbox pede o endereço IPv6 entre colchetes e, para link-local, o índice da interface depois do %. No campo de conexão, fica assim:

[fe80::20c:42ff:fe12:3456%12]

Se precisar de outra porta, ela vai depois do colchete, como em [fe80::...%12]:8299. O Winbox também conecta pelo MAC, na aba de vizinhos, o que resolve o mesmo problema por outro caminho. A diferença é que o MAC-Winbox só serve ao Winbox e costuma ficar restrito a uma porta ou desligado no hardening, enquanto o IPv6 link-local atende também SSH, scp e qualquer ferramenta de linha de comando.

OndeFormatoZone id
Linuxssh admin@fe80::…%eth0Nome da placa
Windows (ssh, ping)ssh admin@fe80::…%12ifIndex da interface
macOSssh admin@fe80::…%en0Nome da placa
Winbox[fe80::…%12]Colchetes e ifIndex
scp e URLs‘admin@[fe80::…%eth0]:’Colchetes por causa dos dois-pontos

Requisitos no Mikrotik

No RouterOS v7 o IPv6 vem ligado e cada interface ativa recebe um fe80 gerado a partir do MAC. Os comandos abaixo conferem o estado, religam o IPv6 se alguém desligou e mostram endereços e vizinhos:

/ipv6 settings print
/ipv6 settings set disable-ipv6=no
/ipv6 address print
/ipv6 neighbor print

No /ipv6 address print os endereços IPv6 link-local aparecem com as flags D e L, de dinâmico e link-local. Se o disable-ipv6 estiver em yes, não existe fe80 em lugar nenhum e o truque não funciona. Esse é um dos motivos para deixar o IPv6 ligado mesmo em roteador que ainda não roteia IPv6 para clientes.

Depois do hardening: liberar fe80 só na porta de gerência

Se você seguiu o guia de segurança no Mikrotik RouterOS v7, o SSH e o Winbox só aceitam a rede do NOC, e o firewall IPv6 descarta o resto no input. Nesse estado o IPv6 link-local também fica bloqueado, o que é correto para as portas de cliente. Para manter o atalho de bancada, libere fe80::/10 apenas na porta de gerência:

/ip service set ssh address=198.51.100.0/24,203.0.113.10/32,2001:db8:100::/48,fe80::/10
/ip service set winbox address=198.51.100.0/24,203.0.113.10/32,2001:db8:100::/48,fe80::/10
/user set op.noc address=198.51.100.0/24,2001:db8:100::/48,fe80::/10
/ipv6 firewall filter add chain=input action=accept protocol=tcp \
    dst-port=22,8291 src-address=fe80::/10 \
    in-interface-list=porta-gerencia place-before=0
  • /ip service address: a lista de origens permitidas por serviço vale para IPv4 e IPv6, e o comando substitui a lista inteira. Por isso a linha repete a rede do NOC e o bastion do guia de hardening e só acrescenta fe80::/10. Sem o fe80::/10 ali, a conexão é recusada mesmo com o firewall liberado.
  • /user address: o usuário também tem lista de origens. Se o login funciona pelo NOC e falha pelo fe80, confira aqui.
  • in-interface-list=porta-gerencia: só a porta física de gerência aceita SSH e Winbox vindos de link-local. Um cliente ligado em outra porta, que também tem fe80, não passa.
  • place-before=0: a regra entra no topo da chain input, antes do drop final.

Requisitos no Huawei VRP

Nos switches e roteadores Huawei o IPv6 não vem ligado de fábrica. É preciso ativar o IPv6 no equipamento, depois na interface, e então gerar o endereço de enlace. Num equipamento que você ainda acessa pelo console, prepare a interface de gerência assim:

system-view
ipv6
interface GigabitEthernet0/0/1
 ipv6 enable
 ipv6 address auto link-local
 quit

O ipv6 no system-view liga a pilha IPv6 no equipamento. Dentro da interface, ipv6 enable ativa o IPv6 naquela porta e ipv6 address auto link-local gera o fe80 a partir do MAC; a documentação pede o ipv6 enable antes. Num switch da linha S a porta GigabitEthernet é camada 2 por padrão: use a interface Vlanif da VLAN de gerência no lugar dela, ou rode antes o undo portswitch nos modelos que aceitam. Nas linhas que tratam o SSH IPv6 em separado, como NE40E e CloudEngine, o stelnet ipv6 server enable liga o servidor SSH para conexões IPv6:

stelnet ipv6 server enable
display ipv6 interface brief
display ipv6 neighbors
display ssh server status

O primeiro comando mostra as interfaces com IPv6 e o estado de cada uma, o segundo lista os vizinhos e o terceiro diz se o servidor SSH aceita IPv6. Atenção ao ssh server-source e, nas versões que separam o IPv6, ao ssh ipv6 server-source: se eles prendem o SSH a uma loopback, o login pelo fe80 de outra interface é recusado. Para outros comandos do dia a dia, veja a lista de comandos para roteadores e switches Huawei.

Em equipamento já em produção, ligar IPv6 numa interface pode disparar anúncio de roteador ou vizinhança de protocolos que você não esperava. Faça na porta de gerência e confira o que mais está configurado para IPv6 antes.

Segurança: o IPv6 link-local também é uma porta

O mesmo mecanismo que salva a madrugada serve para quem está no seu enlace. Qualquer máquina na mesma VLAN do equipamento consegue achar o fe80 dele com um ping em ff02::1. Em rede de provedor isso importa: se a VLAN de clientes ou a de um PPPoE chega na mesma porta, o cliente está no mesmo enlace do concentrador.

  • Trate o IPv6 no firewall de input desde o primeiro dia, mesmo sem IPv6 roteado para clientes.
  • Aceite SSH, Winbox e SNMP vindos de fe80::/10 só na interface de gerência.
  • Nunca deixe senha padrão confiando que o IPv4 de gerência está protegido.
  • Desligar o IPv6 tira o atalho de quem ataca e também o seu. Prefira filtrar a desligar.

Quando o IPv6 entrar para os clientes, com prefixo delegado no PPPoE como no post sobre IPv6 no PPPoE com prefixo delegado, as regras de input continuam valendo. O tráfego de cliente usa os endereços globais; os fe80 do concentrador só devem atender o que é do enlace, como Neighbor Discovery e DHCPv6.

Erros comuns e como resolver

Quase todo problema com IPv6 link-local cai em três grupos: zone id, alcance do enlace e filtro no equipamento. A tabela resume o que aparece e onde olhar:

SintomaCausa provávelO que fazer
Invalid argument ou Network is unreachableFaltou o %interfaceAcrescente %eth0 ou %12
Ping em ff02::1 só mostra o notebookPlaca errada, cabo, VLAN ou IPv6 desligado no equipamentoConferir link, VLAN e disable-ipv6
Vizinho aparece, SSH não conectaFirewall IPv6, /ip service address ou server-sourceLiberar fe80::/10 na porta de gerência
Login recusado com senha certa/user address sem fe80::/10Incluir fe80::/10 no usuário
Vários fe80 na tabelaOutros equipamentos na mesma VLANComparar com o MAC da etiqueta
scp diz que o host é inválidoEndereço sem colchetesUsar ‘admin@[fe80::…%eth0]:’

Uma armadilha comum no Linux é o NetworkManager desconectar a placa por não ter recebido DHCP. Sem link ativo não existe fe80. Se acontecer, marque a conexão com IPv4 desativado ou manual e deixe o IPv6 em modo link-local, ou suba a placa na mão com ip link set.

Perguntas frequentes

O IPv6 link-local funciona através de um roteador?

Não. O prefixo fe80::/10 vale só dentro do enlace, e nenhum roteador encaminha pacotes com esse destino. O notebook precisa estar ligado direto no equipamento ou na mesma VLAN.

Preciso configurar IPv6 no notebook para usar o fe80?

Não. Basta o IPv6 estar ligado na placa, o que é o padrão no Linux, no Windows e no macOS. O endereço de enlace aparece sozinho quando o link sobe.

Como descubro o endereço fe80 do equipamento sem varrer a rede?

Mande um ping para ff02::1 com o zone id da sua placa e leia a tabela de vizinhos. Se o equipamento usa EUI-64, dá para calcular o endereço direto a partir do MAC da etiqueta.

O Winbox aceita endereço link-local?

Aceita, com o endereço entre colchetes e o índice da interface depois do %, como [fe80::20c:42ff:fe12:3456%12]. A porta, se for diferente da padrão, vai depois do colchete.

Desligar o IPv6 no equipamento é mais seguro?

Fecha esse caminho, mas também tira o seu acesso de emergência e atrasa a adoção de IPv6. O melhor é deixar ligado e filtrar o input, aceitando fe80 só na porta de gerência.

Conclusão

O IPv6 link-local é o acesso de reserva que já vem pronto em quase todo equipamento moderno. Com um cabo direto, um ping em ff02::1 e o zone id certo, você entra por SSH ou Winbox sem IPv4, sem DHCP e sem console. O cuidado é o mesmo de qualquer acesso: deixe o IPv6 ligado, filtre o input e aceite fe80 só onde faz sentido.

Guarde o roteiro junto com o kit de bancada. Na próxima vez que o IPv4 de gerência sumir, o IPv6 link-local pode poupar uma ida até o equipamento.

Leitura recomendada: Acesso via IPv6 Link-Local, na wiki do Brasil Peering Forum (conteúdo sob licença CC BY-NC 4.0).

Compartilhar:

Sobre o autor

Ivan Alves

Especialista em redes de provedores (ISP)

Ivan Alves trabalha há mais de 15 anos com redes de provedores de internet, do NOC ao backbone e à borda BGP. Coordena infraestrutura e tecnologia em um provedor regional e escreve aqui os tutoriais que gostaria de ter encontrado quando começou: comandos testados, cenário explicado e o porquê de cada linha.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *