| Santiago González Herrero, Agosto 1999 |
Nota Importante: Este documento es una chuleta para un administrador de redes habituado a trabajar con Linux. En ningún caso pretende ser un tutorial. Como se puede comprobar hay muchos aspectos que no se tocan (compilación del kernel, del puerto serie, módem, nociones TCP/IP, etc). Para un manual más exhaustivo, te vuelvo a remitir a las magníficas guías que constituyen los HOWTO y sus traducciones al castellano en INSFLUG, así como el trabajo de LuCAS en su traducción del LDP al castellano.
Simplificando, si un router está conectado a las redes A y B, y por el interfaz de A llega un paquete destinado a un host que reside en la red B, el router recogerá el paquete de la red A como suyo y lo pondrá en la red B donde llegará a su destino.
En este documento, comenzaré explicando cómo conectar un sistema Linux a Internet mediante PPP, para luego explicar cómo configurar este equipo para que actúe de router para una red privada.
Nota: Propongo una solución en la que existen diferentes proveedores de acceso y que puedan realizar la conexión, no sólo root, sino los usuarios pertenecientes a un grupo concreto. Por otro lado, al utilizar diferentes proveedores, prefiero usar un único servidor de nombres en el mismo línux, para lo que instalo un DNS sólo caché (caching-nameserver). Esto simplifica el uso de conexiones de diferentes proveedores y me permite (quizá lo ponga en otro documento) inventarme un dominio privado para mi Intranet (útil también en redes con muchos equipos en las que sincronizar los ficheros hosts sería laborioso).
Kernel 2.2.5 ppp-2.3.7 caching-nameserver-6.0
debug
lock
noipx
connect /etc/ppp/conectar
crtscts
modem
passive
noipdefault
defaultroute
asyncmap a0000
/dev/modem
115200
Nota: /dev/modem debe ser un enlace simbólico al puerto serie utilizado, en mi caso /dev/ttyS1
debug
envía información de depuración, mediante syslog (facility
daemon).
lock
crea ficheros de bloqueo al estilo UUCP para el puerto serie
noipx
evita el protocolo IPX sobre la conexión PPP
connect
fichero usa ese fichero como script de conexión
crtscts
indica que se utilice control de flujo hardware (RTS/CTS) en el puerto
serie
modem indica
que se utilicen las líneas de control del módem.
passive
indica que se espere por una trama LCP si no contestan el intento de negociación
noipdefault
hace que se solicite una dirección IP al otro extremo explícitamente
defaultroute
provoca que ese interfaz sea nuestra ruta por defecto una vez establecido
asyncmap
establece el mapa para configurar caractéres de control en la transmisión
/dev/modem
indica qué puerto serie utilizar (es un enlace simbólico
a /dev/ttySx)
115200
es la velocidad de comunicación del puerto serie
Su contenido será:
usuario1@proveedor1
* clave1 *
usuario2@proveedor2
* clave2 *
usuario3
* clave3 *
Nota, usuario1 y 2 son a través
de Infovía, usuario3 tiene nodo directo.
#!/bin/sh
/usr/sbin/chat -v "" "AT&FM0" OK ATDT985158000
CONNECT ""
search proveedor1.es
nameserver 195.143.112.1
nameserver 195.143.112.2
Cuando se tienen diferentes proveedores, hay que cambiar el contenido de este fichero cada vez que se establece la conexión mediante un proveedor distinto. Una solución que no penaliza en exceso la velocidad del acceso a Internet es configurar un servidor de nombres de sólo caché. Esto es un DNS local que no resuelve ningún dominio y que todas sus consultas las hace mediante servidores raíz.
Para ello se instala el paquete (en RedHat) caching-nameserver-version.rpm que hará que nosotros seamos nuestro propio DNS, simplificando la conexión a Internet.
# chmod u+s /usr/sbin/pppd
Y para restringir el uso de la conexión a ciertos usuarios, se incluyen éstos en un grupo, por ejemplo dip, y se cambian los propietarios a los ficheros contenidos en el directorio /etc/ppp para que pertenezcan al usuario root y al grupo dip.
# chown root.dip /etc/ppp/*
En RedHat 6.0 es necesario incluir un enlace simbólico en /usr/local/bin para acceder a /usr/sbin/pppd, ya que los usuarios no tienen en su path el directorio en que reside pppd.
# ln -s /usr/sbin/pppd /usr/local/bin/pppd
y para detener la conexión, se ejecuta el script ppp-off. Este se encuentra en /usr/doc/ppp-2.3.7/scripts:
# cp /usr/doc/ppp-2.3.7/scripts/ppp-off /usr/local/bin
Sólo nos queda la llamada al pppd para efectuar la conexión. Como tenemos diferentes proveedores, uso un alias para cada cuenta de acceso a internet. En /etc/profile incluyo los alias:
alias internet.usuario1='pppd user usuario1@proveedor1'
alias internet.usuario2='pppd user usuario2@proveedor2'
Fijarse que en el fichero /etc/ppp/options no está incluida la opción user, ya que se la paso en la llamada a pppd. Por tanto, para conectar a internet con la cuenta del proveedor2, cualquier usuario perteneciente al grupo dip, puede hacer:
$ internet.usuario2
Esto permite que un conjunto de máquinas accedan de forma transparente a Internet escondidas tras una pasarela, que aparece como mel único sistema que utiliza Internet.
Para activar el enmascaramiento IP en un sistem Linux basta con compilar el kernel (2.0.x ó 2.2.x) con las siguientes opciones activadas (algunas puede que cambien en tu versión de kernel).
* Prompt for development and/or incomplete code/drivers
CONFIG_EXPERIMENTAL
* Enable loadable module support
CONFIG_MODULES
* Networking support
CONFIG_NET
* Network firewalls
CONFIG_FIREWALL
* TCP/IP networking
CONFIG_INET
* IP: forwarding/gatewaying
CONFIG_IP_FORWARD
* IP: firewalling
CONFIG_IP_FIREWALL
* IP: masquerading
CONFIG_IP_MASQUERADE
* IP: ipportfw masq support
CONFIG_IP_MASQUERADE_IPPORTFW (recomendable)
* IP: ipautofw masquerade support
CONFIG_IP_MASQUERADE_IPAUTOFW (opcional)
* IP: ICMP masquerading
CONFIG_IP_MASQUERADE_ICMP (recomendable)
* IP: always defragment
CONFIG_IP_ALWAYS_DEFRAG (muy recomendable)
* Dummy net driver support
CONFIG_DUMMY (recomendable)
Una vez compilado e instalado el nuevo kernel, insertar los módulos necesarios en el arranque para poder utilizar determinados protocolos con IP-Masquerade:
En mi caso, incluyo lo siguiente en el script /etc/rc.d/rc.local
insmod ip_masq_irc
insmod ip_masq_ftp
insmod ip_masq_raudio
insmod ip_masq_vdolive
insmod ip_masq_cuseeme
y la reglas necesarias para activar el
IP-Forward mediante IP-Masquerade
Para los kernel 2.0.x se utiliza el programa
ipfwadm:
ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.0.0/16 -D 0.0.0.0/0
Para los kernel 2.2.x se utiliza el nuevo ipchains:
ipchains -P forward DENY
ipchains -A forward -s 192.168.0.0/16 -j
MASQ
Nota1: En el IES Valliniello, tenemos 6 segmentos de red, por lo que si queremos usar una sola regla, nuestras direcciones son 192.168.0.0/16, si tan sólo se dispone de un segmento de red, sea 192.168.25.0, el conjunto de direcciones se denotaría: 192.168.25.0/24.
Nota2: El programa ipfwadm/ipchains nos permite un filtrado de paquetes en función de muy diversos criterios. Es muy recomendable establecer unas reglas de filtrado en el ordenador que hace de router para evitar desagradables accesos desde Internet hasta nuestra red privada. El documento "Configuración de un cortafuegos en Linux" nos ayuda a establecer una protección genérica bastante eficiente.
Nota3: Una conexión más eficiente a Internet se consigue añadiendo un servidor Proxy-caché para acelerar el acceso a la WWW y descargas FTP. Ver Squid, WWWOffle y Apache. Un índice muy completo de servidores proxy lo tienes en FreshMeat.
| Santiago González
Herrero, Agosto 1999 |