Ruteador GNU/Linux IPv4 e IPv6 con PPPoE en DSL y Fibra Óptica usando wide-dhcp y radvd
By: Date: octubre 14, 2018 Categories: Consultoria y Manuales

Contexto

En la década del 90’s en internet habían tantas ips que al contratar un enlace dedicado el ISP que era telmex/reduno/uninet te daban una clase C, aunque solo fueras a conectar 3 computadoras tenias 250 IPs útiles sobrantes de las llamadas homologadas o públicas. Obviamente entregar ips en exceso tuvo el costo de que se agotaron en menos de 2 décadas. Actualmente al contratar un enlace dan una subred de la clase C de máximo 16 ips y ahora tal vez menos. Incluso en el 2011 hable del agotamiento en el artículo. FEBRERO DEL 2011, EL MES QUE INTERNET LLEGO A SU LIMITE actualmente seria imposible darle una ip publica a cada aparato conectado en nuestra casa ( Internet de las cosas ) por eso en los enlaces como los de telmex infinitum el modem de Telmex tiene la ip publica y detrás en la casa ( LAN ) cada aparato tiene una ip privada normalmente una clase C de 192.168.1.0/24 que permite conectar hasta 253 aparatos, todos ellos saliendo a internet con una única ip pública.

Por supuesto en el internet de mediado de los 90’s el mundo era menos maleado y podías conectar tu maquina a internet directamente con su ip pública y todos podían conectar directamente maquina a máquina sin requerir forwarding de puertos, puro y duro ruteo sin NAT. Esto traía el problema obviamente que cosas como los Nuke y otros juguetes de lamos bloqueaban las computadoras pues no había nada que la hiciera de firewall entre una maquina en China y otra en México

IPV6 al rescate.

El IPV6 tiene tantas ips disponibles que pretende que todos los aparatos que se conecten a internet puedan hacer conexiones 1 a 1 como lo hacia el IPV4 en los 90’s y sin firewall en un mundo mucho mas maleado que cuando el ipv4 cualquier tipo en Russia o la india podría entrar a tu maquina con solo conocer tu IP en IPv6 ¿ Esto es inseguro ? pues no… ahora todos tienen acceso a firewall de bajo costo y si eres hombre tu mismo te lo construyes con una PC o una raspberry pi

Introducción rápida a IPV6

Para este articulo hablare de algunos segmentos reservados en IPv6 como los que tiene IPv4 pero el uso que se le da aquí es distinto, deberías leer sobre IPv6 para tener información completa de este protocolo que apenas y es compatible con IPv4, son mundos totalmente diferentes. Aunque afortunadamente pueden convivir en el mismo enlace y tener un ruteador mixto de IPv4 e IPv6.

Para fines prácticos IPv6 es como Internet 2 ya que no es compatible con IPv4 y un servicio publicado en IPv6 no necesariamente esta publicado en una IPv4 o a la inversa, por eso es necesario contar con ruteadores mixtos para tener acceso a todos los servicios en cada protocolo de forma transparente.

Tipos de segmentos

Los siguientes segmentos son jerárquicos, es decir. Vamos a hablar del bloque Unicast ( Existen otros bloques en IPv6 )

Las Unicast Global son IPs denominadas globales son el equivalente de las ips homologadas o públicas del IPv4, en internet son las que se rutearan y se conectaran a servidores u otras máquinas

Las unique linklocal son ips que se usan para conexión interna automática en una LAN como cuando se activa la IPv4 en tu LAN pero no tienes un servidor DHCP ni has configurado las IP manualmente, el sistema operativo asigna de este tipo de ips para que al menos en tu LAN puedan interconectarse computadoras, estas nunca viajan mas lejos que tu LAN. En IPv4 equivale al segmento 169.254.0.0/16
Las LinkLocal son ips que pueden usar para recibir datos y servicios de los ruteadores, pero solo es a nivel ruteador… no harán el brinco a la nube de internet y por lo tanto tampoco puedes navegar con ellas a internet, en IPv4 equivalen a 172.16.0.0/16 y 192.168.0.0/16

Para este articulo solo requerimos manejar globales y link Local

Los segmentos Unicast Global para navegar a internet en IPv6 se le llaman prefijos de red y son de 64 bits, que son equivalente una clase C de IPv4 de 24 bits

Unicast
Unicast Global ( Todas las ruteables “ publicas “ )
Unicast Link Local FE80::/10 y FEBF::/10

Se requiere para conectar

Una conexión DialUP o XDSL vía cobre o Fibra con modem en modo bridge del servicio infinitum de Telmex en México usando PPP en DialUP y PPPoE cuando es por XDSL. Debido a que básicamente son iguales ( después de establecida la conexión ) pero DialUp prácticamente ya no hay, tal vez algún servicio perdido legado por ahí… me centrare en las conexiones DSL o Fibra usando los modem de Infinitum

Requerimiento

1 CentOS 7
2 Wide-Dhcp6-Server ( En raspberry pi 3 debe ser compilado, no se incluye en el Epel Repo )
3 Radvd
4 deshabilitar la auto configuración IPv6 de la tarjeta de red a la LAN

Archivo /etc/sysconfig/network-scripts/ifcfg-eth0

IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy

5 Tener el usuario y clave de conexión del modem ( solicitarla en soporte infinitum )

Instalar los programas requeridos

yum install radvd wide-dhcpv6

—- Instalar wide-dhcpv6 en CentOS 7 corriendo en Raspberry PI 3 —
1 wget http://dl.fedoraproject.org/pub/fedora/linux/releases/27/Everything/source/tree/Packages/w/wide-dhcpv6-20080615-13.1.fc27.5.src.rpm
2 yum install bison* flex*
3 rpmbuild –rebuild “wide-dhcpv6-20080615-13.1.fc27.5.src.rpm”
4 cd rpmbuild/RPMS/armv7hl/
5 rpm -Uvh wide-dhcpv6-20080615-13.1.el7.5.armv7hl.rpm
—————————————————————-

Configurar PPP

Archivo /etc/ppp/options

Agregar esta línea para activar el soporte IPv6 en PPP

+ipv6 ipv6cp-use-ipaddr

Configurar el usuario y clave de conexión

Archivo /etc/ppp/pap-secrets

“usuario” * “clave”

Configurar wide-dhcp

Archivo /etc/wide-dhcpv6/dhcp6c.conf

interface ppp0 {
send ia-pd 0;
};

id-assoc pd 0 {
prefix-interface eth0 {
sla-id 1;
};
};

send ia-pd 0; Solicita La delegación de prefijo de red de /64 bits a la interface ppp0 ( Wan ), una vez obtenido se le asigna una IP de IPv6 a la tarjeta eth0 que en este caso es la tarjeta de red de la LAN

Configurar radvd

Archivo /etc/radvd.conf

interface eth0
{
AdvSendAdvert on;
AdvLinkMTU 1442;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
prefix ::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};

};

Radvd es un demonio “ router advertisement daemon for IPv6 “, a diferencia del IPv4 donde el router/Gateway se podía asignar por dhcp, en IPv6 debe existir un servicio que le avise a los equipos en la LAN que este Linux es un router de IPv6 además les asigna una IP del prefijo delegado, como lo haría un DHCP pero en IPv6 lo tiene que hacer el radvd

La línea AdvLinkMTU 1442; es muy importante cuando la conexión WAN es por PPP o PPPoE ya que el IPv6 no se fragmenta como el IPv4, se requiere tener un valor de MTU que no fragmente el IPv6 y que al mismo tiempo pase por el PPP el cual no llega al MTU 1500 que por Default es asignado a Ethernet. De no tener cuidado con este valor las conexiones TCP se quedan bloqueadas en IPv6 al fragmentarse los paquetes.

La línea prefix ::/64 funciona como comodín, vale lo que valga el prefijo de red que nos fue delegado, aunque se puede escribir directamente y se debe escribir cuando el prefijo de red no cambia, en el caso de un conexión a infinitum la red es dinámica, como cuando nos dan las ips dinámicas en el modem que cambian con cada reinicio del modem

El MTU se puede demostrar así, usando el comando ping en GNU/Linux

ping6 -c 1 -M do -s 1442 www.lastdragon.net

PING www.lastdragon.net(servidor.lastdragon.net (2600:3c00::f03c:91ff:fe90:372d)) 1442 data bytes
1450 bytes from servidor.lastdragon.net (2600:3c00::f03c:91ff:fe90:372d): icmp_seq=1 ttl=58 time=102 ms

— www.lastdragon.net ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 102.708/102.708/102.708/0.000 ms

Pero si el valor es superior como 1500, no va a pasar correctamente a la WAN por PPP

ping6 -c 1 -M do -s 1500 www.lastdragon.net

PING www.lastdragon.net(servidor.lastdragon.net (2600:3c00::f03c:91ff:fe90:372d)) 1500 data bytes
ping: local error: Message too long, mtu=1492

— www.lastdragon.net ping statistics —
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

Listos para conectar.

Lo primero será conectar a Internet de forma standart con el comando ppp + pppoe, una vez conectado nos darán una IPv4 y ya podremos tener acceso a internet como siempre, aplicando reglas NAT para los nodos en la LAN, pero en este punto todavía no tenemos mas que unas IP Link Local que no sirven para navegar, sin embargo, nos servirán para consultar el prefijo de red y obtener las global unicast que con las que navegaremos en IPv6. Para obtener las unicast global se requiere el prefijo que nos será delegado, ese trabajo lo hace wide-dhcp, finalmente con el radvd enviamos el ruteador y configuración IPv6 a toda la LAN

Pasos

1 conectar a internet de Infinitum en un modem en modo bridge

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv6/conf/all/forwarding

/usr/sbin/pppd pty "/usr/sbin/pppoe -p /var/run/pppoe-adsl.pid.pppoe -I eth0 -T 80 -U -m 1412" ipparam ppp0 linkname ppp0 noipdefault noauth default-asyncmap defaultroute hide-password nodetach mtu 1492 mru 1492 noaccomp nodeflate nopcomp novj novjccomp user usuario usepeerdns lcp-echo-interval 20 lcp-echo-failure 3

El parámetro usuario debe ser el usuario que se configuró en el archivo /etc/ppp/pap-secrets

En este paso se crea la interface ppp0 con la conexion IPv4 y las LinkLocals necesarias para dhcp6c

ppp0: flags=4305 mtu 1492
inet 187.153.238.78 netmask 255.255.255.255 destination 200.38.193.226
inet6 fc00:10b8:1:34ac:354f:2f70:e91b:6e7c prefixlen 64 scopeid 0x0
inet6 fe80::354f:2f70:e91b:6e7c prefixlen 10 scopeid 0x20 ppp txqueuelen 3 (Point-to-Point Protocol)
RX packets 3579 bytes 4758706 (4.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2183 bytes 153274 (149.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

2 recibir el prefijo delegado

dhcp6c -c /etc/wide-dhcpv6/dhcp6c.conf ppp0

En este paso eth0 ya tiene una IP del prefijo delegado

eth0: flags=4163 mtu 1500
inet 192.168.10.253 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 2806:10be:2:3b2f:52e5:49ff:fe5c:497 prefixlen 64 scopeid 0x0
inet6 fe80::2be4:934b:c961:9b10 prefixlen 64 scopeid 0x20 ether XX:XX:XX:XX:XX:XX txqueuelen 1000 (Ethernet)
RX packets 38357 bytes 29721746 (28.3 MiB)
RX errors 0 dropped 33 overruns 0 frame 0
TX packets 36516 bytes 29416776 (28.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

3 asignar la ruta default para todas las conexiones WAN hacia ppp0

route -6 add default dev ppp0
o con el comando ip
ip -6 route add default dev ppp0

4 activar el radvd

systemctl start radvd

Esto es todo.

Tenemos acceso a la red IPv6, nótese que no se ha configurado DNS ni tampoco configure NAT para el IPv4

Los DNS IPv4 actuales son capaces de resolver IPv6 por lo que no seria necesario configurar DNS IPv6 explícitamente, con configurar en el dhcp del IPv4 el DNS es suficiente.

Compartir el internet a LAN de IPv4

iptables -t nat -A POSTROUTING -j MASQUERADE

En este punto se tiene un ruteador mixto, puede dar internet por IPv4 e IPv6. También debe recordarse que todas las maquinas en la LAN han recibido IP de IPv6 totalmente ruteables ( Unicast Global ) si no se le aplica firewall o filtro con ip6tables que es idéntico al iptables pero para IPv6 , estas IP estarán expuestas a Internet libremente.

Imagenes


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *