Guía del enrutador IPv6
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
Aquí se asume que el enlace simbólico /usr/src/linux apunta a los fuentes que se usarán en esta guía.
'"`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
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.
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:
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
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.
## (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:
$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
$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.
## (*.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:
## (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.
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.
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.
- www.ipv6.org - Información general sobre IPv6
- www.linux-ipv6.org/ - Proyecto USAGI
- www.deepspace6.net - Sitio Linux/IPv6
- www.kame.net - Implementación *BSD
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.