ViewRevisions

IPv6 fàcil amb 6to4

user warning: UPDATE command denied to user 'ivan'@'localhost' for table `ivan_lg`.`cache_filter` query: UPDATE cache_filter SET data = '[...] seguís mi blog habréis visto que estos días también he estado liado haciendo pruebas con IPv6. Contrastando la experiencia con lo que narra el libro, me sorprende cómo el bricolaje digital se [...]', created = 1686299824, expire = 1686386224, headers = '', serialized = 0 WHERE cid = '5:6729fd3befbc6ce7721fa4bbfe1c24d3' in /home/ivan/vc/git/elvil-drupal/drupal/includes/cache.inc on line 112.

Sabeu? Em sembla que un dels obstacles que impedeixen el desenvolupament d’Internet com a una autèntica xarxa distribuïda són les traves que posen els proveïdors d’accés a oferir adreces IP públiques estàtiques als seus clients domèstics, que han d’apanyar‐se amb adreces dinàmiques, xarxes privades i NAT. Una llàstima, perquè fer les màquines de tothom accessibles via Internet permetria a qualsevol oferir els seus propis serveis, empoderant els individus i anivellant la seua posició front als grans proveïdors de continguts, com ocorre en xarxes lliures i neutrals com guifi.net. I és que, a diferència dels mitjans de masses, Internet no fa distinció entre emissors i receptors.

L’escassesa d’adreces IPv4 és un (molt debatible) motiu argüit pels proveïdors per a mantenir l’actual statu quo. IPv6, en canvi, ofereix una autèntica abundància d’adreces per a tothom i, pel que puga semblar, ja és possible usar‐lo siga quina siga la nostra forma d’accés a Internet. A banda, és divertit això de connectar‐se a la Internet del futur, així que ja és hora de fer el salt!

Per a començar a poc a poc, aquest article descriu com dotar de connexió IPv6 estable a una màquina Debian amb adreça IPv4 fixa, fent servir 6to4, sense haver de subscriure’s a un servidor de túnels i amb una configuració realment mínima.

Configuració de 6to4

En primer lloc, ens hem d’assegurar de que tenim accés a un encaminador 6to4 mitjançant l’adreça anycast 192.88.99.1:

$ ping -c 4 192.88.99.1
PING 192.88.99.1 (192.88.99.1) 56(84) bytes of data.
64 bytes from 192.88.99.1: icmp_seq=1 ttl=249 time=2.00 ms
64 bytes from 192.88.99.1: icmp_seq=2 ttl=249 time=2.09 ms
64 bytes from 192.88.99.1: icmp_seq=3 ttl=249 time=1.85 ms
64 bytes from 192.88.99.1: icmp_seq=4 ttl=249 time=2.04 ms

--- 192.88.99.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 1.854/1.996/2.091/0.099 ms

També podem executar mtr 192.88.99.1 per a comprovar si l’encaminador para molt lluny. Per descomptat, quan més a prop siga, millor.

Per a crear una configuració 6to4 per a l’adreça pública IPv4 de la màquina, el més senzill és emprar el generador de configuració IPv6 amb 6to4 per a Debian. Per exemple, per a l’adreça IPv4 1.2.3.4 obtindríem aquest fragment:

# IPv6 using a 6to4 tunnel to the internet (from 1.2.3.4)
# Generated at http://debian6to4.gielen.name/
auto tun6to4
iface tun6to4 inet6 v4tunnel
        pre-up modprobe ipv6
        address 2002:0102:0304::1
        netmask 16
        gateway ::192.88.99.1
        endpoint any
        local 1.2.3.4

# If you have an IPv6-capable firewall (and you really should have one),
# it can be enabled by using an "up" rule, such as the example below.
#       up /usr/local/sbin/ipv6firewall.sh tun6to4

Simplement incloem el fragment anterior a /etc/network/interfaces i activem la interfície amb:

# ifup tun6to4

Podem provar la nova adreça IPv6 fent un ping a alguna màquina de la xarxa IPv6, per exemple:

# ping6 -I tun6to4 -c 4 www.whatismyv6.com
PING www.whatismyv6.com(www.whatismyv6.com) from 2002:102:304::1 tun6to4: 56 data bytes
64 bytes from www.whatismyv6.com: icmp_seq=1 ttl=59 time=9.10 ms
64 bytes from www.whatismyv6.com: icmp_seq=2 ttl=59 time=10.3 ms
64 bytes from www.whatismyv6.com: icmp_seq=3 ttl=59 time=10.3 ms
64 bytes from www.whatismyv6.com: icmp_seq=4 ttl=59 time=10.1 ms

--- www.whatismyv6.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 9.107/9.980/10.333/0.518 ms

Si açò no funciona i tenim un tallafoc a l’ordinador, és possible que necessitem indicar‐li que permeta el pas als paquets IPv4 amb protocol IPv6, amb l’ordre següent o l’equivalent al nostre sistema de configuració de tallafoc:

# iptables -t filter -A INPUT -p ipv6 -j ACCEPT

Una volta funcionen els ping, podem fer una prova d’accés a la web via IPv6. El més senzill és visitar www.whatismyv6.com emprant w3m:

$ w3m -6 www.whatismyv6.com

Si la plana ens mostra una adreça d’origen IPv6, açò ja està fet. Sí, de veres, ja està. Benvinguts al meravellós món d’IPv6!

Adreces addicionals

Bé, ja disposem de la nostra adreça IPv6, però realment tenim molt més que això: 6to4 reserva per a cada adreça IPv4 216 subxarxes de 264 adreces IPv6 (això és un quadrilió d’adreces, digueu‐me si no és l’abundància total!) per a que muntem la nostra pròpia xarxa IPv6. A banda, assignar adreces IPv6 addicionals a la màquina és tan fàcil com afegir una opció up i una down al bloc de configuració de tun6to4 per cada adreça extra. Per exemple:

up   ip -6 addr add 2002:0102:0304::2/16 dev $IFACE preferred_lft 0
down ip -6 addr del 2002:0102:0304::2/16 dev $IFACE

L’opció preferred_lft 0 evita que s’empre l’última adreça afegida com a adreça d’origen per defecte en les connexions d’eixida. Vegeu aquest article per a una descripció més detallada d’aquest mecanisme (gràcies Axel!).

Si la nostra màquina tinguera diferents adreces IPv4 públiques, podríem afegir una entrada similar a tun6to4 per a cadascuna d’elles, però amb una sola ja tenim moltíssimes adreces, i de passada simplifiquem la configuració de xarxa i ens facilitarem les coses si després volem preparar la resolució inversa de noms.

Per a saber com muntar una xarxa IPv6 darrere d’aquesta màquina, vegeu aquest punt de la guia IPv6 de Madduck.

Configuració del tallafoc

Ja que la màquina estarà accessible al públic via IPv6, és recomanable configurar‐ne el tallafoc amb ip6tables (per exemple fent servir local-iptables). Les regles haurien de ser similars a les d’IPv4. Per exemple, per a permetre el tràfic local, les connexions entrants a SSH i SMTP, i les establertes des de dins:

# ip6tables -t filter -N in-new
# ip6tables -t filter -A INPUT -i lo -j ACCEPT
# ip6tables -t filter -A INPUT -p ipv6-icmp -j ACCEPT
# ip6tables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# ip6tables -t filter -A INPUT -m state --state INVALID -j DROP
# ip6tables -t filter -A INPUT -m state --state NEW -j in-new
# ip6tables -t filter -A in-new -p tcp -m tcp ! --syn -j RETURN
# ip6tables -t filter -A in-new -p tcp -m tcp --dport 22 -j ACCEPT
# ip6tables -t filter -A in-new -p tcp -m tcp --dport 25 -j ACCEPT
# ip6tables -t filter -A INPUT -m limit --limit 3/min --limit-burst 10 \
            -j LOG --log-prefix "[INPUT6]: "
# ip6tables -t filter -A INPUT -j REJECT

Amb els nuclis Linux anteriors a 2.6.20 no funciona el seguiment de connexions. La configuració següent és similar a l’anterior, però no té en compte l’estat de les connexions (i desafortunadament tampoc permet el tràfic UDP sobre IPv6 sense regles explícites):

# ip6tables -t filter -A INPUT -i lo -j ACCEPT
# ip6tables -t filter -A INPUT -p ipv6-icmp -j ACCEPT
# ip6tables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
# ip6tables -t filter -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# ip6tables -t filter -A INPUT -p tcp -m tcp --dport 1024:65535 \
            ! --syn -j ACCEPT
# ip6tables -t filter -A INPUT -m limit --limit 3/min --limit-burst 10 \
            -j LOG --log-prefix "[INPUT6]: "
# ip6tables -t filter -A INPUT -j REJECT

Resolució de noms

Les adreces IPv6 són numeracos prou difícils de recordar. Si volem associar noms a les adreces fent servir DNS, haurem d’incloure noves entrades de tipus AAAA al servidors de noms corresponents. A l’exemple anterior, la següent entrada assignaria el nom test6to4 a l’adreça IPv6:

test6to4  IN  AAAA  2002:102:304::1

Una volta fets els canvis al DNS, usem dig (paquet dnsutils) per a comprovar que la resolució directa funciona bé al nostre servidor DNS. Per a l’exemple:

$ dig -t AAAA test6to4.example.net @SERVIDOR_DE_DNS +short
2002:102:304::1

Si volem que funcione la resolució inversa haurem de patir un poc més perquè cal disposar d’un servidor de DNS on puguem crear nous dominis i demanar que ens siga delegada la resolució de les adreces IPv6 que comencen amb el prefix associat a la nostra adreça IPv4. Afortunadament açò últim és automàtic.

El propòsit és fer que la nostra adreça IPv6 de l’exemple, que escrita en forma completa és:

2002:0102:0304:0000:0000:0000:0000:0001

o en termes de DNS (compte, que va!):

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.0.3.0.2.0.1.0.2.0.0.2.ip6.arpa

(és a dir, l’adreça completa invertida amb els dígits separats per punts) siga resolta a un nom com test6to4.example.net.

Començarem per visitar 6to4.nro.net fent servir IPv6 des de la mateixa màquina on estem fent els canvis:

$ w3m -6 http://6to4.nro.net/

El domini indicat com a reverse serà el que haurem de crear al nostre servidor DNS (la instaŀlació o configuració d’aquest queda com a exercici per al lector, però podeu inspirar‐vos en aquesta pàgina). En el nostre exemple, el domini invers seria 4.0.3.0.2.0.1.0.2.0.0.2.ip6.arpa, i el fitxer de zona complet podria ser similar a aquest:

@  IN  SOA  4.0.3.0.2.0.1.0.2.0.0.2.ip6.arpa.  hostmaster.example.net.  (
    2009122102  ; Serial number (YYYYMMDDnn)
    3h          ; Refresh time
    1h          ; Retry time
    7d          ; Expire time
    3h          ; Default TTL
)

; Nameservers
    IN  NS  ns1.example.net.
    IN  NS  ns2.example.net.

; IPv6 pointers
$ORIGIN  4.0.3.0.2.0.1.0.2.0.0.2.ip6.arpa.

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN  PTR  test6to4.example.net.

Una volta fets els canvis al DNS, usem dig (paquet dnsutils) per a comprovar que la resolució inversa funciona bé al nostre servidor DNS. Per a l’exemple:

$ dig -x 2002:102:304::1 @SERVIDOR_DE_DNS +short
test6to4.example.net.

En acabant, demanem la delegació visitant una altra volta 6to4.nro.net fent servir IPv6 des de la mateixa màquina on estem fent els canvis:

$ w3m -6 http://6to4.nro.net/

Introduïm al formulari l’adreça de correu de l’administrador (hostmaster@example.net) i els noms d’almenys dos servidors de noms (ns1.example.net i ns2.example.net) del domini invers, una contrasenya per a evitar que qualsevol usuari de la màquina puga canviar les dades, i premem Submit. Arreglat.

Quan els canvis del DNS s’hagen propagat (cosa que pot portar hores), hauríeu de poder vore la resolució inversa correcta p.ex. a l’eixida de ping6 (entre parèntesis):

$ ping6 -c 4 test6to4.example.net
PING test6to4.example.net(test6to4.example.net) 56 data bytes
64 bytes from 2002:102:304::1 icmp_seq=1 ttl=64 time=0.033 ms
64 bytes from 2002:102:304::1 icmp_seq=2 ttl=64 time=0.053 ms
64 bytes from 2002:102:304::1 icmp_seq=3 ttl=64 time=0.052 ms
64 bytes from 2002:102:304::1 icmp_seq=4 ttl=64 time=0.049 ms

--- test6to4.example.net ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.033/0.046/0.053/0.011 ms

Més, més, més!

Ara que ja sabem com dotar el nostre servidor amb una connexió IPv6 de primera, estaria bé poder configurar el nostre ordinador de casa per a accedir a Internet via IPv6. En algun enviament futur comentaré com dotar de connectivitat IPv6 una màquina situada darrere d’un encaminador amb NAT sense apenes maldecaps, fent servir Teredo. Tanmateix, açò ofereix una adreça IPv6 temporal que pot canviar segons els capritxos del nostre proveïdor d’Internet o del nostre encaminador.

El següent pas seria configurar la nostra xarxa de casa per a que forme una xarxa IPv6 plenament accessible des de l’exterior, per exemple fent servir el servidor de túnels SixXS. Afortunadament, el tio Madduck ja ha descrit el procediment amb pèls i senyals a la seua pàgina sobre IPv6 amb Debian. Fins i tot podem trobar a la web com muntar un túnel i xarxa IPv6 amb OpenWRT, tot i que hi ha alguns problemes de sobrecàrrega del processador. Si m’anime a fer‐ho ja vos contaré com ha anat.

Fins al proper viatge IPv6!

Ipv6 no dona beneficis

Ei Ivan!
Veig que continues donant-li canya a la consola, jeje. Comentaré la part espiritual de l'article, que la técnica es incontestable per a mi :)
Pareix mentira que després de tant de temps ipv6 encara no haja arrancat... Pense que si no s'ha fet es perque no interessa a les grans corporacions. L'escasessa de recursos es una ferramenta de control del capitalisme per a tindre els preus elevats i en aquest cas les direccions fixes son el recurs. Si hagueren direccions IP quasi infinites les empreses les tindrien que donar practicament gratis i perdrien diners.
Si ho comparem amb una altra tecnologia com la televisió, en el cas de la TDT els "poderosos" (govern/empreses) si que guanyen amb el canvi tecnologic: més canals, mes llicencies, més publicitat, etc... Pero tindre més adreces IP no beneficia per a res als que tenen el poder, només als pobres usuaris que no pintem res...
La cosa està xunga Ivan!

Principi de generació d’escasesa

Sí, més o menys a això em referia amb l’escassesa d’adreces IPv4 és un (molt debatible) motiu argüit pels proveïdors per a mantenir l’actual statu quo. I a banda de l’increment de preus, també hi ha el propòsit de concentració de poder. Per això enllace l’article de Versvs (mira a partir de Tendemos a pensar…).

Respecte a la incontestabilitat tècnica de l’article, recorde que algú digué que jo era the first man encapsulated into an IP datagram. ;) Ara seriosament, en açò d’IPv6 crec que encara hi ha molt que debatre. Per exemple, per a aquest article concret el fet de que necessites una adreça IPv4 fixa i permanent no és un requeriment trivial, i en els altres casos o bé guanyes una adreça IPv6 temporal (Teredo) o has de passar per un punt únic (túnel AYIYA). Un desplegament distribuït d’IPv6 està encara lluny de la realitat…

M’alegre de vore’t per aquest blog!

Pingback

[...] seguiu el meu blog haureu vist que aquests dies també he estat embolicat fent proves amb IPv6. Contrastant l’experiència amb allò narrat al llibre, em sorprén com el bricolatge digital [...]

Pingback

[...] seguís mi blog habréis visto que estos días también he estado liado haciendo pruebas con IPv6. Contrastando la experiencia con lo que narra el libro, me sorprende cómo el bricolaje digital se [...]