Si quieres implantar una red sólo con IPv6 perfecto! pero nos vamos a encontrar con un pequeño problema, que en internet aún hay mucho contenido que sólo es accesible por IPv4. La solución pasa pues para usar NAT64 y DNS64 para permitir a los hosts IPv6 comunicarse con los hosts IPv4.
El funcionamiento básicamente consiste en crear una cache de DNS (DNS64) que convierte las IPv4 en IPv6 para que los equipos de nuestra red accedan a estos hosts IPv4 con una IPv6 y el NAT64 servirá para acceder a estos hosts IPv4, algo similar a una red local, en la que todos los equipos con una IP de la red 192.168.1.0/24 salen a internet con una única IPv4 pública.
Para el DNS64 vamos a usar bind9 y para NAT64 Tayga.
Lo primero es instalar bind9
root@murzim-dnsnat64:/# apt-get install bind9
Lo siguiente es configurar una IPv6 en nuestro servidor
root@murzim-dnsnat64:~# vi /etc/network/interfaces iface eth123 inet6 static address 2a00:1508:6001::101 netmask 64 up ip r add default via 2a00:1508:6001::1 dev eth123
root@murzim-dnsnat64:~# ifconfig eth123 eth123 Link encap:Ethernet HWaddr 52:33:49:19:ff:35 inet addr:5.10.205.131 Bcast:5.10.205.191 Mask:255.255.255.192 inet6 addr: 2a00:1508:6001::101/64 Scope:Global inet6 addr: fe80::5033:49ff:fe19:ff35/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3889 errors:0 dropped:0 overruns:0 frame:0 TX packets:102 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:195690 (191.1 KiB) TX bytes:7971 (7.7 KiB)
Ahora dejamos /etc/bind/named.conf.options similar a esto:
options { directory "/var/cache/bind"; auth-nxdomain no; listen-on-v6 { any; }; allow-query { any; }; dns64 2a00:1508:6001:efff::/96 { clients { any; }; }; };
Si os fijáis estamos usando un /96 del /64 asignado en nuestro equipo.
Ahora lo siguiente es instalar el NAT64, tayga y vtun
root@murzim-dnsnat64:~# apt-get install tayga vtun
Y configuramos tayga
root@murzim-dnsnat64:/etc# vi tayga.conf [...] tun-device nat64 ipv4-addr 192.168.255.1 prefix 2a00:1508:6001:efff::/96 dynamic-pool 192.168.255.0/24 [...]
Ahora vamos a crear un script llamado start64.sh con este contenido (por costumbre los dejo en /root/scripts/
#!/bin/bash tayga --mktun ip link set nat64 up ip addr add 192.168.255.1 dev nat64 ip addr add 2a00:1508:6001::1 dev nat64 ip route add 192.168.255.0/24 dev nat64 ip route add 2a00:1508:6001:efff::/96 dev nat64 echo 1 > /proc/sys/net/ipv4/conf/all/forwarding echo 1 > /proc/sys/net/ipv6/conf/all/forwarding iptables -t nat -A POSTROUTING -o eth138 -j MASQUERADE iptables -A FORWARD -i eth138 -o nat64 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i nat64 -o eth138 -j ACCEPT tayga /etc/init.d/bind9 start
Si nos fijamos la primera IPv6 que sale es la IP de nuestra máquina (la que será el resoledor de DNS de nuestra red) y la segunda es la IP que hemos definido en bind.
Y lo preparamos para que se ejecute al iniciar la maquina
root@murzim-dnsnat64:~/scripts# chmod +x start64.sh root@murzim-dnsnat64:~/scripts# vi /etc/rc.local /root/scripts/start64.sh
Reiniciamos la maquina y todo debería funcionar correctamente.
NOTA: Si estamos instalando el nat64/dns64 dentro de un contenedor openvz será preciso ejecutar esto:
CTID=101 vzctl set $CTID --devnodes net/tun:rw --save vzctl set $CTID --devices c:10:200:rw --save vzctl set $CTID --capability net_admin:on --save vzctl exec $CTID mkdir -p /dev/net vzctl exec $CTID mknod /dev/net/tun c 10 200 vzctl exec $CTID chmod 600 /dev/net/tun
Y modificamos el fichero /etc/vz/vz.conf y reemplazamos la línea
IPTABLES="ip_tables ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_LOG ipt_conntrack ipt_helper ipt_state iptable_nat ip_nat_ftp ip_nat_irc ipt_TOS"
Y añadimos el modulo ipt_MASQUERADE
# vi /etc/modules ipt_MASQUERADE
(el módulo este lo cargo a parte, ya que no lo tengo claro que iptables se coma este módulo directamente en el listado de arriba ya que añadiendo el módulo directamente con el siguiente comando no me lo aceptaba)
Ahora ejecutamos lo siguiente para cargar los módulos al arrancar el contenedor
vzctl set 100 --iptables "ip_tables ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_LOG ipt_conntrack ipt_helper ipt_state iptable_nat ip_nat_ftp ip_nat_irc ipt_TOS" --save
Ahora lo siguiente es poner en un ordenador que sólo tenga IPv6 la IP del servidor DNS64, en este caso 2a00:1508:6001::101.
Teóricamente, ahora ya podríamos salir a internet con ipv6 sólo y debería hacer la traslación, pero al tener IPv4 en el servidor remoto queda pendiente hacer la prueba!
De momento todo lo que puedo probar es esto:
root@centre:/etc/squid3# dig AAAA marsupi.org ; <> DiG 9.8.4-rpz2+rl005.12-P1 <> AAAA marsupi.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44417 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0 ;; QUESTION SECTION: ;marsupi.org. IN AAAA ;; ANSWER SECTION: marsupi.org. 5445 IN AAAA 2a00:1508:6001:ffff::4df6:b69c ;; AUTHORITY SECTION: marsupi.org. 84644 IN NS fermat.blogxpopuli.org. marsupi.org. 84644 IN NS cobalt.marsupi.org. ;; Query time: 7 msec ;; SERVER: 2a00:1508:6001::101#53(2a00:1508:6001::101) ;; WHEN: Mon Apr 14 04:28:34 2014 ;; MSG SIZE rcvd: 111
Pero parece que tengo algún problema de configuración en el router que hace de gateway ya que ping6 me suelta esto:
root@centre:/etc/squid3# ping6 2a00:1508:6001:ffff::4df6:b69c PING 2a00:1508:6001:ffff::4df6:b69c(2a00:1508:6001:ffff::4df6:b69c) 56 data bytes From 2a00:1508:6001:ff00::a15 icmp_seq=1 Time exceeded: Hop limit From 2a00:1508:6001:ff00::a15 icmp_seq=2 Time exceeded: Hop limit From 2a00:1508:6001:ff00::a15 icmp_seq=3 Time exceeded: Hop limit From 2a00:1508:6001:ff00::a15 icmp_seq=4 Time exceeded: Hop limit From 2a00:1508:6001:ff00::a15 icmp_seq=5 Time exceeded: Hop limit ^C --- 2a00:1508:6001:ffff::4df6:b69c ping statistics --- 5 packets transmitted, 0 received, +5 errors, 100% packet loss, time 4006ms
Fuente: ipvsix.me
Actualización: Para que el sistema funcione, la máquina dónde esté instalado el NAT64 tiene que ser el GW de la red que queremos que salga a internet a buscar las IPv4!!!
Para verificar que funciona:
root@nat64:~/scripts# ping6 2a00:1508:6000:efff::8.8.8.8 PING 2a00:1508:6000:efff::8.8.8.8(2a00:1508:6000:efff::808:808) 56 data bytes 64 bytes from 2a00:1508:6000:efff::808:808: icmp_seq=1 ttl=40 time=38.3 ms 64 bytes from 2a00:1508:6000:efff::808:808: icmp_seq=2 ttl=40 time=37.8 ms 64 bytes from 2a00:1508:6000:efff::808:808: icmp_seq=3 ttl=40 time=38.3 ms ^C --- 2a00:1508:6000:efff::8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 37.857/38.159/38.316/0.213 ms
RT @Blackhold_: Blog] NAT64/DNS64: Si quieres implantar una red sólo con IPv6 perfecto! pero nos vamos a encontrar con un pequeño.. http://…
hola amigo buenas tardes he estado viendo la configuracion que has realizado pero en la ip tables haces mencion de una interfaz fisica eth138. Lo cual solo he estado viendo que solo tienes una interfaz que es la eth123
That’s really thinking out of the box. Thanks!
http://packetpushers.net/nat64-setup-using-tayga/
No habia visitado tu blog por un tiempo, porque me pareció que era denso, pero los últimos articulos son de buena calidad, así que supongo que voy a añadirte a mi lista de blogs cotidiana. Te lo mereces amigo. :)
Saludos
primero de todo, amigA ;) muchas gracias :)