suburbia



 
Conecta tu red a Internet con IPv6 y protegela con el firewall ip6tables
w0w0
Domingo 23 enero 2005
Conectarse a Internet con IPv6 no es nada difícil hoy en dia. Existen numerosos servicios en Internet que te ofrecen conectividad mediante los llamados Tunnel Brokers, aunque lo ideal sería que nuestro ISP nos ofreciera acceso de forma nativa. Si solo quieres conectar un host y no tienes ganas de complicarte la vida, quizá la mejor opción sea usar el servicio de Freenet6 pero si quieres conectivad para toda tu red y tener la posibilidad de configurar la resolución inversa DNS, sigue leyendo, aquí apunto algunas notas que te pueden ayudar.

Yo he optado por solicitar una red con un prefijo /64 en BT Exact, lo que me da la posibilidad de tener 2^64 = 18446744073709551616 direcciones :), y me han asignado la red 2001:618:400:87ec::/64 así que en mi servidor Debian, que también es el gateway de mi red, lo configuro editando el archivo /etc/network/interfaces y añadiendo:


iface eth1 inet6 static
  address 2001:618:400:87ec::1
  netmask 64

auto sixbone
iface sixbone inet6 v4tunnel
address 2001:618:400::501c:a2fc
netmask 128
endpoint 213.121.24.85
up ip route add ::/0 dev sixbone

eth1 es la interfaz que me conecta con Internet y sixbone es la interfaz que usamos para crear el túnel contra nuestro Tunnel Broker. Alguna configuración interesante para el kernel, via /etc/sysctl.conf:


net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.router_solicitations = 0

La configuración de los clientes de la red es muy sencilla, en mi caso basta con añadir a /etc/network/interfaces:


iface eth0 inet6 static
  address 2001:618:400:87ec::2
  netmask 64
  up ip -6 route add default via 2001:618:400:87ec::1 dev eth0

Ahora viene lo bueno, la configuración DNS. Para añadir nuevas entradas a tu zona, en vez de usar registros A usaremos registros AAAA, por ejemplo:


$ORIGIN ipv6.sysnetworks.net.
velouria   IN   AAAA   2001:618:400:87ec::1
bonemachine   IN   AAAA   2001:618:400:87ec::2

Comprobamos que resuelve bien haciendo una consulta a registros AAAA:


velouria:~# host -t aaaa velouria.ipv6.sysnetworks.net
velouria.ipv6.sysnetworks.net has AAAA address 2001:618:400:87ec::1

Solo nos queda configurar la resolución inversa, previa solicitud de delegación a nuestro Tunnel Broker, mediante la configuración de las zonas ip6.arpa, y por compatibilidad con servidor DNS antiguos la zona ip6.int. En el fichero named.conf de nuestro servidor DNS añadiriamos algo como:


zone "c.e.7.8.0.0.4.0.8.1.6.0.1.0.0.2.ip6.int" {
  type master;
  file "/etc/bind/reverse-2001-618-400-87ec_64.IP6.INT";
}
       

zone "c.e.7.8.0.0.4.0.8.1.6.0.1.0.0.2.ip6.arpa" { type master; file "/etc/bind/reverse-2001-618-400-87ec_64.IP6.ARPA"; }

Aquí tienes la configuración de mis zonas, por si te sirve de ayuda:

- reverse-2001-618-400-87ec_64.IP6.INT


; 2001:618:400:87ec::/64
;
$TTL 3d        ; Default TTL (bind 8 needs this, bind 9 ignores it)
@        IN SOA c.e.7.8.0.0.4.0.8.1.6.0.1.0.0.2.ip6.int.
root.sysnetworks.net. (
                2004082005        ; Serial number (YYYYMMdd)
                24h                ; Refresh time
                30m                ; Retry time
                2d                ; Expire time
                3d                ; Default TTL (bind 8 ignores this, bind 9 needs it)

)

                               ; Name server entries
                               IN     NS     velouria.sysnetworks.net.
                                                                IN        NS        ns.sysnetworks.net.

$ORIGIN c.e.7.8.0.0.4.0.8.1.6.0.1.0.0.2.ip6.int.

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     velouria.ipv6.sysnetworks.net.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     bonemachine.ipv6.sysnetworks.net.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     isa.ipv6.sysnetworks.net.

- reverse-2001-618-400-87ec_64.IP6.ARPA


; 2001:618:400:87ec::/64
;
$TTL 3d        ; Default TTL (bind 8 needs this, bind 9 ignores it)
@        IN SOA c.e.7.8.0.0.4.0.8.1.6.0.1.0.0.2.ip6.arpa. root.sysnetworks.net. (
                2004082005        ; Serial number (YYYYMMdd)
                24h                ; Refresh time
                30m                ; Retry time
                2d                ; Expire time
                3d                ; Default TTL (bind 8 ignores this, bind 9 needs it)
)

                               ; Name server entries
                               IN     NS     velouria.sysnetworks.net.
                                                                IN        NS        ns.sysnetworks.net.

$ORIGIN c.e.7.8.0.0.4.0.8.1.6.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     velouria.ipv6.sysnetworks.net.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     bonemachine.ipv6.sysnetworks.net.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     isa.ipv6.sysnetworks.net.

Para comprobar el buen funcionamiento, volvemos a hacer una consulta para obtener el nombre de dominio a partir de la dirección IP:


velouria:~# host 2001:618:400:87ec::1
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.e.7.8.0.0.4.0.8.1.6.0.1.0.0.2.ip6.arpa
domain name pointer velouria.ipv6.sysnetworks.net.

Firewall IPv6 con ip6tables

Si ya tienes conexión IPv6 a Internet quizá te interese saber que montarse un firewall en GNU/Linux con ip6tables es muy similar a hacerlo para IPv4, aquí os dejo el mio:


#!/bin/sh
# Firewall IPv6 para velouria.ipv6.sysnetworks.net

# Variables
fw6="/sbin/ip6tables"
anywhere="::/0"
localhost="::1"
my_net="2001:618:400:87ec::/64"

# Limpiar todas las reglas
$fw6 -F
$fw6 -X

# Política por defecto
$fw6 -P OUTPUT ACCEPT
$fw6 -P INPUT DROP
$fw6 -P FORWARD DROP

# Aceptar conexiones de localhost y
# de nuestra red
$fw6 -A INPUT -s $localhost -j ACCEPT
$fw6 -A INPUT -s $my_net -j ACCEPT

# Permitimos salir a nuestra red
# El NAT es cosa del pasado :)
$fw6 -A FORWARD -s $my_net -d $anywhere -j ACCEPT

# Aceptar ICMPv6
$fw6 -A FORWARD -p ipv6-icmp -j ACCEPT
$fw6 -A INPUT -p ipv6-icmp -j ACCEPT

# Connection tracking básico. Revisar...
$fw6 -A FORWARD -p tcp ! --syn -j ACCEPT
$fw6 -A INPUT -p tcp ! --syn -j ACCEPT

# Aquí los servicios que vaya abriendo
# al exterior

No tiene mucho misterio, aunque hay un tema que no he encontrado en el manual y es ¿cómo permitir atravesar el firewall a conexiones previamente establecidas?. Esto con IPv4 lo haciamos con:


-m state --state RELATED,ESTABLISHED

Con ip6tables no he visto nada similar así que puse una chapucilla pero creo que hace lo que quiero:


-p tcp ! --syn -j ACCEPT

Osea, solo dejar pasar conexiones que no tengan el bit SYN activado.

Referencias en la red:
- The Linux Network Administrator’s Guide
- Linux IPv6 HOWTO
- DNS HOWTO
- Documentación de Debian GNU/Linux
- IPV6
- IP6tables


Por w0w0

Este texto está bajo la licencia Creative Commons Atribución-CompartirIgual 2.1. Usted es libre:

- de copiar, distribuir, exhibir y comunicar la obra

- de crear obras derivadas

Bajo las siguientes condiciones: Reconocimiento. Vd. debe reconocer y dar crédito al autor original.CompartirIgual. Si usted altera, transforma, o trabaja sobre esta obra, usted puede divulgar la obra resultante solamente bajo los términos de una licencia idéntica a ésta.

- Para cualquier utilización o distribución, usted debe informar claramente a terceros sobre los términos de la licencia de esta obra.

- Cualquiera de estas condiciones pueden ser modificada si usted consigue el permiso del autor. Su derecho a un uso justo y legítimo de la obra, así como otros derechos no se ven de manera alguna afectada por lo anterior.

Éste es un resumen del código legal que puede encontrarse en: www.creativecommons.orglicenses/by-sa/2.1/es/

 
sinDominio  Creative Commons

Esta publicación esta bajo licencia creative commons, ello no evita la publicación de otros materiales en otro tipo de licencias libres. Por tanto, se permite difundir, citar y copiar literalmente sus materiales, de forma íntegra o parcial, por cualquier medio y para cualquier propósito, siempre que se mantenga esta nota y se cite procedencia. Suburbia no asume ninguna responsabilidad por los articulos que envian los participantes en este sitio. Toda la responsabilidad para verificar la veracidad y los derechos de reproducción de un envío corresponden al autor/a que lo publica. Al publicar material en este sitio, el o la autora del envío asume que puede ser redistribuido libremente.

suburbia@sindominio.net