Guía del enrutador IPv6

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page IPv6 router guide and the translation is 79% complete.
Outdated translations are marked like this.


This guide provides details on setting up IPv6 routing on a Gentoo Linux system.

Cuestiones preliminares

Configuración básica del núcleo

Cualquiera de los núcleos 2.6 disponibles en Gentoo tiene soporte para conexiones IPv6. La nueva pila USAGI para IPv6 está integrada en el núcleo desde la versión Linux 2.6.0.

root #emerge --ask sys-kernel/gentoo-sources

Ahora estamos listos para entrar en el directorio de las fuentes del núcleo y comenzar con su configuración.

root #cd /usr/src/linux
root #make menuconfig
Nota
Aquí se asume que el enlace simbólico /usr/src/linux apunta a los fuentes que se usarán en esta guía.
KERNEL Opciones 'make menuconfig'
'"`UNIQ--pre-00000001-QINU`"'

Probar el soporte para IPv6

Después de activar las opciones recomendadas, recompilar el núcleo y reiniciar usando este nuevo núcleo con IPv6 activado.

Si todavía no se ha instalado iproute2 instalado, se recomienda seriamente hacerlo. El paquete iproute2 es una suite de configuración de red que contiene ip, el famoso sustituto de ifconfig, route, iptunnel y otros ...

root #emerge --ask sys-apps/iproute2
Advertencia
El uso de ifconfig puede ocasionar serios dolores de cabeza si se tienen múltiples dispositivos de túnel. Se necesita eliminar los túneles en orden inverso, lo que significa que el último que se creo debe ser el primero en ser eliminado.

Si IPv6 funciona, el dispositivo de bucle debería mostrar una dirección IPv6:

root #ip -6 addr show lo
1: lo: <LOOPBACK,UP> mtu 16436
  inet6 ::1/128 scope host
   valid_lft forever preferred_lft forever
  ## (Las líneas de arriba nos indican que todo va bien)

Antes de continuar, asegurarse de que se añade ipv6 a la lista de variables USE en make.conf, de tal modo que las futuras instalaciones de paquetes incluyan soporte para IPv6.

Configuración del túnel

Configuración básica

La mayoría de los proveedores de Internet todavía no ofrecen conexiones IPv6 de modo nativo. Para saltarse está limitación, existen varios "gestores de túneles" en todo el mundo que ofrecen gratuitamente túneles IPv6. Esto permite hacer un túnel para todas las conexiones IPv6 a través de una conexión IPv4.

Gestor Localización
Hurricane Electric Norteamérica, Europa, Asia
Freenet6 Estados Unidos
SixXS Europa (SixXS no acepta más altas desde abril del 2016, tampoco peticiones de tunelado o subred)
Singnet Singapur
Aarnet Australia/Sur del Pacífico

A continuación se muestran dos ejemplos de configuración de un túnel IPv6 con dos proveedores populares de Norteamérica: Hurricane Electric (también se aplica a túneles de sixxs.net sin protocolo heartbeat) y Freenet6.

Hurricane Electric

Hurricane Electric (HE de forma abreviada) ofrece túneles IPv6 gratuitos y ofrece un bloque /64 de direcciones para cada cliente. También permite configurar un DNS inverso. Para conseguir un túnel de HE ir a https://www.tunnelbroker.net/ y rellenar el formulario de una página.

Nota
El registro incluye una lista de datos personales como la dirección de si casa y el número de teléfono.

Una vez el túnel se haya aprobado, y se haya asignado un bloque /64, se puede configurar el sistema Gentoo. HE proporciona configuraciones de ejemplo basadas en las utilidades ifconfig e iproute. En los dos siguientes ejemplos se asume que se ha definido la siguiente configuración:

Dirección Local IPv4 (eth0) 68.36.91.195
Dirección IPv4 de HE 64.71.128.82
Dirección local del túnel IPv6 2001:470:1F00:FFFF::2
Dirección de túnel IPv6 remoto 2001:470:1F00:FFFF::1
Bloque IPv6 2001:470:1F00:296::/64

Para utilizar el paquete sys-apps/iproute2 y la orden ip, haríamos lo siguiente:

Crear un túnel entre la IPv4 local (eth0) y la dirección IPv4 remota de HE:

root #ip tunnel add he6 mode sit remote 64.71.128.82 local 68.36.91.195 ttl 64 dev eth0

Extraer la carga del túnel desde la MTU:

root #ip link set he6 mtu 1280

Activar el túnel:

root #ip link set he6 up

Asignarle la dirección IPv6:

root #ip addr add 2001:470:1F00:FFFF::2 dev he6

Enrutar todas las direcciones IPv6 globales de envío a un solo receptor (unicast) a través de nuestro dispositivo túnel 'he6':

root #ip route add 2000::/3 dev he6

El siguiente ejemplo muestra cómo establecer esto en el inicio del sistema:

CÓDIGO Ejemplo de netifrc
iptunnel_he6="mode sit remote 64.71.128.82 local 68.36.91.195 ttl 64 dev eth0"
depend_he6="net.eth0"
config_he6="2001:470:1F00:FFFF::2/64"
routes_he6="default via 2001:470:1F00:FFFF::1 dev he6"
mtu_he6="1280"

Para hacer que el dispositivo arranque en el inicio:

root #cd /etc/init.d
root #ln -s net.lo net.he6
root #rc-update add net.he6 default
Nota
Si no se tiene una directriz ACCEPT por defecto para iptables IPv4, entonces añadir:
root #iptables -A INPUT -i eth0 -p ipv6 -j ACCEPT

Cuando se tunela IPv6 sobre IPv4, los paquetes proceden primero desde la cadena IPv4 antes de que se pasen a la cadena IPv6.

Probar la conexión

Ahora que el túnel está configurado, puede probar la conexión. La forma más sencilla es utilizar la herramienta ping6 e intentando hacer ping a una máquina IPv6.

root #emerge --ask iputils
user $ping6 www.kame.net
PING www.kame.net(orange.kame.net) 56 data bytes
64 bytes from orange.kame.net: icmp_seq=1 ttl=52 time=290 ms
64 bytes from orange.kame.net: icmp_seq=2 ttl=52 time=277 ms
64 bytes from orange.kame.net: icmp_seq=3 ttl=52 time=280 ms
64 bytes from orange.kame.net: icmp_seq=4 ttl=52 time=279 ms
64 bytes from orange.kame.net: icmp_seq=5 ttl=52 time=277 ms

--- www.kame.net ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4038ms
rtt min/avg/max/mdev = 277.040/281.041/290.046/4.699 ms

Soporte IPv6 en aplicaciones

Hacer de nuevo emerge de los paquetes

A menos que ya se haya definido USE="ipv6" en /etc/portage/make.conf, probablemente sea necesario hacer de nuevo emerge de unos cuantos paquetes con soporte IPv6. Para obtener una lista de todos los paquetes instalados que están afectados por el cambio en las opciones USE, utilice la opción --newuse (-N) de Portage:

root #emerge -uDNav @world

Cuando se han modificado unos cuantos ajustes USE, la lista puede que sea bastante larga. Se recomienda mantener el sistema actualizado para que no sufra en caso de tener que reconstruir todos los paquetes afectados.

Nota
Algunos paquetes detectan (erróneamente) el soporte de IPv6 de forma automática y por eso no requieren la opción ipv6 en las variables USE. Por eso, no todos los paquetes que deberían tener soporte IPv6, lo tendrán si se compiló con IPv6 habilitado.

Paquetes específicos de IPv6

Hay algunos paquetes que tratan específicamente con elementos IPv6. La mayoría se encuentran en /usr/portage/net-misc .

Paquete Descripción
net-misc/ipv6calc Convierte una dirección IPv6 a un formato comprimido
net-misc/netcat6 Versión de netcat que soporta tanto IPv6 como IPv4
dev-perl/Socket6 La parte de socket.h de C relacionada con IPv6, definiciones y manipuladores de estructuras

Configuración DNS

IPv6 y DNS

Así como los DNS para IPv4 utilizan registros A, los DNS para IPv6 usan registros AAAA. (Esto se debe a que IPv4 tiene un espacio de direcciones de 2^32 mientras que en IPv6 es de 2^128). Para el DNS inverso, el estándar INT es obsoleto, pero es el más soportado. ARPA es el último estándar. El soporte para el formato ARPA se describe aquí.

Configuración de BIND

Las versiones recientes de BIND incluyen un soporte excelente de IPv6. Esta sección asume que tiene el conocimiento mínimo sobre la configuración y uso de BIND. Asumiremos que no está corriendo bind dentro de una jaula chroot. Si no es así, añadir el prefijo chroot a la mayoría de las rutas que se indican en la siguiente sección.

En primer lugar se deben añadir entradas tanto para la resolución directa como para la resolución inversa en /etc/bind/named.conf.

ARCHIVO /etc/bind/named.confEntradas en named.conf
## (Permitimos que bind escuche en direcciones IPv6.
## El uso de 'any' es la única forma de hacer esto antes de la versión bind-9.3)
options {
     [...]
     listen-on-v6 { any; }
     [...]
};
## (Esto proporcionará DNS directo para el dominio 'ipv6-rules.com':)
zone "ipv6-rules.com" IN {
     type master;
     file "pri/ipv6-rules.com";
};
## (El formato para DNS inverso está "orientado a bits". Se hace tomando el prefijo IPv6,
## invirtiendo el orden de los números y colocando un punto entre cada uno de ellos)
zone "6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa" {
     type master;
     file "pri/rev-ipv6-rules.com.arpa";
};

Ahora tenemos que crear esos archivos de zona y añadir entradas para todas nuestros equipos:

ARCHIVO /etc/bind/pri/ipv6-rules.com
$TTL    2h
@       IN      SOA     ipv6-rules.com. webmaster.ipv6-rules.com. (
                                2003052501 ; Número de Serie
                                28800      ; Refresco
                                14400      ; Reintentos
                                3600000    ; Expiración
                                86400 )    ; Mínimo
                NS      ns1.ipv6-rules.com

        IN      AAAA    2001:470:1f00:296::1 ; dirección para ipv6-rules.com
host1   IN      AAAA    2001:470:1f00:296::2 ; dirección para host1.ipv6-rules.com
host2   IN      AAAA    2001:470:1f00:296::3:3 ; dirección para host2.ipv6-rules.com
ARCHIVO /etc/bind/pri/rev-ipv6-rules.com.arpa
$TTL 3d ; TTL por defecto (bind 8 lo necesita, bind 9 lo ignora)
@       IN SOA ipv6-rules.com. webmaster.ipv6-rules.com. (
                        2003052501      ; Número de serie (AAAAMMdd)
                        24h             ; Intervalo de refresco
                        30m             ; Intervalo de reintento
                        2d              ; Tiempo de expiración
                        3d )            ; TTL por defecto
        IN NS   ns1.ipv6-rules.com.
; Entradas PTR IPv6
$ORIGIN 6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa.

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR ipv6-rules.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR host1.ipv6-rules.com.
3.0.0.0.3.0.0.0.0.0.0.0.0.0.0.0 IN PTR host2.ipv6-rules.com.

Configuración DJBDNS

Actualmente hay algunos parches de terceros para DJBDNS disponibles en http://www.fefe.de/dns/ que le permiten servir nombres en IPv6. Se puede instalar DJBDNS con estos parches haciendo emerge con ipv6 en la variable USE.

Advertencia
Todavía no todos los tipos de registro con estos parches tienen soporte. En particular, los registros NS y MX no están soportados.
root #emerge --ask djbdns

Una vez instalado djbdns, se puede configurar corriendo tinydns-setup y respondiendo a algunas preguntas sobre las direcciones IP en las que debe escuchar, donde instalar tinydns, etc.

root #tinydns-setup

Asumiendo que hemos instalado tinydns en /var/tinydns, editamos /var/tinydns/root/data. Este fichero contiene todos los datos necesarios para conseguir que tinydns gestione los DNS para la delegación IPv6.

CÓDIGO Ejemplo de fichero de datos
## (*.ipv6-rules.com manejado de forma autoritaria por 192.168.0.1)
.ipv6-rules.com:192.168.0.1:a:259200
## (DNS inverso autoritario para 2001:470:1f00:296::/64) .6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa:192.168.0.1:a
## (Especifica las IPs para host1 y host2)
6host1.ipv6-rules.com:200104701f0002960000000000000001:86400
6host2.ipv6-rules.com:200104701f0002960000000000000002:86400
## (Apunta www hacia host1)
3www.ipv6-rules.com:200104701f0002960000000000000002:86400

Se creará un registro AAAA y uno PTR para las líneas que comienzan por 6. Se creará solo un registro AAAA para aquéllas que comiencen por 3. Aparte de editar manualmente el fichero data, es posible usar los guiones add-host6 y add-alias6 para añadir nuevas entradas. Una realizado los cambios al fichero data, simplemente necesitará lanzar make desde /var/tinydns/root. Así se creará /var/tinydns/root/data.cfb, usado por tinydns como su fuente de información para las peticiones DNS.

Enrutador IPv6

Configurar el enrutamiento

Si queremos que nuestro sistema funcione como enrutador para otros clientes que quieran conectarse al mundo exterior con IPv6, se necesita continuar con la configuración. Necesitamos activar el reenvío de paquetes IPv6. Podemos hacerlo de dos maneras.

  • Bien definimos el valor 1 el el pseudofichero de reenvíos:
root #echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

Bien usamos la orden sysctl:

root #sysctl -w net.ipv6.conf.all.forwarding=1
Advertencia
El guión de inicio radvd, explicado en el próximo capítulo, habilita (y deshabilita) el reenvío, haciendo innecesario el siguiente paso.

Para activar el reenvío en el inicio, se necesita editar /etc/sysctl.conf para añadir la siguiente línea:

CÓDIGO Adición a sysctl.conf
## (No se necesita este ajuste cuandoo se va a utilizar radvd)
net.ipv6.conf.default.forwarding=1

Ahora el tráfico debería ser reenviado desde esta máquina a través del túnel establecido con nuestro gestor.

Para asignar direcciones IPv6 a los clientes, la especificación IPv6 permite tanto la asignación sin estado y con estado. La asignación sin estado usa un proceso llamado anuncio de enrutador (Router Advertisement) y permite a los clientes obtener una dirección IP y una ruta predeterminada simplemente habilitando el dispositivo de red. Se denomina "sin estado" porque no se guarda ningún registro del estado de las IPs asignadas ni de los equipos a las cuales se asignan. La asignación 'con estado' se gestiona mediante DHCPv6. Se llama "con estado" porque el servidor conserva el estado de los clientes que han solicitado direcciones IP y las que han obtenido.

Configuración sin mantenimiento del estado

La configuración sin estado se lleva a cabo fácilmente utilizando el demonio de anuncio de enrutador (Router Advertisement Daemon), o radvd.

root #emerge --ask radvd

Después de hacer emerge de radvd, necesitamos crear /etc/radvd/radvd.conf que contiene información acerca del bloque IP que se usará para asignar. Aquí tiene un ejemplo del fichero radvd.conf usando el prefijo que nos ha asignado nuestro gestor.

CÓDIGO Ejemplo de fichero radvd.conf
interface eth1
{
   ## (Envía mensajes de anuncio a otros equipos)
   AdvSendAdvert on;
   ## (La fragmentación es mala(tm))
   AdvLinkMTU 1280;
   MaxRtrAdvInterval 300;
   ## (El prefijo de subred IPv6 que nos ha  asignado nuestro PoP)
   prefix 2001:470:1F00:296::/64
   {
      AdvOnLink on;
      AdvAutonomous on;
   };
};
Advertencia
¡Asegúrese que la interfaz en la primera línea es la correcta para propagar los anuncios de enrutador hacia la intranet y no hacia el ISP!

Se puede obtener más información en man radvd.conf. Ahora podemos iniciar radvd y configurarlo para que se cargue al inicio.

root #/etc/init.d/radvd start
root #rc-update add radvd default

Configuración que mantiene el estado

Advertencia
Dibbler project is concluded.

Para tener una configuración que mantenga el estado, se debe instalar y configurar net-misc/dibbler.

root #emerge --ask dibbler

Ahora debemos configurar el cliente dibbler modificando el archivo /etc/dibbler/client.conf.

CÓDIGO Ejemplo de configuración del cliente dibbler
iface ppp0 {
     rapid-commit yes
     pd
     option dns-server
}

Ahora podemos arrancar el cliente dibbler y configurarlo para que se arranque en cada inicio.

root #/etc/init.d/dibbler-client start
root #rc-update add dibbler-client default

Clientes IPv6

Usar radvd

Los clientes detrás de este enrutador deberían poder conectarse al resto a través de la red vía IPv6. Si está usando radvd, la configuración de las equipos debería ser tan sencillo como activar el dispositivo de red. (Probablemente ya lo hayan hecho los guiones de inicio net.ethX).

root #ip link set eth0 up
root #ip addr show eth0
1: eth0: <BROADCAST,MULTICAST,UP> mtu 1400 qdisc pfifo_fast qlen 1000
    link/ether 00:01:03:2f:27:89 brd ff:ff:ff:ff:ff:ff
    inet6 2001:470:1f00:296:209:6bff:fe06:b7b4/128 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::209:6bff:fe06:b7b4/64 scope link
       valid_lft forever preferred_lft forever
    inet6 ff02::1/128 scope global
       valid_lft forever preferred_lft forever

Si esto no funciona, hay que asegurarse de que el cortafuegos IPv6 permite el paso de los paquetes:

root #ip6tables -A INPUT -p icmpv6 -j ACCEPT

Recursos externos

Hay muchos y excelente recursos en línea relacionados con IPv6.

En IRC, se puede probar en el canal #ipv6 (webchat) dentro de Freenode. Conectarse a los servidores de Freenode mediante un cliente IPv6 a través de irc.ipv6.freenode.net.


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Peter Johanson, Jorge Paulo, Camille Huot, Pasi Valminen, , Markos Chandras (Hwoarang)
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.