Guía del enrutador IPv6 en Gentoo
1.
Configuración del núcleo
Configuración básica del núcleo
Cualquiera de los núcleos 2.6 disponibles en Gentoo soportará
conexiones IPv6 fácilmente. La nueva pila USAGI para IPv6 está
integrada en el núcleo desde la versión 2.6.0.
Listado de Código 1.1: Emergiendo un núcleo |
# emerge gentoo-sources
|
Ahora estamos listos para entrar en el directorio de las fuentes
del núcleo y comenzar con su configuración.
Listado de Código 1.2: Configurando el núcleo de Linux |
# cd /usr/src/linux
# make menuconfig
|
Nota:
Esta guía asume que el enlace /usr/src/linux apunta a las
fuentes que estará usando.
|
Listado de Código 1.3: Opciones de 'make menuconfig' |
Device Drivers --->
Networking support --->
Networking options --->
<*> The IPv6 protocol (EXPERIMENTAL)
[*] Network device support
<*> Universal TUN/TAP device driver support
|
Probando el soporte IPv6
Después de activar las opciones recomendadas, recompile su núcleo y
reinicie usando su nuevo núcleo con IPv6 activado.
Si todavía no tiene iproute2 instalado, le animamos a hacerlo
ahora. iproute2 es una suite de configuración de red que contiene
ip, el famoso sustituto para ifconfig, route,
iptunnel y otros ...
Listado de Código 1.4: Instalando iproute2 |
# emerge sys-apps/iproute2
|
Aviso:
El uso de ifconfig puede ocasionar serios dolores de cabeza si tiene
múltiples dispositivos de tunel. Tiene que eliminar los túneles en
orden inverso, quiere decir que el creado en último lugar debe ser
eliminado primero ¡Queda avisado!
|
Si IPv6 está funcionando, el dispositivo de loopback debería mostrar
una dirección IPv6:
Listado de Código 1.5: Comprobando el dispositivo de loopback |
# ip -6 addr show lo
1: lo: <LOOPBACK,UP> mtu 16436
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
|
Antes de proseguir, asegúrese de añadir ipv6 a su lista de
variables USE en make.conf, de tal modo que en futuras
instalaciones de paquetes se incluirá soporte para IPv6.
2.
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 proveedores de túneles en todo el mundo que ofrecen
gratuitamente túneles IPv6. Esto le permite hacer un túnel para todas
las conexiones IPv6 a través de una conexión IPv4.
A continuación hay dos ejemplos de configuración de un túnel IPv6 con
dos populares proveedores de norteamérica: Hurricane Electric (también se
aplica a túneles de sixxs.net sin mecánismo heartbeat) y Freenet6.
Hurricane Electric
Hurricane Electric (HE de forma abreviada) ofrece túneles IPv6
gratuitos y le asigna un bloque /64 de direcciones. También permite
configurar un DNS inverso. Conseguir un túnel de HE es tan sencillo
como ir a http://www.tunnelbroker.net y rellenar un
formulario.
Nota:
El registro incluye una lista de datos personales como su dirección y
número de teléfono.
|
Aviso:
Los túneles de HE tardan 24 horas en activarse para evitar abusos.
|
Una vez activado el túnel y asignado un bloque /64, puede configurar
su sistema Gentoo. HE proporciona configuraciones de ejemplo basadas
en las utilidades ifconfig e iproute. Los dos siguientes ejemplos
asumen que tiene la siguiente configuración:
| Dirección IPv4 Local |
68.36.91.195 |
| Dirección IPv4 de HE |
64.71.128.82 |
| Dirección local del túnel IPv6 |
2001:470:1F00:FFFF::189 |
| Bloque IPv6k |
2001:470:1F00:296::/64 |
Utilizando el paquete iproute2 y el comando ip, usted haría lo
siguiente:
Listado de Código 2.1: Configuración de un túnel IPv6 |
# ip tunnel add sixbone mode sit remote 64.71.128.82 local 68.36.91.195 ttl 64 dev eth0
# ip link set sixbone mtu 1280
# ip link set sixbone up
# ip addr add 2001:470:1F00:FFFF::189 dev sixbone
# ip route add 2000::/3 dev sixbone
|
Freenet6
Freenet6 es otro proveedor de
túneles gratuito. El registro optativo solo requiere un nombre de usuario y una
dirección de correo electrónico válida. En Freenet6 han escogido
utilizar una estructura de cliente/servidor para administrar el túnel
y han creado el cliente freenet6. El cliente está disponible en
Portage. Para instalarlo haga:
Listado de Código 2.2: Instalando el cliente de Freenet6 |
# emerge freenet6
|
Si elige conectar con autenticación, configure freenet6 editando
/etc/freenet6/gw6c.conf. Sólamente debería tener que
cambiar los campos userid y passwd colocando los
asignados por Freenet6, además de cambiar la puerta de enlace. A continuación
tiene una configuración de ejemplo.
Listado de Código 2.3: gw6c.conf de ejemplo |
auth_method=any
userid=anonymous
passwd=foobar
template=linux
server=broker.freenet6.net
|
Probando la conexión
Ahora que el túnel está configurado, puede probar su conexión. La
forma más sencilla es usando la herramienta ping6 e intentando
hacer ping a un nombre de máquina IPv6.
Listado de Código 2.4: Probando la conexión |
# emerge iputils
# 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
|
Actualmente se está trabajando para añadir mejor soporte IPv6 a los
guiones de inicio de red. Si desea conocer su estado y/o ofrecer
ayuda, escriba a latexer@gentoo.org.
3.
Soporte IPv6 en aplicaciones
Re-emergiendo paquetes
A menos que ya tenga USE="ipv6" en /etc/make.conf,
probablemente necesitará re-emerger unos cuantos paquetes con soporte
IPv6. Para obtener una lista de todos los paquetes instalados
afectados por el cambio del parámetro USE, use la opción
--newuse (-N) de Portage:
Listado de Código 3.1: Candidatos para ser re-emergidos |
# emerge -uDNav world
|
Si ha cambiado muchos parámetros USE, la lista puede que sea bastante
grande. Se recomienda mantener el sistema actualizado para que no
sufra en caso de tener que recompilar todos los paquetes afectados.
Nota:
Algunos paquetes detectan soporte IPv6 "automágicamente" y por eso no
requieren la opción ipv6 en las variables USE. Por eso no todos los
paquetes que deberían soportar IPv6, lo soportarán si no lo
compilaste con IPv6 habilitado.
|
Paquetes específicos de IPv6
Hay algunos paquetes que tratan 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 las definiciones de socket.h de C y los
manipuladores de estructuras relacionados con IPv6
|
4.
Configuración de DNS
IPv6 y DNS
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 el más soportado. ARPA es el último
formato, pero no está tan difundido como INT. Ahora describiremos el
soporte para el formato INT.
Configuración de BIND
Las versiones recientes de BIND incluyen un soporte IPv6
excelente. Esta sección asumirá que tiene un conocimiento mínimo de
configuración y uso de BIND. Asumiremos que no está corriendo BIND en
un entorno enjaulado (chroot). Si, por el contrario, lo está haciendo,
simplemente añada el prefijo de la jaula a la mayoría de las rutas en
la siguiente sección.
Lo primero que necesita es añadir entradas tanto para la resolución
directa como para la resolución inversa en
/etc/bind/named.conf.
Listado de Código 4.1: Entradas en named.conf |
options {
[...]
listen-on-v6 { any; }
[...]
};
zone "ipv6-rules.com" IN {
type master;
file "pri/ipv6-rules.com";
};
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 crearemos los archivos de zona y añadiremos entradas para todas
nuestros nombres de máquina:
Listado de Código 4.2: pri/ipv6-rules.com |
$TTL 2h
@ IN SOA ipv6-rules.com. webmaster.ipv6-rules.com. (
2003052501 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
NS ns1.ipv6-rules.com
IN AAAA 2001:470:1f00:296::1 ; address for ipv6-rules.com
host1 IN AAAA 2001:470:1f00:296::2 ; address for host1.ipv6-rules.com
host2 IN AAAA 2001:470:1f00:296::3:3 ; address for host2.ipv6-rules.com
|
Listado de Código 4.3: pri/rev-ipv6-rules.com.arpa |
$TTL 3d ; Default TTL (bind 8 needs this, bind 9 ignores it)
@ IN SOA ipv6-rules.com. webmaster.ipv6-rules.com. (
2003052501 ; Serial number (YYYYMMdd)
24h ; Refresh time
30m ; Retry time
2d ; Expire time
3d ) ; Default TTL
IN NS ns1.ipv6-rules.com.
; IPv6 PTR entries
$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 de DJBDNS
Actualmente hay algunos parches para DJBDNS hechos por terceros
disponibles en http://www.fefe.de/dns/ que le
permiten funcionar con IPv6. DJBDNS puede instalarse con estos parches
emergiéndolo con ipv6 en el USE.
Aviso:
Todavía no están soportados todos los tipos de registro con estos
parches. En particular, los registros MX y NS no están soportados.
|
Listado de Código 4.4: Instalando djbdns |
# emerge djbdns
|
Una vez instalado djbdns, puede configurarse con tinydns-setup,
respondiendo unas cuantas preguntas sobre las direcciones IP en las
que debe escuchar, donde instalar tinydns, etc.
Listado de Código 4.5: Configurando tinydns |
# tinydns-setup
|
Asumiendo que hemos instalado tinydns en
/var/tinydns, editaremos
/var/tinydns/root/data. Este archivo contendrá todos los
datos necesarios para conseguir que tinydns maneje los DNS para su
delegación IPv6.
Listado de Código 4.6: Archivo data de ejemplo |
.ipv6-rules.com:192.168.0.1:a:259200
.6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa:192.168.0.1:a
6host1.ipv6-rules.com:200104701f0002960000000000000001:86400
6host2.ipv6-rules.com:200104701f0002960000000000000002:86400
3www.ipv6-rules.com:200104701f0002960000000000000002:86400
|
Las líneas que comienzan con 6 tendrán creado tanto un registro
AAAA como un registro PTR. Aquellas que comiencen con 3
solamente tendrán un registro AAAA. Además de editar manualmente el
archivo data, puede usar los guiones add-host6 y
add-alias6 para añadir nuevas entradas. Una vez hecho los
cambios al archivo data, simplemente ejecute make
desde /var/tinydns/root. Así se creará
/var/tinydns/root/data.cfb, el cual usa tinydns como
fuente de información para las peticiones DNS.
5.
Enrutador IPv6
Configurar el enrutado
Si queremos que nuestro sistema funcione como enrutador para otros
clientes que deseen conectarse al mundo exterior con IPv6, se necesita
algo más de configuración. Necesitamos activar el reenvío de paquetes
IPv6. Podemos hacerlo de dos maneras.
Listado de Código 5.1: Activando el reenvío |
# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
o
# sysctl -w net.ipv6.conf.all.forwarding=1
|
Aviso:
El guión de inicio radvd, explicado en el próximo capítulo, activa (y
desactiva) el reenvío haciendo innecesario el siguiente paso.
|
Para activar el reenvío en el inicio, necesitará editar
/etc/sysctl.conf y modificar la siguiente línea:
Listado de Código 5.2: Fragmento a añadir en sysctl.conf |
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 proveedor.
Para asignar direcciones IPv6 a los clientes, las especificación IPv6
permiten tanto la asignación con estado, como sin estado. La
asignación sin estado usa un proceso llamado anuncio de enrutador (en
inglés: Router Advertisement y permite a los clientes obtener una
dirección IP y una ruta predeterminada simplemente activando el
dispositivo de red. Se denomina 'sin estado' porque no se guarda
ningún registro del estado de las IPs asignadas y las máquinas a las
cuales se les ha asignado. La asignación 'con estado' se maneja
mediante DHCPv6. Se llama así porque el servidor mantiene un registro
con el estado de los clientes que han solicitado una IP y las que lo
han obtenido.
Configuración sin estado
La configuración sin estado se lleva a cabo sencillamente con el
demonio de anuncio de enrutador, o radvd.
Listado de Código 5.3: Configurando radvd |
# emerge radvd
|
Después de emerger radvd, necesitamos crear
/etc/radvd/radvd.conf que contiene información acerca del
bloque de IP del que se asignarán las IPs. Aquí tiene un ejemplo del
archivo radvd.conf usando el prefijo asignado por nuestro
proveedor.
Listado de Código 5.4: Ejemplo de radvd.conf |
interface eth1
{
AdvSendAdvert on;
AdvLinkMTU 1280;
MaxRtrAdvInterval 300;
prefix 2001:470:1F00:296::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
|
Aviso:
Asegúrese que la interfaz en la primera línea es la correcta para
propagar los anuncios de enrutador hacia su intranet y ¡no hacia su
ISP!
|
En man radvd.conf está disponible información más detallada.
Ahora podemos iniciar radvd y configurarlo para que se cargue al
inicio.
Listado de Código 5.5: Iniciando radvd |
# /etc/init.d/radvd start
# rc-update add radvd default
|
Configuración con estado
Si desea usar configuración con estado, necesitará instalar y
configurar dhcpv6.
Listado de Código 5.6: Instalando dhcpv6 |
# emerge dhcpv6
|
Ahora debemos configurar el servidor DHCPv6 editando
/etc/dhcp6s.conf.
Listado de Código 5.7: Ejemplo de dhcp6s.conf |
prefer-life-time 10000;
valid-life-time 20000;
renew-time 5000;
rebind-time 8000;
interface eth1 {
link AAA {
allow unicast;
send unicast;
allow rapid-commit;
send server-preference 5;
renew-time 1000;
rebind-time 2400;
prefer-life-time 2000;
valid-life-time 3000;
pool{
range 2001:470:1f00:296::10 to 2001:470:1f00:296::110/64;
prefix 2001:470:1f00:296::/64;
};
};
};
|
Ahora podemos arrancar dhcp6s y configurarlo para que se cargue al
inicio.
Listado de Código 5.8: Iniciando dhcp6s |
# /etc/init.d/dhcp6s start
# rc-update add dhcp6s default
|
6.
Clientes IPv6
Usando radvd
Ahora los clientes detrás de este enrutador deben ser capaces de
acceder a la red vía IPv6. Si está usando radvd, configurar las
máquinas debería ser tan sencillo como activar el dispositivo de red.
(Probablemente ya lo hayan hecho sus guiones de inicio net.ethX).
Listado de Código 6.1: Conectando a través de IPv6 |
# ip link set eth0 up
# 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
|
Usando DHCPv6
Si el enrutador está configurado para usar DHCPv6, los clientes
también necesitarán instalar el paquete dhcpv6. Hecho esto, configure
los clientes editando /etc/dhcp6c.conf.
Listado de Código 6.2: Ejemplo de dhcp6c.conf |
interface eth0 {
send rapid-commit;
request domain-name-servers;
iaid 11111;
renew-time 11000;
};
|
7.
Usando conversión de 6 a 4
Principios básicos
La conversión de 6 a 4 se puede usar si tiene máquinas que necesitan
comunicarse con otras máquinas con direcciones IPv4 sobre una conexión
IPv6 pura. Puede tener una red interna funcionando enteramente con
IPv6, con una máquina tratando las conexión hacia el mundo exterior
IPv4/IPv6.
Configuración DNS
Para hacer funcionar la conversión de 6 a 4 necesita configurar un
proxy DNS, totd, que enviará registros AAAA para los sitios que
solo tienen un registro A. Estos registros AAAA apuntarán a
direcciones IPv6 que realmente no existen, pero serán enrutadas a
través del proxy 6 a 4.
totd todavía está enmascarado en ~x86, pendiente de más
pruebas y tendrá que desenmascararlo añadiendo la siguiente línea en su
fichero /etc/portage/package.keywords (vea "man portage"
para mayor información acerca de este fichero).
Listado de Código 7.1: totd permanentemente desenmascarado es package.keywords |
net-misc/totd ~x86
|
Después simplemente ejecute emerge:
Listado de Código 7.2: Instalando totd |
# emerge totd
|
Ahora, necesitamos configurar /etc/totd.conf con alguna
información básica de configuración.
Listado de Código 7.3: Ejemplo de /etc/totd.conf |
forwarder 192.168.0.2 port 53
prefix 3ffe:abcd:1234:9876::
port 5005
pidfile /var/run/totd.pid
stf
|
Nota:
totd debe configurarse para usar un puerto diferente al 53 si
otro servidor de nombres está corriendo en la misma máquina.
|
Proxy 6 a 4
ptrtd se usará como proxy 6 a 4, permitiendo las conexiones
entre máquinas IPv6 de la red interna y máquinas IPv4 externas.
Listado de Código 7.4: Instalando ptrtd |
# emerge ptrtd
|
Ahora necesitamos configurar ptrtd, especificándole el falso
prefijo (el que le especificamos a totd que use) para crear las
conexiones del proxy. Edite /etc/conf.d/ptrtd y
configure IPV6_PREFIX. Recuerde que debe ser el mismo prefijo
con el cual se configuró totd.
Listado de Código 7.5: Ejemplo de /etc/ptrtd.conf |
IPV6_PREFIX="3ffe:abcd:1234:9876::"
|
Ahora puede iniciar totd y configúrelo para que se cargue al arrancar.
Listado de Código 7.6: Starting totd |
# /etc/init.d/totd start
# rc-update add totd default
|
Configuración de los clientes y pruebas
Ahora los clientes deberían estar configurados para conectarse tanto a
máquinas IPv4 como IPv6, a través de una conexión basada solamente en
IPv6. Asumiendo que los clientes ya han recibido una dirección IPv6 de
radvd, simplemente necesitamos añadir una nueva entrada para la
resolución de DNS y añadir una ruta predeterminada para esas
"direcciones falsas". En primer lugar, añada una entrada al principio
de su /etc/resolv.conf apuntando a la máquina corriendo
totd.
Listado de Código 7.7: Ejemplo de /etc/resolv.conf |
nameserver 2001:470:1f00:296::1
|
Para probar la resolución de nombres, solicite un registro AAAA para
un sitio IPv4 conocido.
Listado de Código 7.8: Probando la resolución de nombres |
# dig aaaa google.com
;; ANSWER SECTION:
google.com. 300 IN AAAA 3ffe:abcd:1234:9876::d8ef:3364
google.com. 300 IN AAAA 3ffe:abcd:1234:9876::d8ef:3564
|
Ahora añadiremos una ruta predeterminada para todas las direcciones
que comiencen con nuestro falso prefijo.
Listado de Código 7.9: Añadiendo la ruta predeterminada |
# ip route add 3ffe:abcd:1234:9876::/64 via 2001:470:1f00:296::1 dev eth0
|
Finalmente, use ping6 para hacer ping a google.com a su falsa
dirección IPv6.
Listado de Código 7.10: Probando 6 a 4 |
# ping6 -c 2 google.com
PING 3ffe:abcd:1234:9876::d8ef:3364(3ffe:abcd:1234:9876::d8ef:3364) 56 data bytes
64 bytes from 3ffe:abcd:1234:9876::d8ef:3364: icmp_seq=1 ttl=54 time=0.106 ms
64 bytes from 3ffe:abcd:1234:9876::d8ef:3364: icmp_seq=2 ttl=54 time=0.090 ms
--- 3ffe:abcd:1234:9876::d8ef:3364 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.090/0.098/0.106/0.008 ms
|
Nota:
El enrutador corriendo ptrtd está respondiendo, lo cual muestra
que todo está funcionando.
|
8.
Otros recursos
En la red hay gran cantidad de recursos muy buenos relacionados
con IPv6.
En el IRC, puede probar #ipv6 en Freenode. Puede conectarse a los
servidores de Freenode mediante IPv6 usando
irc.ipv6.freenode.net.
El contenido de este documento está registrado bajo los términos de
la licencia
Creative Commons - Reconocimiento / Compartir Igual
|