Linux como gateway con ADSL
Hoy explicaré como hacer para transformar nuestro linux en la puerta de salida a internet con adsl, en vez de a los tipicos modem-router a los que estamos acostumbrados, para así poder tener más control sobre todo lo que nos llega, gestionar mejor el ancho de banda o cualquier otra cosa que se nos ocurra.
Para empezar lo primero que tendremos que hacer es preparar el hardware necesario, en mi caso un modem-router linksys y un servidor linux con un par de tarjetas de red y un switch (como en el casa del herrero cuchara de palo… en vez de switch usaré otro modem-router que sólo hará la función de switch).
Para hacerlo empezaremos conectandonos al modem-router para quitar la opción por defecto que suelen llevar que es la de conectarse ellos a internet y luego repartir la conexión y cambiarla a la opción de bridge, pero manteniendo el resto de datos ( el VC o LLC, el VPI y el VCI)*, quedando en mi caso tal como se ve en la siguiente imagen (clic para ampliar):

La zona con el globo es la importante que tiene la configuración necesaria.
Después de tenerlo así configurado, tendremos que irnos a nuestro linux y configurar la conexión: desde la linea de comandos ejecutaremos pppoeconf (paquete pppoe en debian, *buntus y derivadas) para pppoe y para pppoa deberemos configurar la conexion a mano (creo según este tutorial -mirror aquí en pdf usando los tips de los que hablé en este post-, no tengo pppoa para probarlo).
Al ejecutar pppoeconf nos detectara las interfaces eth y nos pide los datos necesarios de usuario y contraseña para poder establecer la conexión, así que para conectarnos lo único que nos quedara será conectarnos con ppp con el comando
pon dsl-provider
y ya tendremos conexión a internet :).
Para comprobar que ya funciona ejeuctaremos un ping a cualquier sitio para ver si hay respuesta y ya podremos navegar perfectamente.
ping -c 4 google.es && echo FUNCIONA la conexion || echo NO FUNCIONA la conexion
El comando es sólo una línea.
Si la conexión nos funciona, lo que nos falta es hacer que nuestro linux reparta la conexion a los demas dispositivos, con lo cual tendremos que decirselo y para ello usaremos iptables .
Lo basico es activar el ip_forwarding con
echo “1″ > /proc/sys/net/ipv4/ip_forward
y al tener ip varible nos irá bien hacer
echo “1″ > /proc/sys/net/ipv4/ip_dynaddr
y a partir de ahi borramos la reglas de iptables y activamos el masquerading con los siguientes comandos :
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
iptables -A FORWARD -i $EXTIF -o $INTIF -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -A FORWARD -j LOG
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
poniendo todo eso en un script, sustituyendo $EXTIF por el nombre de la interfaz externa y $INTIF por la interfaz que lleva a la red interna y lanzandolo, aunque únicamente duraría hasta el siguiente reinicio, por lo que tendriamos que hacer que se iniciase cada vez.
En debian y derivadas, el script se tendria que poner con permisos de ejecución y la ubicación del intérprete en la primera línea precedido de # por lo que quedaría así:
#!/bin/bash
echo “1″ > /proc/sys/net/ipv4/ip_forward
echo “1″ > /proc/sys/net/ipv4/ip_dynaddr
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
iptables -A FORWARD -i $EXTIF -o $INTIF -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -A FORWARD -j LOG
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
en /etc/init.d/ y con el comando update-rc.d añadirlo a la secuencia de arranque
chmod a+x /etc/init.d/script
update-rc.d script defaults
El script original (lo que he explicado más algunas comprobaciones y algo de documentación) está aquí y lo he copiado aquí, aunque este es un script básico para comprobar la conectividad de los dispositivos de detras de nuestro linux con internet, por lo que para asegurar el servidor tendriamos que leer sobre iptables y montar un script más avanzado respecto a seguridad, que no es el objetivo de este post.
Y después de todo este tocho post… pues lo voy dejando hasta otro día.
Si lo intentas hacer y no te sale o hay algo que no entiendes puedes dejar un comment :).
Saludos.
*Para ver los datos básicos de conexión se pueden ver aquí y el mirror con los Datos de conexión ADSL _ Generico _ ADSL Ayuda.pdf.
Febrero 6th, 2008 at 9:41 pm
[…] en la interfaz en modo master) y ejecutar en la fonera el script que use de ejemplo al montar el gateway adaptado para este caso […]