Configurar Herramientas para Utilizar IPv6 en un Servidor Linux
Introducción
IPv6 es la versión más reciente del protocolo IP en la que todo el Internet se basa para conectarse a otras ubicaciones (el protocolo IP es un poco redundante porque IP significa protocolo de Internet, pero lo usaremos porque es fácil). Mientras que IPv4 todavía está en uso en muchas áreas del mundo, el espacio de direcciones IPv4 se está consumiendo a un ritmo rápido y no es lo suficientemente grande como para sostener el rápido despliegue de dispositivos preparados para Internet.
IPv6 busca resolver estos problemas. Además de hacer mejoras generales en el protocolo, el beneficio más obvio de la utilización de direcciones IPv6 tiene un espacio de direcciones mucho mayor. Mientras que IPv4 permite direcciones de 2 ^ 32 (con algunas de las reservadas para propósitos especiales), el espacio de direcciones IPv6 permite 2 ^ 128 direcciones, lo que es un aumento increíble.
Aunque IPv6 abre muchas oportunidades y resuelve muchos problemas de largos datos, requiere un poco de ajuste a algunas de sus configuraciones de red de rutina si está acostumbrado a usar IPv4 exclusivamente. En esta guía, hablaremos de algunas de las contrapartes IPv6 de algunas herramientas y utilidades IPv4 populares y discutiremos cómo configurar algunos servicios populares para utilizar IPv6.
Diagnósticos de Red Triviales con IPv6
Algunas de las utilidades más simples utilizadas para diagnosticar problemas de red se crearon con IPv4 en mente. Para abordar esto, podemos utilizar sus primos IPv6 cuando queremos hacer frente al tráfico IPv6.
En primer lugar, para ver las direcciones IPv6 configuradas actualmente para su servidor, puede utilizar las herramientas iproute2
para mostrarle las direcciones configuradas:
ip -6 addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2400:6180:0:d0::41f/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::601:15ff:fe43:b201/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 fe80::601:15ff:fe43:b202/64 scope link
valid_lft forever preferred_lft forever
Para imprimir la tabla de enrutamiento IPv6, puede utilizar netstat
escribiendo algo como esto:
netstat -A inet6 -rn
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
2400:6180:0:d0::/64 :: U 256 0 1 eth0
fe80::/64 :: U 256 0 0 eth1
fe80::/64 :: U 256 0 0 eth0
::/0 2400:6180:0:d0::1 UG 1024 0 0 eth0
::/0 :: !n -1 1 90 lo
::1/128 :: Un 0 1 20 lo
2400:6180:0:d0::41f/128 :: Un 0 1 86 lo
fe80::601:15ff:fe43:b201/128 :: Un 0 1 75 lo
fe80::601:15ff:fe43:b202/128 :: Un 0 1 0 lo
ff00::/8 :: U 256 0 0 eth1
ff00::/8 :: U 256 0 0 eth0
::/0 :: !n -1 1 90 lo
Si prefiere las herramientas iproute2, puede obtener información similar escribiendo:
ip -6 route show
2400:6180:0:d0::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth1 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
default via 2400:6180:0:d0::1 dev eth0 metric 1024
Ahora que ya sabe cómo obtener parte de su propia información de IPv6, vamos a aprender un poco acerca de cómo usar algunas herramientas que funcionan con IPv6.
El comando omnipresente ping
es realmente específico de IPv4. La versión IPv6 del comando, que funciona exactamente igual pero para las direcciones IPv6, se denomina inesperadamente ping6
. Esto hará ping a la interfaz de bucle local:
ping6 -c 3 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from ::1: icmp_seq=3 ttl=64 time=0.022 ms
--- ::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.021/0.023/0.028/0.006 ms
Como puede ver, esto funciona exactamente como se esperaba, la única diferencia es la versión del protocolo que se utiliza para el direccionamiento.
Otra herramienta en la que puede confiar es traceroute
. También hay un equivalente IPv6 disponible:
traceroute6 google.com
traceroute to google.com (2404:6800:4003:803::1006) from 2400:6180:0:d0::41f, 30 hops max, 24 byte packets
1 2400:6180:0:d0:ffff:ffff:ffff:fff1 (2400:6180:0:d0:ffff:ffff:ffff:fff1) 0.993 ms 1.034 ms 0.791 ms
2 2400:6180::501 (2400:6180::501) 0.613 ms 0.636 ms 0.557 ms
3 2400:6180::302 (2400:6180::302) 0.604 ms 0.506 ms 0.561 ms
4 10gigabitethernet1-1.core1.sin1.he.net (2001:de8:4::6939:1) 6.21 ms 10.869 ms 1.249 ms
5 15169.sgw.equinix.com (2001:de8:4::1:5169:1) 1.522 ms 1.205 ms 1.165 ms
6 2001:4860::1:0:337f (2001:4860::1:0:337f) 2.131 ms 2.164 ms 2.109 ms
7 2001:4860:0:1::523 (2001:4860:0:1::523) 2.266 ms 2.18 ms 2.02 ms
8 2404:6800:8000:1c::8 (2404:6800:8000:1c::8) 1.741 ms 1.846 ms 1.895 ms
Puede estar familiarizado con el comando tracepath
. Esto sigue el ejemplo de los otros comandos para la versión IPv6:
tracepath6 ::1
1?: [LOCALHOST] 0.045ms pmtu 65536
1: ip6-localhost 0.189ms reached
1: ip6-localhost 0.110ms reached
Resume: pmtu 65536 hops 1 back 64
Si necesita supervisar el tráfico a medida que entra en su computadora, el programa tcpdump
se utiliza con frecuencia. Podemos obtener esta utilidad para mostrar sólo nuestro tráfico IPv6 mediante el filtrado con la expresión ip6 or proto ipv6
después de nuestras opciones.
Por ejemplo, podemos medir rápidamente el flujo de tráfico IPv6 fácilmente diciéndole a la herramienta que solo capture la información que nos interesa. Podemos usar este comando:
tcpdump -t -n -i eth0 -s 512 -vv ip6 or proto ipv6
Comprobación de la Información de DNS IPv6
Puede comprobar fácilmente la información DNS de sus dominios utilizando las herramientas típicas. La principal diferencia es que probablemente va a pedir registros AAAA
, que se utilizan para las direcciones IPv6 en lugar de registros A
, que sólo se utilizan para la cartografía IPv4.
Para recuperar un registro de dirección IPv6 para un dominio, simplemente puede solicitar el registro AAAA
. Con el comando host
, puede hacer esto así:
host -t AAAA google.com
google.com has IPv6 address 2404:6800:4003:803::1004
If you prefer to use dig
, you can get similar results by using this syntax:
dig google.com AAAA
; <<>> DiG 9.8.1-P1 <<>> google.com AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14826
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;google.com. IN AAAA
;; ANSWER SECTION:
google.com. 299 IN AAAA 2404:6800:4003:803::1006
;; Query time: 5 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Tue Apr 1 13:59:23 2014
;; MSG SIZE rcvd: 56
Como puede ver, la comprobación de que su DNS está resolviendo correctamente para sus dominios, es igual de fácil cuando está trabajando con direcciones IPv6.
Servicios de Red con IPv6
La mayoría de sus servicios de red comunes deben tener la capacidad de manejar el tráfico IPv6. A veces, necesitan banderas especiales o sintaxis, y otras veces, proporcionan una implementación alternativa específicamente para IPv6.
Configuración de SSH
Para SSH, el daemon se puede configurar para escuchar una dirección IPv6. Esto se controla en el archivo de configuración que se puede abrir con:
sudo nano /etc/ssh/sshd_config
El ListenAddress
especifica a qué dirección se unirá el daemon SSH. Para direcciones IPv4, esto se parece a esto:
ListenAddress 111.111.111.111:22
Esto escucha la dirección IPv4 111.111.111.111
en el puerto 22. Para una dirección IPv6, puede hacer lo mismo colocando la dirección entre corchetes:
ListenAddress [1341:8954:a389:33:ba33::1]:22
Esto le dice al demonio SSH que escuche la dirección 1341:8954:a389:33:ba33::1
en el puerto 22. Puede decirle que escuche todas las direcciones IPv6 disponibles escribiendo:
ListenAddress ::
Recuerde recargar el daemon después de realizar los cambios:
sudo service ssh restart
En el lado del cliente, si el daemon al que se está conectando está configurado para escuchar utilizando IPv4 e IPv6, puede forzar al cliente a utilizar IPv6 sólo mediante el indicador -6
, de la siguiente manera:
<>ssh -6 Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Configuración del Servidor Web
Al igual que el daemon SSH, los servidores web también deben estar configurados para escuchar en direcciones IPv6.
En Apache, puede configurar el servidor para responder a peticiones en una dirección IPv6 determinada utilizando esta sintaxis:
Listen [1341:8954:a389:33:ba33::1]:80
Esto indica al servidor que escuche esta dirección específica en el puerto 80. Podemos combinar esto con una dirección IPv4 para permitir una mayor flexibilidad como esta:
Listen 111.111.111.111:80
Listen [1341:8954:a389:33:ba33::1]:80
En la práctica, si desea escuchar conexiones en todas las interfaces en todos los protocolos en el puerto 80, puede utilizar:
Listen 80
En el nivel de host, también puede especificar una dirección IPv6. Aquí, puede ver que es posible configurar un host para que coincida con una dirección IPv4 y una dirección IPv6:
<VirtualHost 111.111.111.111:80, [1341:8954:a389:33:ba33::1]:80>
. . .
</VirtualHost>
Recuerde reiniciar el servicio para realizar los cambios:
sudo service apache2 restart
Si prefiere utilizar Nginx como su servidor web, podemos implementar configuraciones similares. Para la directiva listen, podemos utilizar esto para el tráfico IPv6:
listen [1341:8954:a389:33:ba33::1]:80;
En Linux, esto también permite el tráfico IPv4 en el puerto 80, ya que automáticamente asigna las peticiones IPv4 a la dirección IPv6. Esto realmente le impide especificar una dirección IPv6 y una dirección IPv4 por separado como esto:
listen [1341:8954:a389:33:ba33::1]:80;
listen 111.111.111.111:80;
Esto resultará en un error diciendo que el puerto ya está enlazado a otro servicio. Si desea utilizar directivas separadas como esta, debe desactivar esta funcionalidad utilizando sysctl
siguiente manera:
sysctl -w net.ipv6.bindv6only=1
Puede asegurarse de que se aplique automáticamente al arrancar añadiéndolo a /etc/sysctl.conf
:
<>sudo nano /etc/sysctl.conf
. . .
net.ipv6.bindv6only=1
Posteriormente, puede usar una configuración similar a la que estaba fallando antes añadiendo el ipv6only=on
a la directiva de escucha de IPv6:
listen [1341:8954:a389:33:ba33::1]:80 ipv6only=on;
listen 111.111.111.111:80;
Una vez más, reinicie Nginx para realizar los cambios:
sudo service nginx restart
Configuración de Firewall
Si está acostumbrado a configurar sus reglas de Firewall usando los front-ends de configuración de netfilter como iptables
, estará encantado de saber que hay una herramienta equivalente llamada ip6tables
.
Tenemos aquí una guía sobre cómo configurar iptables para Ubuntu aquí.
Para la variante IPv6, simplemente puede reemplazar el comando con ip6tables
para administrar las reglas de filtro de paquetes IPv6. Por ejemplo, para listar las reglas IPv6, puede escribir:
sudo ip6tables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Si está utilizando la herramienta ufw
, entonces felicidades, ya está hecho! La herramienta ufw
configura ambos paquetes al mismo tiempo, a menos que se especifique lo contrario. Puede que tenga que agregar reglas para sus direcciones IPv6 específicas, pero no tendrá que utilizar una herramienta diferente.
Puede obtener más información sobre cómo utilizar ufw aquí.
Configuración de Wrappers de TCP
Si utiliza TCP wrappers para controlar el acceso a su servidor a través de los archivos /etc/hosts.allow
y /etc/hosts.deny
, simplemente puede usar la sintaxis IPv6 para hacer coincidir ciertas reglas de origen.
Por ejemplo, sólo puede permitir que una dirección IPv4 y una dirección IPv6 se conecten a través de SSH escribiendo la edición del archivo /etc/hosts.allow
y agregando esto:
sudo nano /etc/hosts.allow
. . .
sshd: 111.111.0.0/255.255.254.0, [1341:8954:a389:33::]/64
Como puede ver, es muy fácil adaptar las reglas actuales de TCP wrapper para aplicarlas a las direcciones IPv6. Puede obtener más información sobre cómo formatear direcciones IP y subredes aquí.
Conclusión
Con suerte, ya te das cuenta de que la transición a IPv6 o aprovechando IPv6 además de IPv4 es un proceso bastante sencillo.
Tendrá que investigar específicamente cualquier servicio de red que utilice para averiguar si hay algún cambio de configuración adicional que sea necesario para utilizar correctamente sus recursos de IPv6. Sin embargo, ahora debería sentirse más cómodo trabajando con IPv6 con sus utilidades y servicios más básicos.
Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian