Compartir la conexión a Internet (y algo más) con GNU/Linux

networking

Esta receta explica cómo configurar un ordenador para que sirva como router de tu pequeña red domestica. La idea es que varios equipos puedan salir a Internet por medio de una sola conexión y con una única IP pública. Una vez consigas esto, hay varias cosas más que puedes hacer con él...

Ingredientes

  • Un ordenador:

    Este equipo hará de router. Sirve cualquier cosa mayor de un Pentium. Un K6 o un PII con 64 MB es más que suficiente para los servicios básicos.

  • iptables:

    Herramienta de administración de filtrado de paquetes IP.

  • Un Linux "de los nuevos":

    Como vas a utilizar iptables necesitas un Linux-2.6 o superior (aunque también serviría un 2.4).

  • dnsmasq:

    Es un servidor DHCP y caché DNS muy versátil y fácil de configurar.

Configuración de las interfaces de Red

Ese ordenador "de desecho" del que hablaba antes lo llamaremos a partir de ahora con el original nombre de Router. Bien, Router debe tener, al menos, dos interfaces de red:

  • Una conexión a Internet (eth0).

    Debe ser algún tipo de conexión a Internet, que puede ser RTC, ADSL, cable-modem, etc. Supondremos para esta receta que usas un modem ADSL con conexión Ethernet.

    Conste que podría ser RDSI, ppp o cualquier otro tipo de interfaz de red sin que ello afecte al resto del procecimiento. Supondremos que esta interfaz ya la tienes configurada conforme a las instrucciones de tu ISP.

  • Una conexión a tu red local (eth1):

    Será una tarjeta de red Ethernet 10/100. Esto permitirá que puedas enchufarle un conmutador y conectar "cienes y cienes" de ordenadores si quieres.

    Esta interfaz debes configurarla de forma estática, con una dirección IP privada, por ejemplo 192.168.0.1.

Aquí puedes ver un fichero completo /etc/network/interfaces para el caso en que eth0 se configure por DHCP contra tu ISP.

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
      address 192.168.0.1
      netmask 255.255.255.0
      broadcast 192.168.0.255

Activa el forwarding (reenvío)

Normalmente un ordenador conectado a una red TCP/IP descarta todos los paquetes IP que le llegan pero no van dirigidos a él, es decir, aquellos cuya direcci IP no corresponde a ninguna de las interfaces de la máquina. Sin embargo, un router debe tratar paquetes IP que no son para él. Para conseguir esto debes activarlo explícitamente con:

Router:~# echo 1 > /proc/sys/net/ipv4/ip_forward

O mejor aún, como queremos que ocurra la siguiente vez que arranque el equipo, modifica el fichero /etc/sysctl.conf para que quede así:

net.ipv4.ip_forward=1

Activa el NAT

El NAT es una técnica que permite que varios ordenadores puedan acceder a Internet aunque sólo se disponga de una IP pública. El NAT se encarga de "traducir" las direcciones IPs privadas por la única pública al enviar y realiza el proceso inverso al recibir las respuestas. Para activarlo escribe:

Router:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Con esto, los equipos conectados a la interfaz eth1 de Router ya tienen conexión a Intenet, aunque sus IPs habría que configurarlas "a mano" y no son capaces de resolver nombres. Vamos a ver cómo solucionar esas dos cuestiones.

Servidor DHCP y caché DNS

Una vez instalado dnsmasq, haz las siguientes modificaciones en el fichero /etc/dnsmasq.conf:

listen-address=192.168.0.1
bind-interfaces
dhcp-range=192.168.0.2,192.168.0.254,12h
dhcp-option=3,192.168.0.1
dhcp-option=6,192.168.0.1

Este fichero está muy bien documentado con comentarios e incluye ejemplos de todas las posibilidades. Después de realizar las modificaciones reinicia el servicio con:

Router:~# /etc/init.d/dnsmasq restart
Restarting DNS forwarder and DHCP server: dnsmasq.

Simplemente con eso, dnsmasq te da los siguientes servicios:

  • Si configuras los clientes de tu red local para usar DHCP obtendrán una IP del rango 192.168.0.[2-254]
  • Se configuran automáticamente para usar tu Router como pasarela y como DNS.
  • Router cachea todas las peticiones DNS que realicen los clientes y las redirije a los servidores DNS configurados en el /etc/resolv.conf de Router.
  • Dispone de DNS dinámico local. Si los clientes especifican un nombre al hacer su petición DHCP, el resto de los clientes podrán usar ese nombre para resolver su IP.

Además dnsmasq permite asignar IPs fijas (del rango) y nombres dependiendo de la MAC y otro muchas opciones avanzadas.

Nombre público para el Router (opcional)

Puedes configurarlo siguiendo la receta de DNS dinámico público.

Proxy web (opcional)

Por hacer. Una receta sobre squid?

Firewall, proteger los equipos de la red local (opcional)

Ver la Receta de iptables

Servidores en la red local accesibles desde el exterior (opcional)

Ver la Receta de iptables

NAT para IRC y FTP (opcional)

Por hacer. En la receta de iptables?

Guardar la configuración de iptables

Para guardar las reglas activas (las que has ido poniendo hasta ahora) ejecuta:

Router:~# iptables-save > /etc/iptables.up.rules

Y ahora hay que hacer que esa configuración se cargue automáticamente al levantar la interfaz de red principal (la externa). Para ello, edita de nuevo el fichero /etc/network/interfaces para que la entrada de eth0 quede así:

auto eth0
iface eth0 inet dhcp
      pre-up iptables-restore < /etc/iptables.up.rules

Referencias

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Excelente

Exelente la guia, va al pelo!

Imagen de magmax

VPN

Otra cosa chula sería montar una VPN. En cuanto pueda, me lío y escribo el manualillo.

--
In a world without Walls and Fences, ¿who needs Windows or Gates?

Imagen de nacho

Petición

No sabía muy bien dónde poner esto. Creo que aquí irá bien. Básicamente, este comentario es una petición de receta.

Desde hace unos meses (Febrero, creo) no puedo utilizar MI cuenta de correo electrónico de la UCLM desde mi casa. ¿La razón? Que en mi casa no tengo una dirección IP de la red de la UCLM. Me parece un poco tonto dar cuentas de correo y restringir su uso a cuando estés en un ordenador "de la universidad".

Ya sé que se puede utilizar a través de webmail, pero... en fin, que me gustaría poder seguir disfrutando de mi cuenta con mi cliente de POP3, como hasta ahora.

¿Solución? Crear un túnel IP para obtener una dirección de la uni. Si alguien se ha peleado con estas cosas, agradecería una receta. Laughing out loud

-------------
Nacho

-------------
Nacho

Imagen de david

Creo

que los alumnos no pueden crear túneles VPN desde fuera de la red de la UCLM (pero no conozco el motivo). De todos modos inténtalo y nos cuentas. El método es simple:

# apt-get install uclmwifi
# uclmvpn

PS: Cleto se va a mosquear cuando lea tu "petición"...

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Imagen de nacho

No sabía

Tenía el uclmwifi instalado, obviamente, pero no sabía que tenía un script aparte para hacer VPN.

Lo he probado y no rula. Dice:

# uclmvpn
*** Checking parameters... OK
*** Checking connection... OK
*** Creating pptp tunnel...........FAIL
WARNING - It's probably you haven't permissions for external connections to UCLM-VPN.
See /var/log/vpn-mppe.log for more details.

Que es básicamente, lo que ya me habías advertido. Por cierto, Cleto, me permito corregirte un poco: deberías cambiar el "It's probably you haven't..." por "Probably you don't have..."
Aunque si lo que quieres es decir literalmente "es probable que...", entonces deber poner: "It's likely that you don't have"

De todas formas, una recetilla sobre túneles (así en general, no hace falta que sea con la UCLM) no estaría mal... Sticking out tongue
-------------
Nacho

-------------
Nacho

Imagen de brue

Ó ...

Probably you have no...

--
PPC: int main(){long foo=1649571173;puts(&foo);}
x86: int main(){long foo=1702187618;puts(&foo);}

brue

Imagen de david

dnsmasq en el PC

Una receta para configurar dnsmasq como caché DNS en el host (si no lo tienes en el router)

n/d
Imagen de david

Servidor casero

La gente de LinuxAlbacete ha dado un cursito muy interesante sobre cómo montar un servidor casero con Debian GNU/Linux. Es algo muy parecido a lo que Tobías tenía preparado para la pasada party de Noviembre y que no se dio por falta de tiempo.

Pero lo bueno es que se han currado un manual para seguir la instalación y configuración paso a paso (muy masticadito) que está disponible en PDF y en ODT

Creo que esta documentación da para varias recetas pues se trata de un documento de 60 páginas, aunque también es cierto que viene explicado todo con mucho detalle (incluida la instalación). Por el momento puede servir para complementar esta receta con los temas que dejé un poco colgados colgados, como el firewall. Y aprovechando la coyuntura… ¿Quién se anima a hacer recetas de…?

  • squid
  • exim (o postfix)
  • PHP
  • L.A.M.P.
  • MLdonkey
  • etc

Enhorabuena desde aquí a la gente de Albacete por su trabajo y dedicación. A ver si los de por aquí nos ponemos las pilas… Smiling

n/d