Redes-Linux.com
Esta página esta optimizada para ser visualizada tanto en navegadores gráficos, como en navegadores de texto.
 
Buscar en:


 
El Servidor
Current bandwidth utilization 0.01 Mbit/s
Ancho de banda utilizado
 
Redes-Linux
 
Tip Today by ugu.com
 
Más cosas
 
Conóceme
 
Nota: Este es un articulo escrito por el administrador de esta misma web (http://www.redes-linux.com), y fue desarrollado ante las diversas duda planteadas en el foro sobre este tema.

13/01/2004   Compartir la conexión a Internet   04:03 A.M.
Dado que en los foros de Redes-Linux, varias veces se ha preguntado como se llevaba a cabo esta operación con Linux, he desarrollado este pequeño documento, en el que explico como podemos realizar esta operación.


Varias formas de hacerlo
Para compartir nuestra conexión a internet, podemos hacerlo de dos formas bien distintas:
1) Mediante el uso de un proxy-web como squid.
2) Mediante el uso de iptables (ipchains/ipfw).

Cada una de estas, tiene sus pros y sus contras y es el usuario el que debería valorarlas.


La primera de ellas, será una forma muy conocida por la gente que proviene de windows, ya que es muy utilizada por estos usuarios (se nota que han probado la aplicación propia que lleva windows "compartir conexión a internet"...) y tiene la ventaja que si se hace uso de un proxy-caché como squid, podemos ahorrar ancho de banda en nuestra red local. ¿Por qué?, pues porque squid, abrirá un puerto por donde escuchará las peticiones web de nuestros clientes de la LAN y será él, el que haga la "petición en sí", guardándose una copia, de manera que si otro cliente desea visitar la misma web, es el proxy el que se la sirve.
Para que se observe de forma más ilustrativa veámoslo en una imagen:

funcionamiento básico del
proxy


De esta forma, ahorraremos ancho de banda, el cual es un "don muy preciado".
La gran pega que tiene hacerlo de esta manera, es que Squid solo es compatible con HTTP, FTP, HTTPS, GOPHER y WAIS, por lo que si queremos compartir enteramente la conexión, esta solución no nos valdrá (a no ser que utilicemos otro proxy compatible que escuche por otro puerto, para esos menesteres). Es decir, por ejemplo, si lo que queremos es que toda nuestra red local pueda consultar correo externo, no podremos hacerlo con Squid.

La segunda forma es mi preferida, pues iptables da mucho más juego que un proxy squid, ya que con este, además de poder compartir la conexión a internet, podremos poner en marcha un firewall para nuestra red local, además de poder gestionar todo el filtrado de paquetes hacia las maquinas de nuestra LAN.
De esta forma, sí podremos hacer uso de cualquier tipo de protocolo en todos los clientes de nuestra red local (si hemos puesto en marcha un firewall con iptables, debemos de tener en cuenta las restricciones que hayamos puesto).


Compartir la conexión con un proxy Squid

1.1.- Instalación del proxy Squid (si no lo tenemos ya instalado)
Segun que distribución de Linux sea la nuestra, podremos instalar Squid de una forma o de otra:

  • En el caso de Debian o de cualquier distribución que lleve instalado el programa apt-get, podremos instalarlo con un simple:
    apt-get install squid
  • En el caso de Fedora, podemos instalar el proxy de esta forma:
    yum install squid
  • En el caso de las demas distribuciones basadas en paquetes rpm, que no tengan instalado el programa apt-get, tendremos que o bien utilizar cualquier programa que nos incluya la propia distribución (YAST2 en SuSE, ...) o bien instalarlo mediante el gestor de paquetes "rpm" a mano. Para ello, previamente tendremos que conseguir todos los paquetes necesarios para su instalación, para lo cual, nos podemos dirigir a webs como http://rpmfind.net, o a nuestros cd's oficiales de nuestra distribución.
    Una vez tengamos todos los paquetes necesarios, podremos instalarlos con el comando (atención con las dependencias):
    rpm -ihv paquete.rpm
  • Si no queremos instalar paquetes binarios de nuestra distribución, podemos optar por instalar desde código fuente, para lo cual, nos dirigiremos a la web de Squid y nos bajamos el "tar.gz" de la última versión estable. Una vez lo tengamos en nuestro ordenador, instalaremos el squid de esta forma:
    tar xvfz squid-version.tar.gz
    cd squid-version
    ./configure --prefix=/usr/local/squid
    make
    make install
    


1.2.- Puesta en marcha de Squid
Una vez lo tenemos instalado, podremos poner en marcha el proxy de esta forma:
/etc/init.d/squid start
/etc/rc.d/init.d/squid start (esto para algunas distribuciones basadas en rpm)

Si hemos instalado desde fuentes, es posible que no tengamos este script de arranque, debiendo de arrancarlo con el comando:
/usr/local/squid/sbin/squid

Si este es nuestro caso y queremos que nos arranque en el inicio del sistema, podemos hacer nosotros un script en "/etc/init.d" llamado "squid", que contenga esto:
/usr/local/squid/sbin/squid &

y lo ponemos en el arranque de nuestro sistema de esta manera:
ln -s /etc/init.d/squid /etc/rc2.d/S99squid
ln -s /etc/init.d/squid /etc/rc3.d/S99squid
ln -s /etc/init.d/squid /etc/rc4.d/S99squid
ln -s /etc/init.d/squid /etc/rc5.d/S99squid


1.3.- Configurar Squid para compartir la conexión
Para configurar squid, basta configurar el fichero "squid.conf" que según si hemos instalado desde paquetes binarios o desde fuentes lo encontraremos en un lugar u otro. En el caso de paquetes binarios, lo podremos encontrar en "/etc" (paquetes .deb de debian), "/etc/squid (paquetes .rpm), mientras que si hemos instalado desde fuentes estará en "/usr/local/squid/etc" (el --prefix que le indicamos al hacer el ./configure).
En dicho fichero, deberemos prestar atención a varias directivas que nos serán necesarias para compartir la conexión a internet, las cuales vamos a ver resumidas ahora (presuponemos que nuestra red local es del tipo 192.168.1.0/255.255.255.0):
http_port 3128 (este es el puerto por el que queremos que escuche nuestro proxy)
cache_mem 8 (tamaño máximo que pueden alcanzar los objetos cacheados, sería
recomendable ponerlo a 16 MB si poseemos varios clientes).
cache_dir ufs /var/spool/squid 100 16 256 (es el directorio donde se almacenará la caché
y como se estructurará éste. No lo tocaremos)
acl all src 0.0.0.0/0.0.0.0 (creamos una lista de acceso con todas las redes)
acl localhost src 127.0.0.1/255.255.255.255 (creamos una lista de acceso con
la propia maquina)
acl mired src 192.168.1.0/255.255.255.0 (creamos una lista de acceso con mi red)
http_access allow localhost (permitimos el acceso a la propia maquina)
http_access allow mired (permitimos el acceso a nuestra red local)
http_access deny all (denegamos el acceso al resto de la red)
httpd_accel_host virtual
httpd_accel_port 0 (habilitamos cache acelerada para cualquier puerto)
http_accel_with_proxy on

Y todas las demás opciones las dejamos como vienen por defecto (No es objeto de este articulo, explicar enteramente el funcionamiento de squid, sino solo la tarea de compartir la conexión a internet)
Solo recordaremos que si tuviéramos más redes, deberíamos definir una acl nueva con esa otra red (acl nombre_de_red src dirección_de_red/mascara) y permitir el acceso justo antes de denegar al resto de las redes, pues la aplicación de las reglas van siguiendo un orden y si se cumple una de estas reglas, ya no se aplicaría la siguiente. Es decir, si hubiésemos puesto primero el "httpd_access deny all", nuestra red local entra dentro de esta aplicación (all hacía referencia a todas las redes) y ya no miraría el "httpd_access allow mired" y por tanto, no tendría acceso a nuestro proxy. Tal como esta puesto en el ejemplo, nuestra red cumpliría la aplicación "httpd_access allow mired" y ya no se fijaría en el "httpd_access deny all", afectando como decía anteriormente, solo al resto de las redes.
También recordar que ante cualquier cambio en el fichero de configuración de squid, deberemos reiniciar este servicio:
/etc/init.d/squid stop
/etc/init.d/squid start
/etc/rc.d/init.d/squid stop (esto para algunas distribuciones basadas en rpm)
/etc/rc.d/init.d/squid start


1.4.- Configuración de los clientes
En los clientes, solo comentar que en cada una de las aplicaciones que utilicemos de cara a internet (los proxies son también conocidos como firewall de aplicación), habrá que configurar como proxy el que acabamos de configurar. Por ejemplo, en el Internet Explorer, nos tendremos que ir a:
Herramientas - Opciones de internet - Conexiones - Configuración Lan
Aquí, marcamos la casilla de "Usar servidor proxy", poniendo como dirección,
la ip de nuestro proxy y como puerto el 3128 (que es el que le hemos indicado
a squid).

En el mozilla sería:
Edición - Preferencias - Avanzadas - Proxies
Aquí, marcamos la casilla de "Configuración manual del proxy" y en la casilla
"Proxy HTTP" ponemos la dirección IP y como puerto el 3128 (que es el que le
hemos indicado a squid),

Y hasta aquí la parte de la explicación de los clientes, ya que no es objetivo de este articulo, el desarrollo de esta parte, ya que deberíais saber como se hace.


2.- Compartir la conexión con Iptables
Iptables funciona de forma parecida a las reglas de acceso del proxy squid, es decir, será un conjunto de reglas puestas en orden y si cumplimos una que restringe a la siguiente, no cumpliremos esta última. Es decir, imaginemos que en una primera regla impedimos el acceso de una dirección ip a nuestra web o mejor dicho al puerto 80 de nuestra maquina, si en una regla posterior aceptamos de todo el mundo los paquetes (o para que lo entendamos todos, conexiones), a este mismo puerto 80, la dirección ip que antes habíamos restringido, seguirá sin poder ver nuestra web, pues la primera regla ha restringido a la segunda, convirtiéndose esta última en: "aceptamos el acceso de todos menos de esa ip".
Pero bueno, como no es objetivo de este articulo, explicar como se pone en marcha un firewall, sino compartir la conexión a internet o dicho de mejor forma, "Hacer NAT de nuestra red local", vamos a ver sin más dilación como vamos a llevar a cabo esta faena.

2.1.- ¿Qué es hacer NAT/MASQUERADE de una red?
Explicado de manera rápida, hacer NAT/MASQUERADE de una red, es simplemente enmascarar las ip's de dicha red con otra diferente, es decir, imaginemos una maquina cuya ip es 192.168.1.1 que sirve de pasarela de otra maquina cuya ip es 192.168.1.2. Hacer NAT de esta última maquina, significa que de cara al exterior las conexiones las estará haciendo 192.168.1.1, aunque sea 192.168.1.2, la que esté accediendo al exterior.
Pero al igual que antes, para comprenderlo mejor, veamos un gráfico:

NAT con
IPtables


2.2.- Sencillo ejemplo de NAT/MASQUERADE con iptables
Una vez sabemos qué es hacer NAT/MASQUERADE, vamos a ver como hacerlo de nuestra red local, para poder compartir la conexión a internet.
La forma de utilizar iptables, es ir escribiendo regla por regla, recordando la misma limitación del orden de las reglas que teníamos en el proxy. La pega de esto, es que estas reglas se guardan en memoria, perdiéndose cuando apagamos el ordenador. Para evitarlo, existe un script llamado iptables-save que hace una copia de seguridad de la tabla de reglas de iptables.
Además de esto, lo que podemos hacer es escribir en orden las reglas en un script, el cual podemos ejecutar en el inicio del sistema (esta es la forma que veremos aquí). Para ello, editamos un fichero de texto, por ejemplo, "/etc/init.d/firewall", donde pondremos esto (contando que tu red local es del tipo 192.168.1.0 y sales a Internet a traves de la interfaz eth0. Si te conectas con modem de 56K cambia esta interfaz por ppp0):
modprobe iptable_nat 
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

Una vez lo tenemos, le damos permisos de ejecución:
chmod +x /etc/init.d/firewall

Y lo ponemos en el arranque del sistema:
ln -s /etc/init.d/firewall /etc/rc2.d/S99firewall
ln -s /etc/init.d/firewall /etc/rc3.d/S99firewall
ln -s /etc/init.d/firewall /etc/rc4.d/S99firewall
ln -s /etc/init.d/firewall /etc/rc5.d/S99firewall

2.3.- Configuración de los clientes
En los clientes de nuestra red local, lo único que tendremos que hacer es poner como puerta de enlace predeterminada (o gateway), la ip de la maquina que acabamos de configurar.


Conclusión
Con estos dos métodos que hemos visto, podríamos compartir la conexión a internet fácilmente con las demás maquinas de nuestra red local, pero jugando un poco más con ellos, podremos hacer cosas mucho más sofisticadas, como un firewall para proteger nuestra red local, un proxy transparente, para que no puedan saltárselo los usuarios, proxy autentificado mediante samba, ldap, etc, etc..