¿Sabéis? Creo que uno de los obstáculos que impiden el desarrollo de Internet como una auténtica red distribuida son las trabas que ponen los proveedores de acceso a ofrecer direcciones IP públicas estáticas a sus clientes domésticos, que se tienen que apañar con direcciones dinámicas, redes privadas y NAT. Una lástima, porque hacer las máquinas de todos accesibles vía Internet permitiría a cualquiera ofrecer sus propios servicios, empoderando a los individuos y nivelando su posición frente a los grandes proveedores de contenidos, como ocurre en redes libres y neutrales como guifi.net. Y es que, a diferencia de los medios de masas, Internet no distingue entre emisores y receptores.
La escasez de direcciones IPv4 es un (muy debatible) motivo argüido por los proveedores para mantener el actual statu quo. IPv6, en cambio, ofrece una auténtica abundancia de direcciones para todo el mundo y, aunque no lo parezca, ya es posible usarlo sea cual sea nuestra forma de acceso a Internet. Además, es divertido eso de conectarse a la Internet del futuro, ¡así que ya es hora de dar el salto!
Para empezar poco a poco, este artículo describe cómo dotar de conexión IPv6 estable a una máquina Debian con dirección IPv4 fija, usando 6to4, sin necesidad de suscribirse a un servidor de túneles y con una configuración realmente mínima.
Configuración de 6to4
En primer lugar, nos tenemos que asegurar de
que tenemos acceso a un encaminador 6to4
mediante la dirección anycast 192.88.99.1
:
$ ping -c 4 192.88.99.1 PING 192.88.99.1 (192.88.99.1) 56(84) bytes of data. 64 bytes from 192.88.99.1: icmp_seq=1 ttl=249 time=2.00 ms 64 bytes from 192.88.99.1: icmp_seq=2 ttl=249 time=2.09 ms 64 bytes from 192.88.99.1: icmp_seq=3 ttl=249 time=1.85 ms 64 bytes from 192.88.99.1: icmp_seq=4 ttl=249 time=2.04 ms --- 192.88.99.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3000ms rtt min/avg/max/mdev = 1.854/1.996/2.091/0.099 ms
También podemos ejecutar mtr 192.88.99.1
para
comprobar si el encaminador se encuentra muy lejos.
Por supuesto, cuanto más cerca esté, mejor.
Para crear una configuración 6to4 para la dirección pública IPv4 de la máquina,
lo más sencillo es usar el generador de configuración IPv6 con 6to4 para Debian.
Por ejemplo, para la dirección IPv4 1.2.3.4
obtendríamos este fragmento:
# IPv6 using a 6to4 tunnel to the internet (from 1.2.3.4) # Generated at http://debian6to4.gielen.name/ auto tun6to4 iface tun6to4 inet6 v4tunnel pre-up modprobe ipv6 address 2002:0102:0304::1 netmask 16 gateway ::192.88.99.1 endpoint any local 1.2.3.4 # If you have an IPv6-capable firewall (and you really should have one), # it can be enabled by using an "up" rule, such as the example below. # up /usr/local/sbin/ipv6firewall.sh tun6to4
Simplemente incluimos el fragmento anterior en /etc/network/interfaces
y activamos la interfaz con:
# ifup tun6to4
Podemos probar la nueva dirección IPv6 haciendo ping a alguna máquina de la red IPv6, por ejemplo:
# ping6 -I tun6to4 -c 4 www.whatismyv6.com PING www.whatismyv6.com(www.whatismyv6.com) from 2002:102:304::1 tun6to4: 56 data bytes 64 bytes from www.whatismyv6.com: icmp_seq=1 ttl=59 time=9.10 ms 64 bytes from www.whatismyv6.com: icmp_seq=2 ttl=59 time=10.3 ms 64 bytes from www.whatismyv6.com: icmp_seq=3 ttl=59 time=10.3 ms 64 bytes from www.whatismyv6.com: icmp_seq=4 ttl=59 time=10.1 ms --- www.whatismyv6.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 9.107/9.980/10.333/0.518 ms
Si esto no funciona y tenemos un cortafuegos en el ordenador, es posible que necesitemos indicarle que permita el paso a los paquetes IPv4 con protocolo IPv6, con el comando siguiente o el equivalente en nuestro sistema de configuración del cortafuegos:
# iptables -t filter -A INPUT -p ipv6 -j ACCEPT
Una vez funcionen los ping, podemos hacer
una prueba de acceso a la web vía IPv6.
Lo más sencillo es visitar www.whatismyv6.com
usando w3m:
$ w3m -6 www.whatismyv6.com
Si la página nos muestra una dirección de origen IPv6, esto ya está hecho. Sí, de veras, ya está. ¡Bienvenidos al maravilloso mundo de IPv6!
Direcciones adicionales
Bien, ya disponemos de nuestra dirección IPv6,
pero realmente tenemos mucho más que eso:
6to4 reserva para cada dirección IPv4
216 subredes de 264 direcciones IPv6
(eso es un cuatrillón de direcciones, ¡decidme si no es la abundancia total!)
para que montemos nuestra propia red IPv6.
Además, asignar direcciones IPv6 adicionales a la máquina
es tan fácil como añadir una opción up
y una down
al bloque de configuración de tun6to4
para cada dirección extra.
Por ejemplo:
up ip -6 addr add 2002:0102:0304::2/16 dev $IFACE preferred_lft 0 down ip -6 addr del 2002:0102:0304::2/16 dev $IFACE
La opción preferred_lft 0
evita que se use la última dirección añadida
como dirección de origen por defecto en las conexiones salientes.
Consultad este artículo
para una descripción más detallada de este mecanismo
(¡gracias Axel!).
Si nuestra máquina tuviera diferentes direcciones IPv4 públicas,
podríamos añadir una entrada similar a tun6to4
para cada una de ellas,
pero con una sola ya tenemos muchísimas direcciones,
y de paso simplificamos la configuración de red
y nos facilitaremos las cosas
si después queremos preparar la resolución inversa de nombres.
Para saber cómo montar una red IPv6 detrás de esta máquina, consultad este punto de la guía IPv6 de Madduck.
Configuración del cortafuegos
Ya que la máquina estará accesible al público vía IPv6,
es recomendable configurar su cortafuegos con ip6tables
(por ejemplo usando local-iptables
).
Las reglas deberían de ser similares a las de IPv4.
Por ejemplo, para permitir el tráfico local,
las conexiones entrantes a SSH y SMTP,
y las establecidas desde dentro:
# ip6tables -t filter -N in-new # ip6tables -t filter -A INPUT -i lo -j ACCEPT # ip6tables -t filter -A INPUT -p ipv6-icmp -j ACCEPT # ip6tables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # ip6tables -t filter -A INPUT -m state --state INVALID -j DROP # ip6tables -t filter -A INPUT -m state --state NEW -j in-new # ip6tables -t filter -A in-new -p tcp -m tcp ! --syn -j RETURN # ip6tables -t filter -A in-new -p tcp -m tcp --dport 22 -j ACCEPT # ip6tables -t filter -A in-new -p tcp -m tcp --dport 25 -j ACCEPT # ip6tables -t filter -A INPUT -m limit --limit 3/min --limit-burst 10 \ -j LOG --log-prefix "[INPUT6]: " # ip6tables -t filter -A INPUT -j REJECT
Con los núcleos Linux anteriores a 2.6.20 no funciona el seguimiento de conexiones. La configuración siguiente es similar a la anterior, pero no tiene en cuenta el estado de las conexiones (y desafortunadamente tampoco permite tráfico UDP sobre IPv6 sin reglas explícitas):
# ip6tables -t filter -A INPUT -i lo -j ACCEPT # ip6tables -t filter -A INPUT -p ipv6-icmp -j ACCEPT # ip6tables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT # ip6tables -t filter -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT # ip6tables -t filter -A INPUT -p tcp -m tcp --dport 1024:65535 \ ! --syn -j ACCEPT # ip6tables -t filter -A INPUT -m limit --limit 3/min --limit-burst 10 \ -j LOG --log-prefix "[INPUT6]: " # ip6tables -t filter -A INPUT -j REJECT
Resolución de nombres
Las direcciones IPv6 són numeracos bastante difíciles de recordar.
Si queremos asociar nombres a las direcciones mediante DNS,
deberemos incluir nuevas entradas de tipo AAAA
en los servidores de nombres correspondientes.
En el ejemplo anterior, la entrada siguiente asignaría
el nombre test6to4
a la dirección IPv6:
test6to4 IN AAAA 2002:102:304::1
Una ver hechos los cambios en el DNS,
usamos dig
(paquete dnsutils
) para
comprobar que la resolución directa funciona bien en nuestro servidor DNS.
Para el ejemplo:
$ dig -t AAAA test6to4.example.net @SERVIDOR_DE_DNS +short 2002:102:304::1
Si queremos que funcione la resolución inversa habremos de sufrir un poco más porque es necesario disponer de un servidor de DNS donde podamos crear nuevos dominios y pedir que se nos delegue la resolución de las direcciones IPv6 que comiencen con el prefijo asociado a nuestra dirección IPv4. Afortunadamente esto último es automático.
El propósito es hacer que nuestra dirección IPv6 del ejemplo, que escrita en forma completa es:
2002:0102:0304:0000:0000:0000:0000:0001
o en términos de DNS (¡cuidado, que va!):
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.0.3.0.2.0.1.0.2.0.0.2.ip6.arpa
(es decir, la dirección completa invertida con los dígitos separados por puntos)
sea resuelta a un nombre como test6to4.example.net
.
Comenzaremos por visitar 6to4.nro.net
usando IPv6
desde la misma máquina donde estemos haciendo los cambios:
$ w3m -6 http://6to4.nro.net/
El dominio indicado como reverse será
el que habremos de crear en nuestro servidor DNS
(la instalación o configuración de éste queda como ejercicio para el lector,
pero podéis inspiraros en esta página).
En nuestro ejemplo, el dominio inverso sería 4.0.3.0.2.0.1.0.2.0.0.2.ip6.arpa
,
y el fichero de zona completo podría ser similar a éste:
@ IN SOA 4.0.3.0.2.0.1.0.2.0.0.2.ip6.arpa. hostmaster.example.net. ( 2009122102 ; Serial number (YYYYMMDDnn) 3h ; Refresh time 1h ; Retry time 7d ; Expire time 3h ; Default TTL ) ; Nameservers IN NS ns1.example.net. IN NS ns2.example.net. ; IPv6 pointers $ORIGIN 4.0.3.0.2.0.1.0.2.0.0.2.ip6.arpa. 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR test6to4.example.net.
Una vez completados los cambios al DNS,
usamos dig
(paquete dnsutils
) para
comprobar que la resolución inversa funciona bien en nuestro servidor DNS.
Para el ejemplo:
$ dig -x 2002:102:304::1 @SERVIDOR_DE_DNS +short test6to4.example.net.
Tras esto, pedimos la delegación visitando otra vez 6to4.nro.net
usando IPv6 desde la misma máquina donde estemos haciendo los cambios:
$ w3m -6 http://6to4.nro.net/
Introducimos en el formulario la dirección de correo del administrador (hostmaster@example.net
)
y los nombres de al menos dos servidores de nombres (ns1.example.net
y ns2.example.net
) del dominio inverso,
una contraseña para evitar que cualquier usuario de la máquina pueda cambiar los datos,
y pulsamos Submit
.
Arreglado.
Cuando los cambios del DNS se hayan propagado (cosa que puede llevar horas),
deberíais poder ver la resolución inversa correcta
p.ej. en la salida de ping6
(entre paréntesis):
$ ping6 -c 4 test6to4.example.net PING test6to4.example.net(test6to4.example.net) 56 data bytes 64 bytes from 2002:102:304::1 icmp_seq=1 ttl=64 time=0.033 ms 64 bytes from 2002:102:304::1 icmp_seq=2 ttl=64 time=0.053 ms 64 bytes from 2002:102:304::1 icmp_seq=3 ttl=64 time=0.052 ms 64 bytes from 2002:102:304::1 icmp_seq=4 ttl=64 time=0.049 ms --- test6to4.example.net ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.033/0.046/0.053/0.011 ms
¡Más, más, más!
Ahora que ya sabemos cómo dotar a nuestro servidor con una conexión IPv6 de primera, estaría bien poder configurar nuestro ordenador de casa para acceder a Internet vía IPv6. En algún envío futuro comentaré cómo dotar de conectividad IPv6 a una máquina situada tras un encaminador con NAT sin apenas problemas, usando Teredo. No obstante, esto ofrece una dirección IPv6 temporal que puede cambiar según los caprichos de nuestro proveedor de Internet o de nuestro encaminador.
El siguiente paso sería configurar nuestra red de casa para que forme una red IPv6 plenamente accesible desde el exterior, por ejemplo usando el servidor de túneles SixXS. Afortunadamente, el tío Madduck ya ha descrito el procedimiento con pelos y señales en su página sobre IPv6 con Debian. Incluso podemos encontrar en la web cómo montar un túnel y red IPv6 con OpenWRT, aunque hay algunos problemas de sobrecarga del procesador. Si me animo ya os contaré cómo fue.
¡Hasta el próximo viaje IPv6!
Interesant
Amb el retras que portem en l'adopció del ipv6 a europa i la crisi económica sembla que aquesta será la única sol.lució durant algun temps.
A vore si algún valent s'atreveix a fer la transició de una vegada.
PD: Ja porte 4 intents del maleit CAPTCHA.
Desesperançador
Veent la IPv6 Matrix me cau l’ànima als peus pel desinterès en l’adopció d’IPv6, que ja sembla completament interessat, valga el joc de paraules. A Espanya per exemple els operadors s’ho estan prenent amb calma, probablement perquè estiguen esperant a que els ploguen les subvencions. Però com dius, amb la crisi probablement s’endarreriran i els operadors podrien fer pagar cares les seues adreces (en unes altres paraules, NAT per a tothom o paga la teua adreça pública —i dinàmica, per descomptat).
(He simplificat un poc els captcha, ¡si els inhabilite em plou l’spam!)
No em cap al cap
Jo es que no entenc com una cosa que es sol.luciona amb una actualització softwar en el pitjor dels casos, pot tardar tants anys en portarse a termini, sobre tot si tenim en compte que la majoría dels dispositius de xarxa ja incorporen IPv6 desde fa prou anys, açó es un destarifo.
Per cert m'agrada el nou tema, més acorde amb el nom del blog i lleuger, menys de 300Kb dels que nomes 40Kb o 60Kb son dinamics.
Ahh i el captcha a la primera nen :-P.
No tan fàcil…
Bé, no crec que siga fàcil a la «perifèria», on et pots trobar amb maquinari i programari molt divers a sovint fora del teu control. Pensa per exemple en els routers que regalen els ISP: molts d’ells no admeten IPv6 i són tan vells que probablement el firmware ja no tinga manteniment. A les troncals d’Internet segurament hi haja menys problemes, però a l’entorn domèstic i d’oficina la cosa es resistirà més perquè algú ho haurà de fer
;)
.M’alegre de que t’agrade el nou tema!
Pingback