Problema y objetivo
No obtenemos IPv6 de nuestro ISP, por lo tanto, tengo un túnel IPv6 que funciona bien pero, por supuesto, no es muy rápido. Y no es realmente confiable. Me gusta tener IPv6 disponible "por si acaso", pero quiero que ciertos hosts (dominios) se conecten solo con IPv4.
Protocolo predeterminado
Me parece que todas las aplicaciones prueban primero IPv6; Esta es probablemente una configuración glibc. Estaría bien si este valor predeterminado se revierte (para todas las aplicaciones).
Netfilter
Sería posible bloquear las direcciones / redes IPv6 con Netfilter, pero hay dos problemas:
- ¿Causaría esto una demora mientras la aplicación espera un tiempo de espera de IPv6 antes de probar IPv4?
- Algunos dominios parecen estar mezclados y parece un caos. Separar google.com y youtube.com parece algo que no quieres hacer si puedes evitarlo.
Solo noto que la página del manual ip route
dice para el tipo de enrutamiento unreachable
:
Los remitentes locales obtienen un error EHOSTUNREACH.
¿Sucede lo mismo con los DROP o RECHAZOS de Netfilter? Tal error no debería causar un retraso relevante.
Filtrado de DNS
Otra solución (bastante fácil si es posible) sería filtrar los registros AAAA para ciertos dominios. Si eso no es posible (fácilmente): ¿es posible conectar el servidor DNS y Netfilter para que yo sepa "la dirección IP X pertenece al dominio Y" para poder agregarla a Netfilter? ¿Algo más elegante que registrar todo y agarrar el registro?
¿El camino a seguir?
¿Qué (otras) posibilidades hay y cuál es la más fácil?
Respuestas:
Puede controlar la selección de direcciones con
/etc/gai.conf
. El archivo de configuración está bien documentado y ya contiene los valores predeterminados, por lo que puede comenzar a ajustar.Los valores predeterminados interesantes aquí son:
La última línea da la preferencia más baja a todas las direcciones IPv4.
Si desea dar una mayor preferencia a todos los IPv4, puede cambiarlo a:
Si solo desea dar mayor preferencia a direcciones o bloques específicos de IPv4, también puede especificarlos. Recuerde que debe usar un IPv6 mapeado IPv4 en hexadecimal.
Entonces, para dar preferencia a 203.0.113.0/24 sobre todo IPv6, debe agregar:
Reinicie las aplicaciones en ejecución para que recojan los cambios que realice.
En sistemas derivados de Debian,
/etc/gai.conf
ya está presente. En los sistemas derivados de Red Hat, está ausente, pero se encuentra un archivo de muestra en/usr/share/doc/glibc-common-*/gai.conf
; solo cópialo a/etc
.fuente
OK, aquí hay una respuesta completamente diferente.
Coloque los hosts infractores con conectividad IPv6 de mala calidad
/etc/hosts
con su dirección IPv4 correspondiente.Por ejemplo:
Recuerde eliminarlos cuando su (en este caso) o su conectividad IPv6 mejore.
fuente
/etc/hosts
. Si a nadie se le ocurre "¡El software de servidor DNS XY puede filtrar de esta manera!" Probablemente termine con eso.