TÍTULO: Cómo construir un encaminador (router) DSL
VERSIÓN LFS: Todas
AUTOR: Florin Boariu <florin@bnv-bamberg.de>
TRADUCTOR: Proyecto LFS-ES
SINOPSIS:
Esta receta explica cómo montar tu propia puerta de enlace
(gateway) PPPoE/DSL. O mejor dicho: Explica cómo lo hice _yo_ y asumo
que tu podrás hacer lo mismo ;)
RECETA:
Necesitarás tres cosas:
o Un sistema Linux con dos tarjetas de red (NICs) configuradas
o Un núcleo (kernel) capaz de manejar PPP y PPPoE (PPP-over-Ethernet
(PPP-sobre-Ethernet))
o Un demonio PPP capaz de manejar PPPoE y DoD (Dial-on-Demand
(Conexión-bajo-demanda))
El sistema Linux
----------------
Comprueba el libro LFS, lo explica claramente. Lo que no explica es
cómo añadir una segunda tarjeta de red (NIC): No hay ningún problema,
asegúrate de haber compilado el controlador (driver) correcto y añade
las siguientes líneas a tu /etc/inet.d/network (o a cualquiera que sea
tu guión-de-arranque-de-red).
#
# estas lineas estarán presentes si ya tienes funcionando una interfaz
# de red en los ordenadores de tu red, esta es la dirección del
# encaminador(router)/puerta de enlace(gateway).
#
ifconfig eth0 10.1.1.200
route add net 10.1.1.0 netmask 255.255.255.0
#
# añade esta linea para configurar la segunda interfaz
#
ifconfig eth1 10.10.10.254
El núcleo (kernel)
------------------
Debes activar las siguientes opciones en el núcleo (bien como 'm', 'módulo',
o como 'y', 'si')
CONFIG_NETDEVICES=y
CONFIG_PPP=y
CONFIG_PPPOE=y
No necesitas activar ningún tipo de soporte de compresión
(compression/deflate) para PPP, ya que PPPoE solamente funciona con la
compresión desactivada (al menos aquí en Alemania -- donde tu vives
puede que no sea así).
Y no olvides asegurarte de que están cargados los módulos necesarios,
en el caso de que hayas compilado algo como módulo.
Por supuesto, el núcleo debe tener los controladores (drivers) que
necesiten tus tarjetas de red activados, por ejemplo:
CONFIG_ETHERNET=y
CONFIG_NET_PCI=y
CONFIG_8139TOO=y
Como siguiente paso debes activar en tu núcleo el soporte para
encaminamiento (routing). No estoy muy seguro de todas las opciones,
pero con estas me funcionó a mi (núcleo 2.4, ipv4). Algunas se que son
necesarias, otras lo supongo y probablemente algunas sobren.
Si alguien sabe de esto, por favor que me mande sus correcciones.
En cualquier caso, estas son las opciones que utilizo:
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_NETLINK=y
CONFIG_RNETLINK=y
CONFIG_NETLINKDEV=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_FWMARK=y
CONFIG_IP_ROUTE_NAT=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_TOS=y
CONFIG_NET_IPIP=y
CONFIG_SYN_COOKIES=y
# Netfilter Configuration (configuración del filtrado)
<bien... He marcado todo, parte dentro del núcleo, parte como módulos.
Tu hazlo pensando en tus necesidades. Sin embargo, la opción
CONFIG_IP_NF_TARGET_BALANCE causa algunos problemas de compilación en
el núcleo 2.4.3, así que quizás prefieras desactivarla>
El demonio PPPoE con Conexión-bajo-demanda (Dial-on-Demand)
-----------------------------------------------------------
Para la conexión-bajo-demanda necesitas pppd-2.4.1 parcheado con el
parche pppoe4. Me ha sido imposible encontrar este parche en la red,
lo conseguí porque me lo envió su autor: Michal Ostrowski
<mostrows@styx.uwaterloo.ca>. Nota: pppd-2.4.0-pppoe3 no sirve.
Funciona para un uso _normal_ de pppoe, pero no para
conexión-bajo-demanda (dial-on-demand).
Hasta donde yo conozco (2001-07-01) no se puede descargar de la red el
parche pppoe4-patched para pppd. La única manera de conseguirlo es
escribir un correo electrónico a Michal. Como alternativa, puedes echar
un vistazo a http://www.linuxfromscratch.org/ -- puede que esté
disponible para su descarga mientras tanto...
Tan sólo tienes que instalar el nuevo pppd y escribir las siguientes
líneas en tu fichero /etc/ppp/options:
#
# /etc/ppp/options: <corta_aquí>
#
plugin /usr/lib/pppd/plugins/pppoe.so
demand
connect /bin/true
ipcp-accept-remote
ipcp-accept-local
# el tiempo de espera sin hacer nada (idle time) en segundos -- quizás quieras ajustar esto
idle 600
noipdefault
defaultroute
user <tunombredeusuario@tuproveedor.com>
hide-password
noaccomp
nopcomp
nocrtscts
lcp-echo-interval 10
lcp-echo-failure 3
lock
nodetach
#
# /etc/ppp/options: </corta_aquí>
#
También necesitarás un fichero /etc/ppp/pap-secrets, con una clave
valida para <tunombredeusuario@tuproveedor.com>.
El siguiente paso es iniciar el demonio como administrador (root)
ejecutando:
# pppd eth0
Desde ahora, deberías ser capaz de realizar una conexión con un simple
ping a un ordenador remoto:
# ping 195.30.20.19
Si no funciona es que has hecho algo mal. Puedes encontrar la solución
en el PPP-CÓMO o en la documentación que acompaña al pppd-2.4.1...
¡buena suerte!
Si funciona, el enlace se terminará automáticamente si estas sin hacer
nada durante el tiempo especificado en la opción idle. Entonces debes
ser capaz de conectar de nuevo mediante un ping. No te rías, hay una
razón para que te diga esto: la versión 2.4.0 de pppd parcheada con
pppoe no conecta la segunda vez. ¡_Necesitas_ pppd-2.4.1-pppoe4 o una
versión posterior!
Ahora puede que te interese iniciar el demonio pppd desde algún sitio
de /etc/init.d/ (/etc/rcX.d/).
Realizar el encaminamiento
--------------------------
Tu máquina puede conectarse a Internet, pero se necesita algo más para
tener un encaminador (router). Tienes que instalar iptables
(http://netfilter.samba.org/). Su instalación me parece bastante
curiosa. No da ningún problema cuando es el típico software del que
esperas que los de -- Estoy contento de haber adivinado la
configuración correcta, pero estoy muy lejos de comprender en
profundidad como funciona este software, así que básicamente estas
sólo ... :-/ Hay una cosa que te puedo decir: Necesitaras iniciar
el patch-o-matic ('make patch-o-matic') y aplicar el parche TCPMSS.
Esto modifica el MTU (unidad máxima de transferencia) de los clientes,
pero realmente nunca he entendido lo que hace.
Cuando hayas conseguido la instalación ejecuta lo siguiente:
--------<corta-por-aquí>-----------
#
# prepara el núcleo para redireccionamiento IP (ip forwarding) y
# direcciones dinámicas
#
/bin/echo "1" /proc/sys/net/ipv4/ip_forward
/bin/echo "1" /proc/sys/net/ipv4/ip_dynaddr
#
# acepta los paquetes FORWARD provenientes de 10.x.x.x a través de
# eth0 (de dentro de la red interna) o a través de ppp0 (de fuera de
# la red interna) así como los paquetes de entrada de eth0 (red
# interna)
#
/usr/sbin/iptables -A FORWARD -i eth0 -s 10.1.1.0/24 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i ppp0 -s 10.1.1.0/24 -j ACCEPT
/usr/sbin/iptables -A INPUT -i eth0 -s 10.1.1.0/24 -j ACCEPT
#
# establece la política de desechar (DROP) los restantes paquetes
# INPUT y FORWARD
#
/usr/sbin/iptables -P INPUT DROP
/usr/sbin/iptables -P FORWARD DROP
#
# activa el enmascaramiento (masquerading) para todos los paquetes
# que vengan de 10.x.x.x
#
/usr/sbin/iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j MASQUERADE
#
# establece el tamaño correcto al MTU de todas las interfaces. Suelen
# ser mas pequeñas de lo usual, porque pppoe hace más encapsulamiento.
# Si no lo haces, un ping al resto del mundo funcionará, pero el resto
# de conexiones TCP (como FTP o HTTP) no lo harán. Daniel
# Roethlingsberger explica que también se puede hacer al nivel de
# interfaz (prueba 'ifconfig mtu XXX'), pero no hay nada malo en
# hacerlo así.
#
/usr/sbin/iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j \
TCPMSS --clamp-mss-to-pmtu
-----------</corta-por-aquí>-------------
Esto te dará soporte para un encaminamiento básico. Si tienes problemas
y/o quieres profundizar en el conocimiento de iptables (si estas
interesado en establecer un cortafuegos (firewall) en tu encaminador
(router)) lee el iptables-HOWTO:
http://www.linuxgrill.com/anonymous/fire/netfilter/iptables-HOWTO.html.
También puedes buscar en http://www.linuxdoc.org/ por la palabra clave
'iptables' para encontrar documentos más avanzados sobre sobre el funcionamiento
como encaminador (router) y/o como servidor puente intermedio transparente
(transparent proxy) ;)
¡Buena suerte!
Florin Boariu <florin@bnv-bamberg.de>
|