Manual para implantacion de un gateway sobre linux con un modem ADSL

Versión 0.3

 

Edgar Gómez García

Dudas, comentario sugerencias: [email protected]

 

 

1.- Introducción.

 

Este manual explica de una forma breve la implantación de un gateway sobre linux para conectarse a internet por medio de un enlace ADSL. En este manual no se explica el funcionamiento de ADSL en este caso en particular Infinitum de Prodigy. Este documento solo trata sobre los requerimientos, instalación y configuración, ademas de algunos conceptos básicos de seguridad necesarios para mantener la red interna o Intranet fuera de posibles riesgos que lleva una conexión continua a Internet. ADSL es básicamente una conexión PPP sobre Ethernet, por lo que se requiere un cliente especial para esta conexión y el soporte para el protocolo PPPoE.

 

2.- Requerimientos del sistema.

 

Para la elaboración de este manual se utilizo RedHat 7.1 (tambien funcionaria en 7.2), un disco de 6 Gigas (mucho espacio con un disco de 2 seria suficiente), el procesador es Pentium a 90 Mhz y 16 M de RAM, y 2 tarjetas de red ethernet 3com. Seria bueno que verificara el hardware en la HCL de redhat, o la distribución que piense utilizar.

 

Por la parte de software se requiere que nuestra caja linux maneje NAT, tambien ya tenga instalado el cliente PPPoE, RH7.1 Ya trae el cliente de Roaring Penguin, que es muy bueno y estable y facil de configurar, el cliente como tal no requiere cambios en el kernel pero si tu maquina va a ser un gateway habra que soportar NAT e iptables.

 

3.- Instalación.

 

Se necesitaran los discos de RH, estos los puede conseguir de www.redhat.com, si su maquina acepta boot desde cdrom solo inserte el disco 1 e inicio el proceso se instalación en caso de no ser asi necesitara crear 1 disco de arranque con las utilerias que vienen en el disco 1. Solo necesita ejecutar el programa rawcopy indicar la imagen boot.img y el destino a:\ . Para mayor información sobre este proceso revise:

 

http://www.redhat.com/docs/manuals/linux/RHL-7.1-Manual/install-guide/s1-steps-install-cdrom.html#S2-STEPS-MAKE-DISKS

 

Usted empieza a instalar RedHat de forma normal, seleccionando Custom para poder seleccionar los paquetes de nuestra preferencia.

 

Usted no necesitara interfaz grafica ni soporte para windows. Unicamente seleccione los grupos de paquetes que le permitiran trabajar sobre el kernel, utilerias de red como lynx telnet, etc, y lo necesario para poder compilar. Recomiendo seleccionar el desarrollo de kernel para tener el codigo fuente. Puede seleccionar la caja de ?Select Individual Packages?, esto para que usted seleccione con mayor libertad lo que necesita y lo que no.

 

4.- Configuración.

 

En este punto usted ya podra hincar sesiones en linux como root y empezaremos con la configuración de las tarjetas de red.

 

La configuración tipica es la siguiente:

 

eth0 conectada al modem ADSL (speed touch de alcatel)

eth1 conectada a la red internet

 

Si usted utiliza tarjetas 3com necesitara cargar el modulo 3c95x. Otras tarjetas requieren otros modulos.

 

Es necesario revisar el Linux IP Masquerade HOWTO el punto 3.2 la pagina es:

http://tldp.org/HOWTO/IP-Masquerade-HOWTO/ y revisar los puntos que se explican, no creo necesario rescribir esta parte. Sera necesario conceptos básicos sobre la modificación y compilación del kernel si necesitas mayor información revisa el HOWTO del kernel.

 

Pasos resumidos.

Bajar la ultima versión del kernel de www.kernel.org.

Bajar la ultima versión de iptables de http://netfilter.samba.org/

 

Se procede a descomprimirlos con tar.

$ tar -xjvf linux-2.4.18.tar.bz2

$ tar -xjvf iptables-1.2.x.tar.bz2

 

Dentro del directorio de iptables se ejecuta el siguiente comando:

$ make pending-patches KERNEL_DIR=/usr/src/kernel/linux

$ make KERNEL_DIR=/usr/src/kernel/linux

$ make install KERNEL_DIR=/usr/src/kernel/linux

 

Despues de realizado esto, se procede a configurar el kernel

$ cd /usr/src/linux

$ make menuconfig

 

Para la configuración es necesario ir a esta pagina: http://en.tldp.org/HOWTO/IP-Masquerade-HOWTO/ipmasq-compiling3.1.html.

 

Después de configurar tu kernel ejecuta el siguiente comando

$ make dep; make clean; make bzImage; make modules; make modules_install

 

Este proceso... en la maquina donde estoy tardo mas de 1 hora... recomiendo hacer otras actividades... como leer documentación de iptables para configurar adecuadamente esta maquina como ?proxy? o al menos direccionamiento de puertos para que puedan poner una servidor de web u otra cosa.

 

Después que el kernel se compilo es necesario escribirlo en el lilo.

 

 

 

 

 

En este punto tu caja ya soportara NAT y solo tendremos que configurar las tarjetas de red, a continuación muestro el script que utilizo, este se llama desde /etc/rc.d/rc.local para distribuciones de redhat, puedes modificar este archivo usando vi.

 

*******************************

# script para enmascarar la red

# eth0 esta hacia el modem

# eth1 esta hacia la red lan

 

#damos de alta eth1 con 192.168.1.254

#ifconfig eth0 0.0.0.0 down

ifconfig eth0 0.0.0.0 down up

ifconfig eth1 192.168.1.254 up

modprobe ipt_MASQUERADE

iptables -F

iptables -t nat -F

iptables -t mangle -F

 

# al final de la siguiente linea se escribe la ip que regresa cuando

# hacemos ipconfig ppp0 (la primer ip)

 

# si fuera ip stattica

#iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 200.67.147.183

#dinamica <- infinitum maneja ip?s dinamicas o estaticas en mi caso es dinamica.

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

echo 1 > /proc/sys/net/ipv4/ip_forward

# para dial-up ppp0

 

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT

#esta opcion no permite salir paquetes

#iptables -P INPUT DROP

iptables -P INPUT ACCEPT

iptables -A FORWARD -i eth0 -o eth0 -j REJECT

 

# para ver como esta la tabla escribimos:

# iptables -t nat ?L

*****************************

 

eth0 no debe tener IP, ya que esta interfaz esta conectada al MODEM.

eth1 debe tener la una ip fija, regularmente se utiliza 254 para gateway si utilizas un firewall revisa tu configuración de modo que nadie salga directamente por el gateway.

ppp0 es el MODEM, cuando se realice la conexión podras ver este dispositivo.

 

El siguiente punto es instalar el cliente PPPoE. Si seleccionaste este cliente en la instalación de RH7.1 no sera necesario instalarlo, en caso contrario ve a www.roaringpenguin.com/pppoe, lo bajas y lo instalas. En la pagina hay información de la instalación. Posiblemente necesitas escribir este comando:

 

$ rpm ?Fvh rp-pppoe-3.3-1.i386.rpm

 

Este cliente ya tiene scripts que te ayudaran a este proceso, se puede hacer manualmente. A continuación muestro el archivo /etc/ppp/pppoe.conf que tengo y funciona correctamente:

 

*****************************

 

#***********************************************************************

#

# pppoe.conf

#

# Configuration file for rp-pppoe. Edit as appropriate and install in

# /etc/ppp/pppoe.conf

#

# NOTE: This file is used by the adsl-start, adsl-stop, adsl-connect and

# adsl-status shell scripts. It is *not* used in any way by the

# "pppoe" executable.

#

# Copyright (C) 2000 Roaring Penguin Software Inc.

#

# This file may be distributed under the terms of the GNU General

# Public License.

#

# $Id: pppoe.conf,v 1.12 2001/01/01 20:20:35 dfs Exp $

#***********************************************************************

 

# When you configure a variable, DO NOT leave spaces around the "=" sign.

 

# Ethernet card connected to ADSL modem

ETH='eth0'

 

# ADSL user name. You may have to supply "@provider.com" Sympatico

# users in Canada do need to include "@sympatico.ca"

# Sympatico uses PAP authentication. Make sure /etc/ppp/pap-secrets

# contains the right username/password combination.

# For Magma, use [email protected]

USER='tu_nombre_de_usuario'

 

# Bring link up on demand? Default is to leave link up all the time.

# If you want the link to come up on demand, set DEMAND to a number indicating

# the idle time after which the link is brought down.

DEMAND=no

#DEMAND=300

 

# Obtain DNS server addresses from the peer (recent versions of pppd only)

USEPEERDNS=no

 

### ONLY TOUCH THE FOLLOWING SETTINGS IF YOU'RE AN EXPERT

 

# How long adsl-start waits for a new PPP interface to appear before

# concluding something went wrong. If you use 0, then adsl-start

# exits immediately with a successful status and does not wait for the

# link to come up. Time is in seconds.

#

# WARNING WARNING WARNING:

#

# If you are using rp-pppoe on a physically-inaccessible host, set

# CONNECT_TIMEOUT to 0. This makes SURE that the machine keeps trying

# to connect forever after adsl-start is called. Otherwise, it will

# give out after CONNECT_TIMEOUT seconds and will not attempt to

# connect again, making it impossible to reach.

CONNECT_TIMEOUT=0

 

# How often in seconds adsl-start polls to check if link is up

CONNECT_POLL=6

 

# Character to echo at each poll. Use PING="" if you don't want

# anything echoed

PING="."

 

# File where the adsl-connect script writes its process-ID.

# Three files are actually used:

# $PIDFILE contains PID of adsl-connect script

# $PIDFILE.pppoe contains PID of pppoe process

# $PIDFILE.pppd contains PID of pppd process

CF_BASE=`basename $CONFIG`

PIDFILE="/var/run/$CF_BASE-adsl.pid"

 

# Do you want to use synchronous PPP? "yes" or "no". "yes" is much

# easier on CPU usage, but may not work for you. It is safer to use

# "no", but you may want to experiment with "yes". "yes" is generally

# safe on Linux machines with the n_hdlc line discipline; unsafe on others.

SYNCHRONOUS=no

 

# Do you want to clamp the MSS? Here's how to decide:

# - If you have only a SINGLE computer connected to the ADSL modem, choose

# "no".

# - If you have a computer acting as a gateway for a LAN, choose "1412".

# The setting of 1412 is safe for either setup, but uses slightly more

# CPU power.

CLAMPMSS=1412

#CLAMPMSS=no

 

# LCP echo interval and failure count.

LCP_INTERVAL=20

LCP_FAILURE=3

 

# PPPOE_TIMEOUT should be about 4*LCP_INTERVAL

PPPOE_TIMEOUT=80

 

# Firewalling: One of NONE, STANDALONE or MASQUERADE

FIREWALL=NONE

 

# Any extra arguments to pass to pppoe. Normally, use a blank string

# like this:

PPPOE_EXTRA=""

 

# Rumour has it that "Citizen's Communications" with a 3Com

# HomeConnect ADSL Modem DualLink requires these extra options:

# PPPOE_EXTRA="-f 3c12:3c13 -S ISP"

 

# Any extra arguments to pass to pppd. Normally, use a blank string

# like this:

PPPD_EXTRA=""

 

 

DEVICE=ppp0

BOOT=no

 

***********************************

Si no deseas configurarlo manualmente, ejecuta el script

 

adsl-setup

 

Mayor información sobre el cliente pppoe en www.roaringpenguin.com/pppoe.

 

Lo unico que necesitas hacer seria darlo de alta en /etc/rc.d generalmente el roaringpenguin lo hace, y el archivo se encuentra en /etc/rc.d/init.d/adsl en redhat.

 

 

5.- Mantener la conexión continua.

 

En el caso particular, Infinitum de Telmex (México), es un servicio que se cae si la conexión no se usa, se puede configurar el cliente de adsl para que cuando se requiera se conecte, o mantenga la conexión activa siempre. De cualquier forma, lo configure para mantener la conexión activa y como no se utilizaba por mas de 10 minutos infinitum nos desconecta, por lo que decidi hacer un pequeño evento continuo con crontab. El proceso es el siguiente:

 

$ crontab ?e

 

Este comando abre el archivo (script) de eventos personal , y agregamos las siguientes lineas:

 

SHELL=/bin/bash

PATH=/sbin:/bin/usr/sbin:/usr/bin

HOME=/

 

#run-parts

*/5 * * * * /bin/ping 200.33.146.193 -c 3

 

"crontab.15939" 18L, 562C written

crontab: installing new crontab

$

 

Y con eso doy 3 pings cada 5 minutos al dns de infinitum, y el servicio se mantiene por dias!.

 

 

 

6.- Ligas

 

http://www.redhat.com

http://www.linuxdoc.org/HOWTO/Masquerading-Simple-HOWTO/faq.html

http://www.roaringpenguin.com/pppoe/how-to-connect.txt

http://www.roatingpenguin.com/pppoe

http://www.linuxdoc.org/HOWTO/IP_Masquerade-HOWTO

http://www.linuxdoc.org/HOWTO/DSL_HOWTO

 

 

7.- Contribuciones

 

Javier Gómez Sierras [email protected], por su colaboración en la optimización del cron.

 

Hosted by www.Geocities.ws

1