Configuración de una puerta de enlace en Debian GNU/Linux Mario Chirinos Colunga Aurea, Desarrollo Tecnológico aurea-dt.com 12 de octubre de 2009 Resumen Este documento describe como configurar una maquina con Debian/GNU Linux para utilizarla como puerta de enlace utilizando los servicios DDNS, DHCP y NAT. Índice 1. Introducción 1 2. Configuracion de las interfaces 2 3. Configuracion DNS 3 4. Configuracion del servidor DHCP 4 5. Switch 6 6. Enrutador y pared de fuego 7 1. Introducción Una puerta de enlace (Gateway) es un punto en la red que funciona como entrada hacia otra red. La puerta de enlace permite interconectar redes con protocolos y arquitecturas diferentes a todos los niveles de comunicación. La puerta de enlace permite dotar a las máquinas de una red local (LAN) de un acceso hacia una red exterior, generalmente realizando para ello operaciones de traducción de direcciones IP (NAT: Network Address Translation). Esta capacidad de traducción de direcciones permite enmascarar las direcciones IP (IP Masquerading), para dar acceso a Internet a los equipos de una red de área local compartiendo una única conexión a Internet, y por tanto, una única dirección IP externa. En este documento se describe como configurar una maquina con Debian/GNU Linux como puerta de enlace o servidor proxy/NAT. En la configuración se utilizan dos tarjetas de red, un servidor DNS dinámico DCHP y un servidor proxy; 1 Figura 1: Diagrama de red 24-bit Block (/8 prefix, 1 x A) 20-bit Block (/12 prefix, 16 x B) 16-bit Block (/16 prefix, 256 x C) Inicio 10.0.0.0 172.16.0.0 192.168.0.0 Fin 10.255.255.255 172.31.255.255 192.168.255.255 Direcciones 16,777,216 1,048,576 65,536 Figura 2: Rangos para uso en redes locales asignados por la IANA El diagrama de conexión de para esta puerta de enlace se muestra en la figura 1. El documento esta estructurado de la siguiente manera: La sección §1 describe como configurar las interfaces de red externa e interna de la puerta de enlace; En la sección §2 se explica como instalar y configurar un servidor DDNS; La sección §3 explica como instalar y configurar un servidor DHCP; En la sección §4 se muestra como configurar un enrutador inalámbrico para usarlo como switch y punto de acceso; Finalmente la sección §5 contiene la configuración para enrutar paquetes de la red interna a la red externa y ası́ crear la puerta de enlace. 2. Configuracion de las interfaces La maquina que servirá como puerta de enlace debe de tener al menos dos tarjetas de red (NIC) instaladas, una para conectarse a la red exterior (la internet mediante un módem ADLS por ejemplo) y una o mas para la red local. A cada tarjeta de la red local se le debe asignar una dirección IP que la identifique. En este documento nos referiremos estas interfaces como: interfaz de red externa e interfaz de red interna, respectivamente. La IANA (Internet Assigned Numbers Authority) ha reservado las direcciones IP de la figura 2 para uso en redes locales. Aunque la direccion de red 127.0.0.0/8 esta dentro del área de la clase A, fue diseñada para funcionar como dispositivo de lazo cerrado (loopback ), por lo que no puede ser asignada a una red. Si el equipo que va a ser usado como puerta de enlace no esta conectado 2 # The l o o p b a c k network i n t e r f a c e auto l o i f a c e l o i n e t loopback # I n t e r f a z p r i m a r i a . Conectada a i n t e r n e t . auto eth0 i f a c e e t h 0 i n e t dhcp # I n t e r f a z de r e d s e c u n d a r i a . Conectada a l a r e d l o c a l auto eth1 i f a c e eth1 i n e t s t a t i c address 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255 network 192.168.2.0 p o s t −up / e t c / network / i f −up . d/ m y f i r e w a l l Figura 3: Archivo de configuración /etc/network/interfaces. directamente a internet, probablemente el equipo se encuentra dentro de una red local creada por un módem/enrutador. El enrutador (router) probablemente ha tomado la dirección 192.168.0.1 o 192.168.1.254 y haya asignado a la interfaz red externa(eth0) alguna otra dirección IP dentro del rango del enrutador, i.e. 192.168.1.X. Las direcciones X.X.1.0 y X.X.1.255 son reservadas como numero de red (network number) y dirección de transmisión (broadcast address) respectivamente. La tarjeta de red interna (eth1) estará conectada a la red local mediante un switch o hub. A esta interfase se le asigna manualmente una dirección IP fija, en el caso de este documento guı́a la dirección IP de la interfaz eth1, IPeth1 , sera IPeth1 = 192.168.2.1. La configuración de las interfases de red se encuentra en el archivo /etc/network/interfaces, la figura 3 muestra como debe ser configuradas las dos interfaces. Despues de cambiar la configuracion la interfaces pueden ser reiniciadas mediante el comando sudo sudo /etc/init.d/networking restart. 3. Configuracion DNS De forma similar a un directorio telefónico un servidor DNS (Domain Name System) permite buscar a una terminal en la red por su nombre (hostname) y obtener su dirección IP. Cuando visitamos un sitio web, realmente estamos accesanso a la dirección IP del servidor web de este sitio, aun que hayamos introducido el nombre del dominio. En el fondo tu computadora contacta al servidor DNS para obtener la dirección IP que corresponde al servidor web del sitio. Es por esto que en la configuración TCP/IP (Transmission Control Protocol / Internet Protocol) de tu computadora se debe especificar la dirección IP de uno o dos servidores DNS. En este documento configuraremos un serviudor DNS para resolver nombres de dominio dentro de una red local. El servidor DNS mas usado es BIND (Berkeley Internet Name Domain), el cual se obtiene instalando el paquete bind9. La configuración principal de BIND se encuentra en el archivo: /etc/bind/named.conf el cual debe incluir al final la linea: include /etc/bind/named.conf.local";. Esta linea incluye un archivo de cofiguraciones adicionales sin que el archivo de configuracion principal tenga que ser modificado. El archivo de configuración incluido es: /etc/bind/named.conf.local, en el se especifican las zonas de 3 // // Do any l o c a l c o n f i g u r a t i o n h e r e // // C o n s i d e r a d d i n g t h e 1918 z o n e s h e r e , // o r g a n i z a t i o n // i n c l u d e ” / e t c / b i n d / z o n e s . r f c 1 9 1 8 ” ; i f t h e y a r e n o t u s e d i n your #a l l o w dns u p d a t e s from l o c a l h o s t w i t h key ” rndc−key ” i n c l u d e ” / e t c / b i n d / r n d c . key ” ; controls { i n e t 1 2 7 . 0 . 0 . 1 a l l o w { l o c a l h o s t ; } k e y s { ” rndc−key ” ; }; #d e f i n e s l a n . aurea zone ” lan . aurea ” { type m a s t e r ; f i l e ”db . l a n . a u r e a ” ; a l l o w −update { key ” rndc−key ” ; }; }; }; #d e f i n e s our l o c a l s u b n e t 1 9 2 . 1 6 8 . 2 . 0 / 2 4 z o n e ” 2 . 1 6 8 . 1 9 2 . i n −addr . a r p a ” { type m a s t e r ; // n o t i f y no ; f i l e ”db . 2 . 1 6 8 . 1 9 2 ” ; a l l o w −update { key ” rndc−key ” ; } ; }; Figura 4: Archivo de configuración /etc/bind/named.conf.local. búsqueda directa (zone "lan.aurea") e inversa (zone "2.168.192.in-addr.arpa") y la localización del archivo de configuración de cada una de estas zonas. La figura 4 muestra el archivo de configuración para la red local 192.168.2.0 y nombre de dominio lan.aurea. Los dos archivos de configuracion de las zonas de busqueda /var/cache/bind/db.lan.aurea y /var/cache/bind/db.2.168.192 se muestran en la figura 5 y 6. El comando named-checkzone {zonename} {filename} permite verificar si los archivos de zona estan libres de errores; Con el comando /etc/init.d/bind9 restart se puede reiniciar el servidor DNS para aplicar los cambios hechos en los archivos de configuracion. Es nesesario cambiar el propietario del directiorio en donde se encuentran los achivos de zona para que BIND pueda escribir en ellos; Esto se realiza con el siguiente comando: chown bind. /var/cache/bind. 4. Configuracion del servidor DHCP El servicio DHCP (Dynamic Host Configuration Protocol) permite a los anfitriones (host) obtener automáticamente la configuración de red desde un servidor en vez de tener que configurar manualmente cada anfitrión en la red. Las computadoras configuradas para ser clientes DCHP no tienen control sobre los ajustes que reciben del servidor DHCP y la configuración es trasparente para el usuario de la computadora. Para instalar el servidor DHCP se debe contar con el paquete dhcp3-server, El archivo de configuración DCHP por defecto es /etc/dhcp3/dhcpd.conf y en el archivo /etc/default/dhcp3-server se especifica a que interfaces se da servicio DHCP. En la figura 7 se muestra la configuración básica DHCP para nuestra red local. Para nuestra configuracion el archivo /etc/default/dhcp3-server debe de contener la linea INTERFACES 4 ; ; f o r w a r d Zone f i l e ; for lan . aurea $TTL 1h @ IN SOA ns . l a n . a u r e a . 2009092401 1d 1d 4w 1h ) @ IN NS @ IN A @ IN MX ns IN A ; Time To L i v e s e r v e r . lan . aurea . ( ; serial ; s l a v e r e f r e s h ( 1 day ) ; s l a v e r e t r y t i m e i n case o f a problem ( 1 day ) ; s l a v e e x p i r a t i o n t i m e ( 4 weeks ) ; minimum c a c h i n g t i m e i n case o f f a i l e d l o o k u p s ns . l a n . a u r e a . 192.168.2.1 10 ns . l a n . a u r e a . 192.168.2.1 Figura 5: Archivo de configuración /var/cache/bind/db.lan.aurea. ; ; ; r e v e r s e Zone f i l e for lan . aurea $TTL 1h @ IN SOA ns . l a n . a u r e a . 2009092401 1d 1d 4w 1h ) @ IN NS @ IN A 1 IN PTR ; Time To L i v e s e r v e r . lan . aurea . ( ; serial ; s l a v e r e f r e s h ( 1 day ) ; s l a v e r e t r y t i m e i n case o f a problem ( 1 day ) ; s l a v e e x p i r a t i o n t i m e ( 4 weeks ) ; minimum c a c h i n g t i m e i n case o f f a i l e d l o o k u p s ns . l a n . a u r e a . 192.168.2.1 ns . l a n . a u r e a . Figura 6: Archivo de configuración /var/cache/bind/db.2.168.192. 5 authoritative ; ddns−update−s t y l e interim ; i n c l u d e ” / e t c / b i n d / r n d c . key ” ; # Use what key i n what zone zone lan . aurea . { primary 1 2 7 . 0 . 0 . 1 ; key ” rndc−key ” ; } #Standard DHCP i n f o o p t i o n domain−name ” l a n . a u r e a ” ; o p t i o n domain−name−s e r v e r s 1 9 2 . 1 6 8 . 2 . 1 ; d e f a u l t −l e a s e −t i m e 6 0 0 ; max−l e a s e −t i m e 7 2 0 0 ; log−f a c i l i t y l o c a l 7 ; # DNS z o n e s t o u p d a t e s u b n e t 1 9 2 . 1 6 8 . 2 . 0 netmask 2 5 5 . 2 5 5 . 2 5 5 . 0 { range 1 9 2 . 1 6 8 . 2 . 1 0 1 9 2 . 1 6 8 . 2 . 2 0 0 ; option routers 1 9 2 . 1 6 8 . 2 . 1 ; z o n e 2 . 1 6 8 . 1 9 2 . i n −addr . a r p a . { primary 1 9 2 . 1 6 8 . 2 . 1 ; key ” rndc−key ” ; } zone lan . aurea . { primary 1 9 2 . 1 6 8 . 2 . 1 ; key ” rndc−key ” ; } } Figura 7: Archivo de configuración /etc/dhcp3/dhcpd.conf. = .eth1", la cual indica que el servidor DCHP escucha a la interfaz eth1 para proporcionar el servicio DHCP. Notas Al final de la instalación del paquete dhcp3-server se observa un mensaje de error, esto puede ser confuso pero es normal e irrelevante. Para aplicar los cambios hechos en los archivos de configuración DHCP se utiliza el comando /etc/init.d/dhcp3-server restart. 5. Switch Para completar la red local necesitamos conectar un switch o un punto de acceso a la interfaz de red eth1 para poder conectar mas de un anfitrión a la red, como muestra la figura 1. Es mas común contar ya con un enrutador inalámbrico que con un switch o un hub. Los enrutadores pueden ser configurados para funcionar como switch o punto de acceso. Para esto se debe dejar libre el puerto WAN/Internet y conectar eth1 a uno de los puertos del entrutador al igual que las demás computadoras que se conecten a la red local; Desactivar el servicio DHCP; Cambiar la dirección del enrutador a 192.168.2.2 o alguna otra direccion dentro de la red local 192.168.2.X y desactivar la pared de fuego del entrutador. 6 6. Enrutador y pared de fuego Para conectar nuestra red local a internet, necesitamos crear una puerta de enlace o servidor porxy. Para que el equipo pueda trabajar como una puerta de enlace y enrutar paquetes desde la red local al exterior y de regreso, se necesita habilitar la redirección de direcciones IP (IP forwarding), a esto también se le conoce como NAT (Network Address Translation) o enmascaramiento de IP. También es necesario crear una pared de fuego, para restringir ciertas conexiones y ası́ proteger nuestra red. El guión (script) mostrado en la figura 8 provee de una configuración básica para no permitir conexiones de entrada hacia eth1, permitir paquetes de salida desde la red local vı́a eth0 y permitir que las conexiones establecidas regresen. La palabra ESTABLISHED en la regla que envia paquetes de la red externa (Internet) a la interna (LAN) limita el trafico de entrada a aquel que es una respuesta a una conexcion previa mente establecida desde la red interna. La regla con la palabra MASQUERADE es la que se encarga de realizar la traduccion o enmascarmamiento de direcciones IP. Para que el guión de la puerta de enlace se ejecute al iniciar el sistema se deben: Colocar el guión en /etc/init.d/gateway.sh. Cambiar los permisos del archivo para que sea ejecutable desde root, chmod 755 /etc/init.d/gateway.sh. Crear una liga al archivo desde el directorio de nivel de ejecución dos, ln -s /etc/init.d/gateway.sh /etc/rc2.d/S95gateway. Los archivos en /etc/rc2.d/ son nombrados utilizando la convencion: [K|S]+ nn + [string], en donde K = kill, S = start, nn ∈ [1, 2, ..., 99] y string es un nemónico que identifica la función del archivo; Estos archivos son ejecutados en orden alfabético y cada archivo es un vinculo simbólico que apunta al un archivo en el directorio /etc/init.d/. 7 #! / b i n / sh INTIF=” e t h 1 ” EXTIF=” e t h 0 ” echo ” Loading r e q u i r e d s t a t e f u l /NAT k e r n e l modules . . . ” / s b i n /depmod −a / s b i n / modprobe i p t a b l e s / s b i n / modprobe i p c o n n t r a c k / s b i n / modprobe i p c o n n t r a c k f t p / s b i n / modprobe i p c o n n t r a c k i r c / s b i n / modprobe i p t a b l e n a t / s b i n / modprobe i p n a t f t p echo echo echo echo echo ” E n a b l i n g IP f o r w a r d i n g . . . ” ”1” > / proc / sys / net / ipv4 / i p f or w a r d ”1” > / proc / sys / net / ipv4 / ip dynaddr ” E x t e r n a l i n t e r f a c e : $EXTIF” ” E x t e r n a l i n t e r f a c e IP a d d r e s s echo ” Loading proxy s e r v e r i s : $EXTIP” rules . . . ” # C l e a r i n g any e x i s t i n g r u l e s and s e t t i n g d e f a u l t p o l i c y i p t a b l e s −P INPUT ACCEPT i p t a b l e s −F INPUT i p t a b l e s −P OUTPUT ACCEPT i p t a b l e s −F OUTPUT i p t a b l e s −P FORWARD DROP i p t a b l e s −F FORWARD i p t a b l e s −t n a t −F # FWD: Allow a l l c o n n e c t i o n s OUT and o n l y e x i s t i n g and r e l a t e d ones IN i p t a b l e s −A FORWARD − i $EXTIF −o $INTIF −m s t a t e −−s t a t e ESTABLISHED,RELATED −j ACCEPT i p t a b l e s −A FORWARD − i $INTIF −o $EXTIF −j ACCEPT # E n a b l i n g SNAT (MASQUERADE) f u n c t i o n a l i t y on $EXTIF i p t a b l e s −t n a t −A POSTROUTING −o $EXTIF −j MASQUERADE echo −e ” Proxy s e r v e r r u l e l o a d i n g c o m p l e t e \n\n” Figura 8: Archivo de configuración /etc/init.d/gateway.sh. 8