Problema e objetivo
Como não obtemos IPv6 do nosso ISP, tenho um túnel IPv6 que funciona bem, mas é claro que não é muito rápido. E não é realmente confiável. Eu gosto de ter o IPv6 disponível "apenas por precaução", mas quero que determinados hosts (domínios) sejam conectados apenas ao IPv4.
Protocolo padrão
Parece-me que todos os aplicativos experimentam o IPv6 primeiro; essa é provavelmente uma configuração glibc. Eu ficaria bem se esse padrão fosse revertido (para todos os aplicativos).
Netfilter
Seria possível bloquear endereços / redes IPv6 com o Netfilter, mas existem dois problemas:
- Isso causaria um atraso, pois o aplicativo aguardaria o tempo limite do IPv6 antes de tentar o IPv4?
- Alguns domínios parecem confusos que parecem caos. Separar google.com e youtube.com parece algo que você não deseja fazer se puder evitá-lo.
Acabei de observar que a página de manual do ip route
diz para o tipo de roteamento unreachable
:
Os remetentes locais recebem um erro EHOSTUNREACH.
O mesmo acontece com as DROPs ou REJECTs do Netfilter? Esse erro não deve causar um atraso relevante.
Filtragem de DNS
Outra solução (bastante fácil, se isso for possível) seria filtrar registros AAAA para determinados domínios. Se isso não for (facilmente) possível: É possível conectar o servidor DNS e o Netfilter para que eu saiba "O endereço IP X pertence ao domínio Y" para que eu possa adicioná-lo ao Netfilter? Algo mais elegante do que registrar tudo e grepping o log?
O caminho para seguir?
Quais (outras) possibilidades existem e qual é a mais fácil?
Respostas:
Você pode controlar a seleção de endereço com
/etc/gai.conf
. O arquivo de configuração está bem documentado e já contém os padrões, para que você possa começar a ajustar.Os padrões interessantes aqui são:
A última linha oferece a menor preferência para todos os endereços IPv4.
Se você deseja dar uma preferência maior a todos os IPv4, altere-os para:
Se você deseja apenas dar maior preferência a endereços ou blocos IPv4 específicos, também pode especificá-los. Lembre-se de que você deve usar um IPv6 mapeado para IPv4 em hexadecimal.
Portanto, para dar preferência a 203.0.113.0/24 sobre todo o IPv6, você adicionaria:
Reinicie os aplicativos em execução para que eles capturem as alterações feitas.
Nos sistemas derivados do Debian,
/etc/gai.conf
já está presente. Nos sistemas derivados da Red Hat, ele está ausente, mas um arquivo de amostra está localizado em/usr/share/doc/glibc-common-*/gai.conf
; basta copiá-lo para/etc
.fonte
OK, aqui está uma resposta completamente diferente.
Coloque os hosts ofensivos com conectividade IPv6 de baixa qualidade
/etc/hosts
com seu endereço IPv4 correspondente.Por exemplo:
Lembre-se de removê-los quando a conectividade deles (nesse caso) ou a sua IPv6 melhorar.
fonte
/etc/hosts
. Se ninguém aparecer "O software do servidor DNS XY pode filtrar dessa maneira !!" Provavelmente vou acabar com isso.