[LUG.ro] Como configurar ipv6-to-ipv4 en Linux

Horacio Castellini lugro@lugro.org.ar
Wed, 16 Apr 2003 16:14:27 -0300 (ART)


Hola:
	Siguiendo con mi raconto de experiencias personales para compartir 
con la comunidad Lugro, les comentaré como se implementa ipv6 en la distro 
RedHat 7.3 en adelante, con algunos comentarios para generalizarlos a 
distros con núcleos de versiones mayores al 2.4.10 que soportan en un 100% 
ipv6 asi como algunas aplicaciones entre ellas el ssh y el domaind. 

Preperando el nucleo:
	el núcleo genérico Linux version 2.4.18-3 que viene en la distro 
RH 7.3 soporta muy bien ipv6, pero hay pasarle algunos parámetros 
especiales al núcleo para que manipule los paquetes ipv6. Si uno usa un 
núcleo personalizado y se enfrascó en la configuración casi seguro borró 
todo el soporte de ipv6. Este es un gran defecto a mi enterder que tiene 
linux que no tiene FreeBSD ni OpenBSD pues uno tiene la opción "make 
GENERIC" y te genera un núcleo genérico de fuentes actualizadas sin tener 
que apelar a correr "make menuconfig" antes. 
	Los parámetros los modificaremos usando el comando sysctl (como 
root) pues es una forma más profecional que usar "echo 1 > ....", además 
es un estilo de trabajo universal cuando no se disponga del pseudo 
directório /proc (como ocurre en *BSD)

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

o puden definirse en el archivo /etc/sysctl.conf para que se fijen en el 
arranque. Esto permite evitar ciertos problemas cuando se configure 
ipv6-to-ipv4 y se desee usar freenet (206.123.31.102) como router ipv6 
para experimentar en ipv6. Esto es comun a todas las distros.

Configuración de dispocitivo Ethernet

Debián:

Si deseamos usar ipup/ipdown basta con editar el archivo correspondiente a 
la interfase y colocar (/etc/network/interfaces)

iface eth0 inet6 static
	address 3ffe:1234:0005:0006::78
	netmask 64
iface lo inet6 static
	address ::1
	netmask 128

Esto identifica una dirección global (ver más adelante) para eth0 y un 
host para lo. 

Otra alternativa es ingresar

ifconfig eth0 add fe80::200:21ff:fe43:ca26/10
ifconfig eth0 add 3ffe:1234:0005:0006::78/64
ifconfig lo add ::1/128

Si todo anduvo bien cuando hagamos lsmod debe aprecer

ipv6                  152352  -1

y cuando hagamos ifconfig

eth0      Link encap:Ethernet  HWaddr 00:00:21:43:CA:26  
          inet addr:192.168.1.4  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::200:21ff:fe43:ca26/10 Scope:Link
          inet6 addr: 3ffe:1234:5:6::78/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 b)  TX bytes:396 (396.0 b)
          Interrupt:5 Base address:0x320 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:211 errors:0 dropped:0 overruns:0 frame:0
          TX packets:211 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:30210 (29.5 Kb)  TX bytes:30210 (29.5 Kb)

La dirección  fe80::200:21ff:fe43:ca26/10 se la conoce como "link-local" y 
corresponde al dispositivo de red eth0, su propósito es de 
autoconfiguración o en situaciones sin router su ámbito es solo local, no 
puede salir de ahí.

En RH:

Bueno aca lo tengo más claro. Primero debemos agregar en el archivo 
/etc/sysconfig/network lo siguiente:

NETWORKING_IPV6=yes
IPV6_GATEWAYDEV=sit1

pues vamos a definir como pasrela ipv6 al dispositivo sit1 para luego 
hacer ipv6-to-ipv4, pues en la argentina no existe a mi conocimiento 
router ipv6 en coneciones dial-up (en adsl no se?)

luego para el dispositivo "lo" y "eth0" agregamos lo siguiente en 
/etc/sysconfig/network-scripts/ifcfg-eth0 y
/etc/sysconfig/network-scripts/ifcfg-lo

en *-eth0:

IPV6INIT=yes
IPV6ADDR=3ffe:1234:0005:0006::78/64

en *-lo:

IPV6INIT=yes
IPV6ADDR=::1/128

luego creamos el archivo /etc/sysconfig/network-scripts/ifcfg-sit1

con lo siguiente: (para que no arranque en el booteo)

DEVICE=sit1
BOOTPROTO=none
ONBOOT=no
IPV6INIT=yes
IPV6TUNNELIPV4=206.123.31.102
IPV6ADDR=3ffe:b00:c18:1fff:0:0:0:7f5/128

206.123.31.102 es el ipv4-address de freenet en cambio 
3ffe:b00:c18:1fff:0:0:0:7f5/128 es el ipv6 de nuestra máquina remota. sit0 
no puede usarse pues es usado como dispositivo especial.

Si todo estuvo ok, ya podemos usar el escript ifup-ipv6 para activar 
nuestro eth0 (si lo tenemos) y lo, el módulo ipv6.o se cargará 
automáticamente bajo demanda. por lo que debemos tener ahora los 
siguientes dispositivo con ifconfig -a 

eth0      Link encap:Ethernet  HWaddr 00:00:21:43:CA:26  
          inet addr:192.168.1.4  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::200:21ff:fe43:ca26/10 Scope:Link
          inet6 addr: 3ffe:1234:5:6::78/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 b)  TX bytes:396 (396.0 b)
          Interrupt:5 Base address:0x320 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:211 errors:0 dropped:0 overruns:0 frame:0
          TX packets:211 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:30210 (29.5 Kb)  TX bytes:30210 (29.5 Kb)

sit0      Link encap:IPv6-in-IPv4  
          NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)


Donde sit0 es el especial antes enunciado. Pero esto no es todo, en Rh 7.3 
se usa en xinetd que debemos reeplazar con xinetd-ipv6, para que podamos 
correr aplicaciones que usen ambas.

Por ejemplo en el siguiente listado optenido con "netstat -tan" se puede 
ver la existencia de aplicaiones que usan ipv6.

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:515             0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      
tcp        0      0 192.168.1.4:80          0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:113             0.0.0.0:*               LISTEN      
tcp        0      0 192.168.1.4:53          0.0.0.0:*               LISTEN      
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      
tcp        0      0 192.168.1.4:443         0.0.0.0:*               LISTEN      
tcp        0      0 :::21                   :::*                    LISTEN      
tcp        0      0 :::22                   :::*                    LISTEN      
tcp        0      0 :::119                  :::*                    LISTEN      
tcp        0      0 ::1:953                 :::*                    LISTEN

como ser ssh (puerto 22) ndc(953), y leafnode (119)

Aca les debo algo, como escribir en el archivo hosts para que relacione 
::1 con localhost (esto se lo debo)

Bueno ahora para activar el ipv6-to-ipv4 (si uno se conecta con la WAN via 
dial-up, primaro hay que conectarse ojo!) basta con ingresar

/etc/sysconfig/network-scripts/ifup sit1

con lo cual resulta:

sit1      Link encap:IPv6-in-IPv4  
          inet6 addr: 3ffe:b00:c18:1fff::7f5/128 Scope:Global
          inet6 addr: fe80::c82b:3073/10 Scope:Link
          inet6 addr: fe80::c0a8:104/10 Scope:Link
          UP POINTOPOINT RUNNING NOARP  MTU:1494  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Y ya estamos conectados! Bueno aca termino para cortarlo basta con usar

/etc/sysconfig/network-scripts/ifdown sit1

Saludos Horacio