CONEXIÓN EN RED

Anuncio
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
CONEXIÓN EN RED
4.1 RUTEO DE IP
4.1.1 Introducción
El Protocolo de Internet (IP), es un protocolo no orientado a conexión y es no confiable. Esto
significa que los paquetes que el genera no siempre llegan a destino, o bien pueden llegar en un
orden distinto al que fueron conformados (incluso pueden llegar con errores). Lo que sí asegura, es
que en caso de que los paquetes lleguen, lo hagan al destino indicado.
Y de esto se trata el ruteo o encaminamiento (routing), que lo podríamos definir como el
procedimiento para que los paquetes generados en un computador, lleguen al destino correcto.
Obviamente, si las máquinas origen y destino están en la misma red, entonces el ruteo es sencillo. De
otro modo, IP tiene que decidir por que rutas (o caminos) enviarlos hacia su destino.
La decisión por dónde enviar los paquetes, es un proceso implementado por un dispositivo
denominado ruteador o encaminador (“router”). El mismo está conectado a más de una red, y es
capaz de recibir paquetes originados en una de esas redes que están destinado hacia otra, y
encaminarlo adecuadamente. Es el elemento indispensable para hacer llegar un paquete originado en
una red con destino en otra red.
Cabe revisar también el concepto de gateway, originalmente asignado a una máquina que convertía
de un protocolo a otro, por ejemplo, Ethernet a PPP. Actualmente la diferencia entre router y
gateway es borrosa, y en general se utilizan ambos términos indistintamente.
4.1.2 Como se envian los paquetes IP sobre Ethernet
Vamos a aclarar el mecanismo por el cual un paquete IP es enviado hacia su destino. Cada vez que
un host decide enviar un paquete hacia una dirección IP determinada, compara las redes origen y
destino valiéndose de la máscara de red configurada.
Si la dirección destino pertenece a la red del host que origina el paquete, el paso siguiente es buscar,
mediante un protocolo llamado ARP (“Address Resolution Protocol”), la dirección física (también
llamada “MAC address”) del host destino. Finalmente, se utiliza esta dirección para generar la trama
Ethernet que saldrá a través de la interfase de red hacia su destino.
Si en cambio la dirección de destino no pertenece a la red origen, hay que tomar la decisión de
ruteo. Supongamos que se resuelve rutear el paquete a través de un host (que debe pertenecer a la
Módulo IV: Conexión en Red
1
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
red origen). En este caso, el protocolo ARP buscará la dirección física del router, y la trama ethernet
será destinada hacia él.
No está de más aclarar que no se cambia la dirección IP destino de un paquete ruteado, pues
de hacerlo, el router no sabría luego por dónde reenviar el paquete, que ciertamente no está
destinado hacia él, sino sólo encaminado a través de él.
4.1.3 Ruteo estático
El camino que un paquete recorre desde su origen hasta su destino, es llamado ruta. Cada máquina
puede tener una o más rutas definidas estáticamente para cada destino.
Figura 1: Ejemplo de una Inter-red.
En la figura 1 vemos 4 redes Ethernet, A, B, C y D que constituriría una especie de backbone.
También hay 4 hosts de Linux funcionando como routers, llamados L1, L2a, L2b y L3, cuya
función principal es conectar las redes A, B y C con el backbone. L2a tiene la particularidad de
poseer una interfase conectada a la red C.
En Linux, el paquete iproute2 nos brinda las herramientas necesarias para el ruteo. Contiene un
comando, ip, con el que haremos todas las operaciones necesarias. Más información sobre este
paquete se encuentra en http://snafu.freedom.org/linux2.2/docs/ip-cref/ipcref.html.
Por ejemplo, si quisiéramos ver la tabla de ruteo del router L3, deberiamos ejecutar:
L3:~ # ip route show
Módulo IV: Conexión en Red
2
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
10.3.0.0/16 dev eth0 proto kernel scope link src 10.3.0.1
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.3
El resultado nos indica que hay dos interfases físicas activas en el router, eth0 y eth1. Muestra las
redes a las que pertenecen (10.3.0.0/16 y 192.168.0.0/24 respectivamente), y las direcciones de
origen que tendrán los paquetes que salgan por esas interfases. En otras palabras, este router “sabe”
cómo comunicarse con hosts en las dos redes a las que está directamente conectado.
El parámetro proto kernel indica que las rutas fueron establecidas por el kernel durante la
autoconfiguración (cuando se levantaron las interfases). Las rutas que sean agregadas a mano,
acusarán proto static.
El parámetro scope link indica que la dirección sólo tiene sentido dentro de esta conexión.
Veamos ahora la tabla de ruteo del host LC5, dentro de la red C:
LC5:~ # ip route show
10.3.0.0/24 dev eth0
proto kernel
scope link
src 10.3.0.5
Lo que se puede observar es que tiene sólo una interfase de red activa, y que no podrá enviar
paquetes fuera de la red C a la cual pertenece. Si quisieramos comunicarla con cualquier máquina en
la red B, deberíamos agregar una ruta a través de L2a:
LC5:~ # ip route add 10.2.0.0/16 via 10.3.0.2 dev eth0 proto static
LC5:~ # ip route show
10.3.0.0/16 dev eth0 proto kernel scope link
10.2.0.0/16 via 10.3.0.2 dev eth0 proto static
src 10.3.0.5
Con esta ruta LC5 podrá enviar exitósamente paquetes a cualquier host de la red B, por ejemplo, a
LB9. No hay que olvidar que para que LB9 pueda enviar respuestas a LC5 de ser necesario, debe
contar con un mecanismo para rutear los paquetes de vuelta.
Con la información que contamos hasta ahora, una forma de asegurarse de que LB9 sea capaz de
enviar paquetes hacia LC5 es configurándole una ruta hacia la red C, a traves de L2a.
Una ruta más larga, a traves de L2b o incluso L2a, saliendo hacia el backbone y entrando a la red C
por L3 también sería una opción. Configuremos L2b para este fin:
L2b:~ # ip route show
10.2.0.0/16 dev eth0 proto kernel scope link src 10.2.0.2
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.21
L2b:~ # ip route add 10.3.0.0/16 via 192.168.0.3 proto static
L2b:~ # ip route show
Módulo IV: Conexión en Red
3
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
10.2.0.0/16 dev eth0 proto kernel scope link src 10.2.0.2
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.21
10.3.0.0/16 via 192.168.0.3 dev eth1 proto static
No fue necesario especificar dev eth1 dado que el kernel puede en general determinar este
parámetro por sí mismo. Podría ser útil al contar con más de una interfase configuradas en la misma
red; en este caso, el kernel elegiría siempre la primera (la ethx con el menor valor de x posible) para
todas las rutas que salgan por la red, y lo deseable puede ser distribuirlas estáticamente entre las
interfases disponibles.
Ahora, las máquinas de B tienen una ruta a través de la pasarela, router o gateway L2b para
responder a las de C.
Devolvamos nuestra atención a L2a, el caso más particular, dado que posee 2 caminos para
alcanzar C. Supongamos que originalmente, L2a no estaba conectado a C; a medida que transcurrió
el tiempo, el tráfico entre B y C se hizo muy intenso y comenzó a verse limitado por la velocidad de
la conexión al backbone. Por diversos motivos, los diseñadores optaron por realizar la conexión que
ahora une L2a con C.
A continuación, dirigieron todo el tráfico entre B y C para que se realice por L2a, configurando este
router y todos los hosts de B y C a tales fines. Pero el tiempo siguió pasando, y el tráfico,
aumentando. Gracias a la característica particular del tráfico entre estas redes de no ser muy sensible
al retardo, tenemos la opción de enviar la mitad a traves del backbone. Para hacer esto, utilizaremos
el balance de carga que iproute2 nos permite:
L2a:~ # ip route show
10.2.0.0/16 dev eth0 proto kernel scope link src 10.2.0.1
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.2
10.3.0.0/16 dev eth2 proto kernel scope link src 10.3.0.2
L2a:~ # ip route del 10.3.0.0/16
L2a:~ # ip route add 10.3.0.0/16 proto static \
nexthop via 10.3.0.2 dev eth2 weight 1 \
nexthop via 192.168.0.3 dev eth1 weight 1
L2a:~ # ip route show
10.2.0.0/16 dev eth0 proto kernel scope link src 10.2.0.1
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.2
10.3.0.0/16 proto static
nexthop via 10.3.0.2 dev eth2 weight 1
nexthop via 192.168.0.3 dev eth1 weight 1
Lo primero que hicimos fue eliminar la ruta que el kernel crea por defecto para la interfase eth2,
especificando lo mínimo indispensable para la identificación de dicha ruta en la tabla.
Módulo IV: Conexión en Red
4
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Luego se creó la nueva ruta, la palabra clave nexthop permite especificar varios caminos para una
misma ruta, y weight es un parámetro de preferencia. De este modo, la comunicación entre las
redes a traves de L2a será balanceada en partes iguales por ambas rutas, la directa y la que pasa
por L3.
Lo que resta sería configurar las rutas de los hosts de B y C para que usen L2a al intercomunicarse.
Esto es una tarea trivial para las máquinas en B, pero no para las de C, que tienen que observar el
balance de carga en el sentido inverso, por lo que veremos un ejemplo de estas:
LC5:~ # ip route show
10.3.0.0/16 dev eth0 proto kernel scope link
10.2.0.0/16 via 10.3.0.2 dev eth0 proto static
src 10.3.0.5
LC5:~ # ip route del 10.2.0.0/16
LC5:~ # ip route add 10.2.0.0/16 proto static \
nexthop via 10.3.0.2 dev eth0 weight 1 \
nexthop via 10.3.0.1 dev eth0 weight 1
LC5:~ # ip route show
10.3.0.0/16 dev eth0 proto kernel scope link src 10.3.0.5
10.2.0.0/16 proto static
nexthop via 10.3.0.2 dev eth0 weight 1
nexthop via 10.3.0.1 dev eth0 weight 1
No hay que olvidar configurar L3 para que pueda manejar el tráfico de C hacia B:
L3:~ # ip route add 10.2.07.0/16 via 192.168.0.2 proto static
Con esto quedaría configurado los hosts Linux actuando como router para la interred mostrada en la
figura 1.
4.1.4 Default Gateway
Vamos a destacar una particularidad del esquema de ruteo estático visto anteriormente. Llevemos la
atención al hecho de que hay que configurar las rutas estáticas en cada host de la red que las
necesite. En ciertos casos, principalmente en redes pequeñas, donde no se desea dar comunicación
entre redes más que lo necesario y no se preven modificaciones en la topología, puede ser un
método práctico.
Si, por el contrario, la red es grande, con un gran número de hosts que necesitan interconexión, o se
desea tener la posibilidad de hacer cambios rápidos en el ruteo, es más conveniente definir un
default gateway (gateway por defecto).
Módulo IV: Conexión en Red
5
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Este router, pasarela o gateway contiene las rutas de manera centralizada, haciendo innecesario el
mantenimiento de todas las rutas en cada uno de los hosts, consecuentemente aliviando el trabajo de
los administradores y el fastidio de los usuarios a la hora de hacer cambios y resolver problemas.
Cuando un host no encuentre una ruta adecuada para enviar un paquete, lo enviará al router por
defecto, quien se encargará de encaminarlo hacia su destino según su conocimiento de las rutas de la
red.
En nuestro esquema de redes, esto se traduce en 3 default gateways, L1 para los hosts en la red
A, L2a para B, y L3 para C. Veamos una posible configuración del más sencillo, L1:
L1:~ # ip route show
10.1.0.0/16 dev eth0 proto kernel scope link src 10.1.0.1
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.1
L1:~ # ip route add 10.2.0.0/16 via 192.168.0.21 proto static
L1:~ # ip route add 10.3.0.0/16 via 192.168.0.3 proto static
L1:~ # ip route show
10.1.0.0/16 dev eth0 proto kernel scope link src 10.1.0.1
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.1
10.2.0.0/16 via 192.168.0.21 dev eth1 proto static
10.3.0.0/16 via 192.168.0.3 dev eth1 proto static
En esta topología es posible encaminar el tráfico hacia la red C tanto por L2a como por L3. El
tráfico hacia B se rutea por L2b para no congestionar más el vínculo del backbone a L2a.
Ahora hay que hacer saber a L2a, L2b y L3 sobre cómo llegar a la red A, y a partir de ese
momento, cualquier host de las 3 redes podrá comunicarse con cualquier otro con sólo tener una
ruta a su default gateway. Veamos LC5 de nuevo:
LC5:~ # ip route show
10.3.0.0/16 dev eth0 proto kernel scope link src 10.3.0.5
10.2.0.0/16 proto static
nexthop via 10.3.0.2 dev eth0 weight 1
nexthop via 10.3.0.1 dev eth0 weight 1
LC5:~ # ip route del 10.2.0.0/16
LC5:~ # ip route add default via 10.3.0.1
LC5:~ # ip route show
10.3.0.0/16 dev eth0
default via 10.3.0.1
proto kernel
dev eth0
scope link
src 10.3.0.5
Pero resulta que aquí hemos perdido el balance de carga en un sentido. Entonces, configuremos L3:
L3:~ # ip route show
Módulo IV: Conexión en Red
6
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
10.3.0.0/16 dev eth0 proto kernel scope link src 10.3.0.1
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.3
10.2.0.0/16 via 192.168.0.2 dev eth1 proto static
L3:~ # ip route del 10.2.0.0/16
L3:~ # ip route add 10.2.0.0/16 proto static \
nexthop via 10.3.0.2 dev eth0 weight 1 \
nexthop via 192.168.0.2 dev eth1 weight 1
L3:~ # ip route show
10.3.0.0/16 dev eth0 proto kernel scope link src 10.3.0.1
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.3
10.2.0.0/16 proto static
nexthop via 10.3.0.2 dev eth0 weight 1
nexthop via 192.168.0.2 dev eth1 weight 1
Y con esto obtenemos casi la misma configuración que teníamos antes de usar los default
gateways. Es bueno saber que la estructura de routers por defecto puede anidarse. Por ejemplo,
sería posible (aunque probablemente no bueno) definir a L2a como default gateway de la red D,
mantener todas las reglas ahí (quitarlas de los demás routers), y que L1, L2b y L3 le reenvíen el
tráfico que no sea local.
Otra opción sería que L1 de pronto contase con conexión a Internet. Para que las máquinas de B y
C puedan “salir” por L1, habría que establecerla como default gateway de los otros routers.
4.1.5 Reglas de ruteo
Este esquema de default gateway parece uniformizar o generalizar lo que antes estaba
particularizado. Por ejemplo, supongamos que anteriormente un subconjunto de máquinas de la red
A tenía la ruta para llegar a C a través de L2a. Ahora eso desapareció. Una solución sería configurar
esas rutas nuevamente en esos hosts, pero sería un retroceso. Otra solución, es usar reglas de ruteo.
Si hemos configurado el kernel con las opciones “IP: advanced router” e “IP: policy routing” (SuSE
las tiene) podemos crear reglas de ruteo para aplicarlas a casos particulares.
Cuando el kernel necesita tomar una decisión de ruteo, consulta una tabla donde se encuentran las
reglas. Inicialmente, hay tres tablas: local, main y default. La herramienta ip tal cual la
estuvimos utilizando, modifica las dos primeras, al igual que el antiguo comando route (en desuso).
A continuación crearemos nuevas tablas con rutas especiales, y reglas que al cumplirse envíen al
kernel a buscar en estas nuevas tablas, permitiéndonos saltear las rutas generales que uniformizaban
el encaminamiento.
Módulo IV: Conexión en Red
7
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Cuando veíamos las rutas con el comando ip route list, Linux nos estaba mostrando sólo las
que estaban en la tabla main. Ahora ip rule list nos mostrará las demás tablas existentes:
L1:~ # ip rule list
0:
from all lookup local
32766: from all lookup main
32767: from all lookup default
Las tablas pueden ser llamadas por números, o por nombres. Los nombres deben estar en el archivo
/etc/iproute2/rt_tables. Es algo muy conveniente poner nombres a las tablas, pues hacen
más clara la lectura. Crearemos una tabla llamada especiales_A y una regla para solucionar el
problema de las máquinas de la red A que deben llegar a C a través de L2a:
L1:~
L1:~
L1:~
L1:~
#
#
#
#
echo 200 especiales_A >> /etc/iproute2/rt_tables
ip route add 10.3.0.0/16 via 192.168.0.2 table especiales_A
ip rule add from 10.1.250.0/24 table especiales_A
ip route flush cache
El último comando borra el cache de ruteo, lo que obliga a conexiones ya establecidas a ser tratadas
como nuevas.
Tener en cuenta que puede haber tablas sin reglas que apunten a ellas, y que permanecerán cargadas
hasta que las rutas que contienen sean eliminadas. Esto quiere decir que ip rule list puede no
mostrar todas las tablas. Para ver las reglas de todas las tablas hay que usar ip route list
table all.
Para eliminar todas las reglas de una tabla, podemos utilizar ip route flush table nombre.
Pero hay que tener mucho cuidado pues si especificamos la tabla main, el host dejará de rutear
paquetes. Esto podría ser especialmente catastrófico si estamos conectados remotamente.
Mediante el uso de reglas, Linux desarrolla su máximo espectro de ruteo, dado que pueden
configurarse para esperar coincidencias en IP de origen o destino, TOS (Type of Service), interfase
de entrada, y la más amplia de todas, fwmark, que es una marca que iptables puede asociar a un
paquete dentro del host.
4.1.6 Ruteo dinámico
El gran problema con el ruteo estático que aquí se ha descrito, es que si un gateway o enlace falla
en la red, entonces la única manera en que podrá dirigir sus datagramas por otra dirección, si es que
existe, es interviniendo manualmente y ejecutando las órdenes apropiadas. Naturalmente esto es
poco elegante, lento, nada práctico y peligroso. Se han desarrollado varias técnicas para ajustar
automáticamente las tablas de encaminamiento en el caso de fallos en la red donde hubiera caminos
Módulo IV: Conexión en Red
8
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
alternativos. Todas estas técnicas se agrupan de manera no muy oficial bajo la definición protocolos
de ruteo dinámico.
Consideremos a modo de ejemplo la red mostrada en la figura 2:
Figura 2: Red de ejemplo para Protocolos de Ruteo Dinámicos
Tenemos tres routers L1, L2 y L3. Cada uno da servicio a un segmento Ethernet con una red IP de
clase C y además se conecta con uno de los otros encaminadores a traves de un vínculo o enlace
PPP para formar un triángulo entre ellos.
Debería estar claro que la tabla de encaminamiento de L1 podría ser algo como:
L1:~ # ip route show
192.168.1.0/24 dev
10.0.0.2 dev ppp0
10.0.0.3 dev ppp1
192.168.2.0/24 via
192.168.3.0/24 via
eth0 proto kernel scope link src 192.168.1.1
proto kernel scope link src 10.0.0.1
proto kernel scope link src 10.0.0.101
10.0.0.2 dev ppp0 proto static
10.0.0.3 dev ppp1 proto static
Esto funcionaría bien hasta que el enlace entre los encaminadores L1 y L2 fallase. A partir de ese
momento, las máquinas del segmento Ethernet de L1 (red A) no podrán alcanzar a las del segmento
Ethernet de L2 (red B) porque sus datagramas serán dirigidos al enlace ppp0 de L1 que está mal.
Podrían seguir comunicándose todavía con las máquinas que están detrás de L3, y las de la red C
con las de B, porque el enlace entre L2 y L3 aún está intacto.
Entonces, si L1 puede hablar con L3 y éste con L2, ¿por qué no puede L1 encaminar sus
datagramas para L2 a través de L3 y dejar que éste los encamine hacia la L2? Para este tipo de
problemas fueron diseñados los protocolos de encaminamiento dinámico. Si cada uno de los routers
L1, L2 y L3 está ejecutando el demonio de encaminamiento, entonces sus tablas deberían ser
ajustadas automáticamente para reflejar el nuevo estado de la red si alguno de los enlaces falla.
Es probable que RIP (“Routing Information Protocol”), junto con OSPF (“Open Shortest Path First
Protocol”) sean los protocolos de ruteo dinámico más comunes en la actualidad. RIP es muy común
Módulo IV: Conexión en Red
9
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
en redes pequeñas, como las redes corporativas pequeñas y medianas. OSPF es más moderno y
más capaz de gestionar grandes configuraciones de red, y está mejor preparado para entornos
donde haya un gran número de caminos posibles a través de la red. Las implementaciones habituales
de estos protocolos son: routed (RIP) y gated (RIP, OSPF y otros). El programa routed suele
venir incluido en las distribuciones de Linux, y si no, estará incluido en el paquete NetKit.
4.1.7 RIP
RIP fue originalmente desarrollado por Xerox y llamado Gateway Info (GWInfo), y luego
evolucionó hacia routed. La razón de su popularidad radica en su simplicidad y en que está
incorporado en el código de encaminamiento del BSD UNIX que constituye la base para muchas
implementaciones de UNIX.
RIP es un protocolo de vector-distancia que envía la tabla de ruteo completa en broadcast a cada
router vecino a determinados intervalos. El intervalo por defecto es de 30 segundos. RIP utiliza el
número de saltos como métrica de las rutas, siendo 15 el número máximo de saltos. Una métrica de
16 significa que la red destino no se puede alcanzar.
El hecho de que use un protocolo de vector-distancia implica que a la hora de elegir una ruta entre
varias posibles, RIP tomará la de menor métrica, esto es, la que pase por menos routers. Hay que
prestar atención a este detalle, porque esta ruta puede no ser la más rápida.
Cada vez que un router reciba un mensaje de otro diciendo que puede alcanzar la red X a un costo
de N saltos, el primero actualizará su tabla de ruteo indicando que puede alcanzar la red X a un
costo de N+1 enviando los paquetes al segundo router.
4.1.7.1 Limitaciones de RIP
RIP no está diseñado para resolver cualquier posible problema de encaminamiento. El RFC 1720
(STD 1) describe estas limitaciones técnicas de RIP como "graves" y el IETF está evaluando
candidatos para reemplazarlo. Entre los posibles candidatos están OSPF("Open Shortest Path First
Protocol" Versión 2) y el IS-IS de OSI IS-IS (ver IS-IS("Intermediate System to Intermediate
System" de OSI)). Sin embargo, RIP está muy extendido y es probable que permanezca sin sustituir
durante algún tiempo. Tiene las siguientes limitaciones:
?
El coste máximo permitido en RIP es 16, que significa que la red es inalcanzable. De esta
forma, RIP es inadecuado para redes grandes (es decir, aquellas en las que la cuenta de
saltos puede aproximarse perfectamente a 16).
Módulo IV: Conexión en Red
10
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
?
RIP no soporta máscaras de subred de longitud variable(variable subnetting). En un
mensaje RIP no hay ningún modo de especificar una máscara de subred asociada a una
dirección IP.
?
RIP carece de servicios para garantizar que las actualizaciones proceden de routers
autorizados. Es un protocolo inseguro.
?
RIP sólo usa métricas fijas para comparar rutas alternativas. No es apropiado para
situaciones en las que las rutas necesitan elegirse basándose en parámetros de tiempo real
tales como el retardo, la fiabilidad o la carga.
?
Convergencia lenta. El algoritmo vector-distancia está diseñado para que todos los routers
compartan su información de encaminamiento regularmente. Eventualmente, todos los
routers deben poseer la misma información. Esto es llamado convergencia.
Desafortunadamente, el algoritmo de RIP es lento para conseguir convergencia,
especialmente cuando la información que debe propagarse es de cambios en la topología. Si
consideramos el peor caso de redes separadas a 15 saltos, con la frecuencia de
actualización por defecto de 30 segundos, tomaría varios minutos en que ambos routers
tengan la misma información.
?
El protocolo necesita utilizar algoritmos especiales para evitar la cueanta hasta infinito (un
lazo de ruteo), lo que limita su operatividad a redes pequeñas. La resolución de la cuenta
hasta infinito se efectúa usando las técnicas split horizon, poisoned reverse y triggered
updates.
De todas maneras, el atractivo de RIP nunca fue su capacidad técnica, sino su sencillez y su amplia
distribución y uso. Para aquellos que usaban RIP tenía más sentido migrar a una nueva versión de
RIP que solucionara algunos problemas de RIP-1 que pasar a un protocolo totalmente distindo. Así
se desarrolló RIP Versión 2 (RIP-2), definido en la RFC 2453 ( Noviembre de 1998).
4.1.7.2 RIP y SuSE
Configurar las máquinas para solucionar el problema con ruteo dinámico usando RIPv2 es más
sencillo que administrar las rutas estáticas. SuSE incluye en el paquete quagga todas las
herramientas necesarias para este propósito. Estas serían, básicamente zebra, que administra las
rutas del kernel, y ripd, el demonio de RIP versiones 1, 2 y 3. También hay demonios para OSPF
2 y 3 y BGPv4.
La arquitectura de Quagga dispone que ripd maneje el protocolo RIP y comunique la información de
rutas a zebra, quien finalmente refleja la topología en el kernel en ejecución.
Módulo IV: Conexión en Red
11
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Los archivos de configuración necesarios, zebra.conf y ripd.conf, se encuentran en
/etc/quagga, y una configuración básica sería la siguiente:
!zebra.conf
!
hostname quagga
password quagga
enable password quagga
log file /var/log/quagga/quagga.log
!ripd.conf
!
hostname ripd
password ripd
enable password ripd
!
router rip
network eth0
!
El primer archivo define el nombre del host y password de la consola de zebra. El segundo hace lo
mismo para ripd, con el adicional de que activa el protocolo RIPv2 en las redes conectadas a la
interfaz eth0.
La consola de ambos “demonios” puede ser accedida por medio del protocolo telnet, en el puerto
especificado por el parámetro --vty_port en la línea de comando al llamar a los programas. Lo
que nosotros veremos es la consola de ripd, y para llegar a ella hará falta editar /etc/init.d/ripd y
agregar el parámetro mencionado en la llamada al demonio, por ejemplo para un puerto elegido
arbitrariamente:
startproc $RIPD_BIN –d --vty_port=2606
Luego, rczebra start && rcripd start para iniciar los demonios. A partir de este momento,
podremos acceder a su consola con telnet localhost 2606. Allí encontraremos una interfaz
similar al IOS de Cisco desde donde se puede controlar ripd.
El demonio de encaminamiento buscará mensajes RIPv2 en eth0 para poder actualizar la tabla de
encaminamiento en el host.
Los puntos importantes relacionados con el encaminamiento dinámico son:
1. Sólo necesita ejecutar un protocolo de encaminamiento dinámico cuando su máquina Linux
tenga la posibilidad de elegir entre múltiples caminos para llegar a un destino.
Módulo IV: Conexión en Red
12
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
2. El demonio de encaminamiento dinámico modificará automáticamente la tabla de
encaminamiento para ajustarla a los cambios en la red.
3. RIP es adecuado para redes de tamaño pequeño y medio.
Para obtener mayor información sobre el encaminamiento dinámico de SuSE, buscar en
http://www.quagga.net.
4.2 T UNELES
4.2.1 Introducción
Un túnel es un vínculo que conecta dos redes de forma transparente desde el punto de vista del
protocolo IP. Los datagramas entran por un extremo, son transportados de alguna forma y salen por
el otro extremo inalterados. En otras palabras, es un método para conectar redes a través de otras
redes.
Son útiles a la hora de interconectar dos redes IP que normalmente no podrían hacerlo, por tener
espacio de direcciones privadas, por ejemplo.
Muchas empresas actualmente utilizan túneles para implementar una VPN (Virtual Private
Network) y de esta manera mantener su red empresarial agrupada y además posibilitar a sus
empleados conectarse a ella desde cualquier parte del mundo como si estuvieran en la oficina.
Los túneles mal configurados, sin embargo, pueden traer muchas complicaciones (y constituir un
riesgo a la seguridad), por lo que hay que ser muy cuidadoso en el momento de la implementación
de esta funcionalidad.
Los túneles incrementan el overhead dado que necesitan un conjunto extra de encabezados IP
(típicamente 20 bytes). Esto implica que si el MTU de las redes es de 1500 bytes, por el túnel sólo
podrán pasar 1480 en un paquete. Esto no necesariamente constituye un problema, pero es un tema
a tener en cuenta.
Este tipo de túneles (también conocido como IP-IP) está soportado en Linux desde sus primeras
versiones (kernel 1.3). Requiere los módulos ipip y new_tunnel. Su configuración es bastante
sencilla. Consideremos el esquema mostrado en la figura 3:
Módulo IV: Conexión en Red
13
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Figura 3: Diagrama para ejemplificar Tuneles IP
Se desea establecer un túnel entre las redes A y B a través de C. Para ello, configuraremos L1 y L2
de la siguiente manera:
L1:~ # ifconfig tunl0 10.0.1.1 pointopoint 172.19.20.21
L1:~ # ip route add 10.0.2.0/24 dev tunl0
L2:~ # ifconfig tunl0 10.0.2.1 pointopoint 172.16.17.18
L2:~ # ip route add 10.0.1.0/24 dev tunl0
Con eso se termina la configuración. Cuando el túnel no sea necesario, hay que deshabilitarlo con
ifconfig tunl0 down en caso de L1.
Las limitaciones de este tipo de túneles es que no se puede hacer broadcast ni hacer pasar tráfico
IPv6 a través de ellos. Tampoco es compatible con otros sistemas operativos o routers.
4.2.3 Túneles GRE
GRE es un protocolo de túnel que fue inicialmente desarrollado por Cisco, y es más versátil que IP
en IP. Por ejemplo, se puede enviar tráfico multicast e IPv6 por un túnel GRE. Es necesario el
módulo ip_gre.
Supongamos tener el mismo esquema visto para los túneles IP en IP, la configuración de L1 y L2,
sería:
L1:~ # ip
ttl 255
L1:~ # ip
L1:~ # ip
L1:~ # ip
tunnel add tunl0 mode gre remote 172.19.20.21 local 172.16.17.18
link set tunl0 up
addr add 10.0.1.1 dev tunl0
route add 10.0.2.0/24 dev tunl0
El primer comando crea un túnel y lo llama tunl0, avisa que se usará el protocolo GRE, que la
dirección remota es 172.19.20.21 (L2), que la dirección local del túnel es 172.16.17.18 (lo que
Módulo IV: Conexión en Red
14
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
permite elegir una entre varias posibles conexiones a la red C) y que establecemos el TTL de los
paquetes en 255.
El segundo comando habilita el funcionamiento del dispositivo tunl0, y el tercero le asigna la
dirección 10.0.1.1.
Finalmente, con la cuarta línea se establece la ruta para alcanzar la red B.
Recíprocamente configuraremos L2:
L2:~ # ip
ttl 255
L2:~ # ip
L2:~ # ip
L2:~ # ip
tunnel add tunl1 mode gre remote 172.16.17.18 local 172.19.20.21
link set tunl1 up
addr add 10.0.2.1 dev tunl1
route add 10.0.1.0/24 dev tunl1
Al momento de retirar el túnel en L2, por ejemplo:
L2:~ # ifconfig tunl1 down
L2:~ # ip tunnel del tunl1
Los túneles GRE son actualmente los más utilizados, dado que constituyen un estándar ampliamente
adoptado fuera de la comunidad Linux.
4.3 CONFIGURACIÓN DE CLIENTES Y SERVIDORES
4.3.1 DNS
El Domain Name System (DNS) o Sistema de Nombres de Dominio, permite asociar a cada
dirección IP uno o más nombres. De esta forma, podemos llamar a los hosts de una manera más
significativa y fácil de recordar, como router1.midominio.com.ar.
Actualmente DNS es una herramienta fundamental para Internet. Basta con ponerse a pensar en
todos los sitios que visitamos cuando navegamos y si recordamos la dirección IP de alguno de ellos.
Si en lugar de escribir http://www.google.com.ar para entrar al famoso buscador tuviéramos que
poner http://216.239.59.104, la navegación por Internet sería un proceso bastante tedioso.
El DNS se basa en un esquema cliente-servidor. Hay servidores que contienen las relaciones las
relaciones entre IPs y nombres, y clientes que las consultan.
El DNS es un sistema jerárquico, un sistema con estructura de árbol. La raíz se escribe como “.” y
se denomina root como es habitual para estructuras en árbol. Debajo hay cierto número de
Dominios de Nivel Superior (Top Level Domains, TLDs), los más conocidos son ORG, COM, EDU
y NET, pero hay muchos más.
Módulo IV: Conexión en Red
15
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Cuando se busca una máquina, la pregunta procede recursivamente en la jerarquía comenzando
desde la raíz. Si queremos localizar la dirección de prep.ai.mit.edu, el servidor de nombres tiene
que empezar preguntando en algún sitio. Comienza mirando en el cache. Si sabe la respuesta, por
tenerla en el cache de antes, responderá de inmediato. Caso contrario eliminará partes del nombre
comenzando por la izquierda, comprobando si sabe algo de ai.mit.edu., después mit.edu.,
después edu. y si no, lo que conoce de “.” es lo que tiene el archivo
/var/lib/named/root.hint. Entonces preguntará al servidor . sobre prep.ai.mit.edu. Este
servidor . desconoce la respuesta, pero ayudará a nuestro servidor a encontrar el camino dando la
referencia sobre donde buscar. Estas referencias le dirigen al servidor de nombres que conoce la
respuesta. Ilustramos eso ahora. +norec significa que dig está preguntando consultas no recursivas
para que la obtengamos nosotros mismos. La otras opciones son para reducir lo que dig genera para
no obtener muchas páginas, y @127.0.0.1 indica que la búsqueda debe realizarse en nuestro
servidor de nombres local.
$ dig +norec +noques +nostats +nocmd google.com.ar @127.0.0.1
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6092
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 9
;; AUTHORITY SECTION:
.
.
.
.
.
.
.
.
.
.
.
.
.
517227
517227
517227
517227
517227
517227
517227
517227
517227
517227
517227
517227
517227
IN
IN
IN
IN
IN
IN
IN
IN
IN
IN
IN
IN
IN
NS
NS
NS
NS
NS
NS
NS
NS
NS
NS
NS
NS
NS
G.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.
;; ADDITIONAL SECTION:
B.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.
603627
603627
603627
603627
603627
603627
603627
603627
603627
IN
IN
IN
IN
IN
IN
IN
IN
IN
A
A
A
A
A
A
A
A
A
192.228.79.201
192.33.4.12
128.8.10.90
192.203.230.10
192.112.36.4
128.63.2.53
192.36.148.17
198.32.64.12
202.12.27.33
Esto es una referencia. Nos devuelve una "Authority section" exclusivamente, sin "Answer section".
Nuestro propio servidor de nombres nos envía a un servidor de nombres. Elijamos uno al azar.
Módulo IV: Conexión en Red
16
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
$ dig +norec +noques +nostats +nocmd google.com.ar. @I.ROOT-SERVERS.NET.
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53386
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 8, ADDITIONAL: 9
;; AUTHORITY SECTION:
ar.
ar.
ar.
ar.
ar.
ar.
ar.
ar.
172800
172800
172800
172800
172800
172800
172800
172800
IN
IN
IN
IN
IN
IN
IN
IN
NS
NS
NS
NS
NS
NS
NS
NS
NS.UU.NET.
NS.RIPE.NET.
NS1.RETINA.ar.
ATHEA.ar.
CTINA.ar.
MERAPI.SWITCH.CH.
UUCP-GW-1.PA.DEC.COM.
UUCP-GW-2.PA.DEC.COM.
;; ADDITIONAL SECTION:
NS.UU.NET.
NS.RIPE.NET.
NS1.RETINA.ar.
ATHEA.ar.
CTINA.ar.
MERAPI.SWITCH.CH.
MERAPI.SWITCH.CH.
UUCP-GW-1.PA.DEC.COM.
UUCP-GW-2.PA.DEC.COM.
172800
172800
172800
172800
172800
172800
172800
172800
172800
IN
IN
IN
IN
IN
IN
IN
IN
IN
A
A
A
A
A
A
AAAA
A
A
137.39.1.3
193.0.0.193
200.10.202.3
200.16.98.2
200.16.97.17
130.59.211.10
2001:620::5
204.123.2.18
204.123.2.19
Estos son los servidores de nombres de .ar.
$ dig +norec +noques +nostats +nocmd google.com.ar @ATHEA.ar
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32770
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 0
;; AUTHORITY SECTION:
google.com.ar.
google.com.ar.
14400
14400
IN
IN
NS
NS
ns.google.com.
ns2.google.com.
Ahora nos envía a los servidores de Google, de donde finalmente obtendremos la respuesta:
$ dig +norec +noques +nostats +nocmd google.com.ar. @ns2.google.com.
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12627
;; flags: qr aa; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4
;; ANSWER SECTION:
google.com.ar.
google.com.ar.
google.com.ar.
1800
1800
1800
IN
IN
IN
A
A
A
216.239.57.99
216.239.39.99
216.239.37.99
;; AUTHORITY SECTION:
Módulo IV: Conexión en Red
17
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
google.com.ar.
google.com.ar.
google.com.ar.
google.com.ar.
345600
345600
345600
345600
IN
IN
IN
IN
NS
NS
NS
NS
ns1.google.com.
ns2.google.com.
ns3.google.com.
ns4.google.com.
;; ADDITIONAL SECTION:
ns1.google.com.
ns2.google.com.
ns3.google.com.
ns4.google.com.
345600
345600
345600
345600
IN
IN
IN
IN
A
A
A
A
216.239.32.10
216.239.34.10
216.239.36.10
216.239.38.10
Podemos ver que hay 3 IPs para el nombre de dominio de google.com.ar. Notar que se puede
agregar el punto final de los nombres de dominio sin problemas. No sucede lo mismo si ponemos un
punto final a la dirección IP; esto llevará a un error.
4.3.1.1 Servidor de Nombres de Dominio
En Linux, el servidor DNS se llama named, y es parte del paquete bind. Como siempre, SuSE
provee el script rcnamed para manejar el servicio desde la consola.
Actualmente hay dos versiones circulando, la 4 (con vulnerabilidades conocidas) y la 8 (sin
vulnerabilidades conocidas). Una forma sencilla de averiguar la versión que estamos utilizando es
fijándonos en la página del manual de named (man named), si al final menciona named.conf, es la
versión 8, si menciona named.boot, es la 4.
La configuración de named se controla desde el archivo /etc/named.conf. A continuación se ve
un extracto de ese archivo con los parámetros más importantes:
options {
# El parámetro directory indica el directorio de trabajo
# del servidor DNS.
directory "/var/lib/named";
# Lista de hasta 3 servidores a los cuales reenviar las consultas
# que no puedan resolverse basándose en las zonas locales.
#forwarders { 192.0.2.1; 192.0.2.2; };
# Habilitar la siguiente línea para dar preferencia al uso
# de los forwarders.
#forward first;
#
#
#
#
El siguiente registro es una lista de las interfases locales
en las cuales el servidor debe escuchar. Opcionalmente se puede
especificar el Puerto. El valor por defecto es
todas las interfases en el puerto 53.
Módulo IV: Conexión en Red
18
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
#listen-on port 53 { 127.0.0.1; };
};
# Las tres siguientes definiciones de zonas no deben ser modificadas.
# La primera es para los servidores raíz, la segunda define este host,
# y la tercera define la búsqueda inverse para este host.
zone "." in {
type hint;
file "root.hint";
};
zone "localhost" in {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in {
type master;
file "127.0.0.zone";
};
# A partir de aquí se pueden inserter registros de zonas para sus
# propios dominios.
Este servidor configurado de esta manera sirve sólo de caché DNS, puesto que no tiene zonas de
dominios particulares. Una prueba de esto la obtenemos buscando nuevamente google.com.ar en
127.0.0.1. Veremos que la respuesta es inmediata porque el resultado está en el caché.
Los forwarders son útiles para ahorrar ancho de banda, pues cuando una consulta es reenviada,
todo el trabajo de la búsqueda recae sobre el otro servidor, mientras el nuestro se comporta como
un cliente DNS ordinario. La diferencia puede ser significativa si estamos usando un módem
telefónico o si el vínculo al exterior está muy cargado y lento.
Cabe destacar que el archivo root.hint especificado para la zona “.” es fundamental para
búsquedas tales como la que hicimos anteriormente, porque contiene las direcciones IP de los
servidores raíz. Es importante que este archivo esté actualizado, pues de nada sirve que contenga las
viejas IPs de los servidores raíz.
Con el comando dig @G.ROOT-SERVERS.NET. . ns > root.hint.nuevo podemos obtener
directamente una versión actualizada. Hay que revisar el archivo para ver que contenga la palabra
NOERROR, y en caso afirmativo, reemplazar el viejo por éste.
La primera verificación de correcto funcionamiento de un servidor de nombres es:
$ dig -x 127.0.0.1 @127.0.0.1
; <<>> DiG 9.2.2 <<>> -x 127.0.0.1 @127.0.0.1
Módulo IV: Conexión en Red
19
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
;;
;;
;;
;;
global options: printcmd
Got answer:
->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36238
flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa.
IN
PTR
;; ANSWER SECTION:
1.0.0.127.in-addr.arpa. 604800
IN
PTR
localhost.
;; AUTHORITY SECTION:
0.0.127.in-addr.arpa.
604800
IN
NS
localhost.
;; ADDITIONAL SECTION:
localhost.
604800
IN
A
127.0.0.1
;;
;;
;;
;;
Query time: 2 msec
SERVER: 127.0.0.1#53(127.0.0.1)
WHEN: Mon Mar 14 11:21:31 2005
MSG SIZE rcvd: 93
Si se obtiene una respuesta similar, es porque está funcionando adecuadamente.
Aunque no sea tan mencionado, un dominio muy importante es in-addr.arpa. También se anida
como los dominios “normales”. in-addr.arpa nos permite obtener el nombre de host cuando
tenemos su dirección. Una cosa importante que tenemos que observar es que las direcciones IP se
escriben en orden inverso en el dominio in-addr.arpa. Si tiene la dirección de una máquina:
192.148.52.43 named procede igual que para el ejemplo de prep.ai.mit.edu: encuentra
servidores arpa.. Busca servidores in-addr.arpa., busca servidores 192.in-addr.arpa.,
busca servidores 148.192.in-addr.arpa., busca servidores52.148.192.in-addr.arpa..
Finalmente busca los registros que necesitamos para 43.52.148.192.in-addr.arpa.. Es un
buen método, aunque la inversión de números puede confundir bastante.
Ahora vamos a definir nuestro propio dominio. Vamos a crear el dominio linux.ldr y definir
máquinas en él.
Para los nombres de dominio no se permiten todos los caracteres en nombres de máquina. Estamos
restringidos a los caracteres del alfabeto inglés: a-z, números 0-9 y el carácter “-“ (guión del medio).
Las mayúsculas y minúsculas son indistintas para el DNS.
Hay que tener un cuidado especial con los puntos al final de los nombres de dominios. Estos no
deben ir en named.conf, pero en los archivos de zona, su ausencia indica que lo escrito es relativo
al dominio declarado. Un error aquí puede ser muy difícil de encontrar.
En primer lugar, hay que declarar la zona en named.conf, para lo cual agregamos al final:
Módulo IV: Conexión en Red
20
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
zone "linux.ldr" {
type master;
file "master/linux.ldr";
};
Ahora, hay que crear el archivo de la zona, que será /var/lib/named/master/linux.ldr:
;
; Fichero de zona para linux.ldr
;
; El fichero de zona completo
;
$TTL 3D
@
IN
SOA
ns.linux.ldr. hostmaster.linux.ldr. (
2003150201
; numero de serie
8H
; refresco
2H
; reintento
4W
; expira
1D )
; mínimo
;
TXT
"Linux.LDR, sus consutas DNS"
NS
ns
; Inet Address del SN
NS
ns.sec.ldr.
MX
10 mail
; Relay primario de correo
MX
20 mail.sec.ldr.; Relay secundario de correo
;
localhost
A
127.0.0.1
gw
A
192.168.196.1
ns
A
192.168.196.2
maquina3
A
192.168.196.3
mail
A
192.168.196.4
ftp
A
192.168.196.5
El registro SOA es el preámbulo de todos los archivos de zona y debe haber uno exactamente en
cada archivo de zona. El registro SOA describe la zona, de dónde proviene (una máquina llamada
linux.ldr), quién es el responsable de su contenido ([email protected]), qué versión del
archivo de zona es (Numero de Serie), y otras cosas que tienen que ver con el caché y los
servidores secundarios DNS. Para el resto de los campos (Tasa de Refresco, Tasa de
Reintento, Caducidad para secundario y Tiempo de Validez para Clientes) use los
valores que aparecen aquí para mayor seguridad. Antes de SOA viene una línea obligatoria, la línea
$TTL 3D.
Una vez hecho esto, reiniciamos named para que lea la nueva configuración con rcnamed
restart. Ya podemos probar los resultados con:
$ dig ns.linux.ldr
; <<>> DiG 9.2.2 <<>> ns.linux.ldr
Módulo IV: Conexión en Red
21
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
;;
;;
;;
;;
global options: printcmd
Got answer:
->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56191
flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0
;; QUESTION SECTION:
;ns.linux.ldr.
IN
A
;; ANSWER SECTION:
ns.linux.ldr.
259200
IN
A
192.168.196.2
;; AUTHORITY SECTION:
linux.ldr.
linux.ldr.
259200
259200
IN
IN
NS
NS
ns.sec.ldr.
ns.linux.ldr.
;;
;;
;;
;;
Query time: 1 msec
SERVER: 127.0.0.1#53(127.0.0.1)
WHEN: Mon Mar 14 16:21:48 2005
MSG SIZE rcvd: 81
Y con esto tenemos configurada una zona propia en nuestro servidor DNS.
4.3.1.2 Cliente DNS
No hay un “cliente DNS” para configurar. En general, las aplicaciones utilizan una librería que
provee el sistema operativo. Esta librería (llamada resolver) busca el nombre del dominio local por
defecto, y las direcciones IP de los servidores de nombres en el archivo /etc/resolv.conf.
Nuestro archivo debería contener, mínimamente:
search linux.ldr
nameserver 127.0.0.1
La primera línea establece una lista separada por espacios de hasta 6 dominios (o 256 caracteres)
para agregar en caso de que la resolución falle. Por ejemplo, si ponemos ping maquina3, el primer
intento de resolver fallará, entonces el resolver intentará con maquina3.linux.ldr, que tendrá éxito.
La segunda línea especifica la dirección IP de un servidor de nombre. Pueden haber hasta un
máximo de 3 líneas como esta, para especificar un servidor primario y dos de respaldo.
4.4. NFS
NFS (Network File System) permite acceder a archivos y directorios remotos de la misma forma
que se accedería a ellos si fuesen locales. Esto permite centralizar ficheros en una localización,
mientras se permite su acceso continuo a los usuarios autorizados.
Módulo IV: Conexión en Red
22
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Hay dos versiones de NFS actualmente en uso. La versión 2 de NFS, que tiene varios años, es
ampliamente soportada por muchos sistemas operativos. La versión 3 tiene más características y
mejor performance. SuSE soporta ambas, y por defecto utiliza la 3.
Linux usa una combinación de soporte a nivel de kernel y demonios en continua ejecución para
proporcionar compartición de ficheros NFS, y el soporte NFS debe estar activo en el kernel de
Linux para que funcione.
4.3.1 NFS y portmap
NFS se apoya en las llamadas de procedimientos remotos (RPC) para funcionar. Se requiere
portmap para trazar las peticiones RPC a los servicios correctos. Los procesos RPC notifican a
portmap cuando comienzan, revelando el número de puerto que ellos están monitoreando y el
número de programas RPC que esperan servir. El sistema cliente entonces contacta con el portmap
del servidor con un número de programa RPC particular. Entonces portmap redirecciona al cliente
al número del puerto apropiado para que se comunique con el servicio apropiado.
Como los servicios basados en RPC confian en portmap para hacer todas las conexiones con las
peticiones de clientes entrantes, portmap debe estar disponible antes que cualquiera de esos
servicios comienze. Si, por alguna razón, el servicio portmap inesperadamente se quita, reinicie
portmap y cualquier servicio que estuviera ejecutándose entonces. SuSE nos facilita la interacción
con este servicio por medio de rcportmap.
El servicio portmap revisa los ficheros de accesos de máquinas (/etc/hosts.allow y
/etc/hosts.deny) para controlar a qué sistemas remotos les son permitidos usar servicios
basados en RPC en su máquina. Las reglas de control de acceso para portmap afectarán a todos
los servicios basados en RPC. Alternativamente, puede especificar a cada uno de los demonios
RPC NFS para que sean afectados por una regla de control específica. Las páginas man de
rpc.mountd y rpc.statd contienen información relativa a la sintaxis precisa de estas reglas.
Como portmap proporciona la coordinación entre servicios RPC y los números de puertos
utilizados para comunicarlos, es útil plasmar una imagen de los servicios RPC actuales que están
usando portmap cuando estamos resolviendo algún problema. El comando rpcinfo muestra cada
servicio basado en RPC con su número de puerto, número de programa RPC, versión y tipo de
protocolo (TCP o UDP).
Para asegurarse que los servicios NFS basados en RPC están activos para portmap, rpcinfo
puede ser útil:
# rpcinfo -p nfs.linux.ldr
program vers proto
port
100000
2
tcp
111
100000
2
udp
111
100024
1
udp
1024
100024
1
tcp
1024
Módulo IV: Conexión en Red
portmapper
portmapper
status
status
23
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
100011
100011
100005
100005
100005
100005
100005
100005
100003
100003
100021
100021
100021
1
2
1
1
2
2
3
3
2
3
1
3
4
udp
udp
udp
tcp
udp
tcp
udp
tcp
udp
udp
udp
udp
udp
819
819
1027
1106
1027
1106
1027
1106
2049
2049
1028
1028
1028
rquotad
rquotad
mountd
mountd
mountd
mountd
mountd
mountd
nfs
nfs
nlockmgr
nlockmgr
nlockmgr
La opción -p prueba el portmap de la máquina especificada, o en la máquina local por defecto si
no se especifica ninguna máquina. Otras opciones están disponibles en la página de manual de
rpcinfo.
De la salida anterior, varios servicios NFS pueden verse ejecutándose. Si uno de los servicios NFS
no comienza correctamente, portmap puede ser incapaz de corresponder las peticiones RPC con
sus respectivos puertos. En muchos casos, reiniciando NFS como root (rcnfsserver restart)
provocará que estos servicios funcionen correctamente con portmap y empiecen a funcionar.
4.3.2 El servidor NFS
Trabajando con portmap, otros procesos se aseguran que una conexión particular NFS esté
permitida y pueda proceder sin error. Estos procesos constituyen el servidor NFS, y entre ellos
están rpc.mountd, y rpc.nfsd. Todos los procesos necesarios son controlados por el script
rcnfsserver que provee SuSE para controlar el funcionamiento del servidor.
Es sencillo configurar un sistema para compartir ficheros y directorios usando NFS. Cada Sistema
de ficheros que se exporta a usuarios remotos via NFS, así como los derechos de acceso relativos a
ellos, es localizado en el fichero /etc/exports. Este fichero es leído por el comando exportfs
que da a rpc.mountd y rpc.nfsd la información necesaria para permitir el montaje remoto de un
sistema de ficheros por una máquina autorizada.
El comando exportfs -a permite actualizar los directorios exportados luego de modificaciones en
/etc/exports sin reiniciar los servicios NFS.
El fichero /etc/exports es el estándar para controlar que sistemas de ficheros son exportados a
que máquinas, así como para especificar opciones particulares que controlen todo. Las líneas en
blanco son ignoradas, se pueden comentar líneas con #, y las líneas largas pueden ser divididas con
una barra invertida (\). Cada sistema de ficheros exportado debe tener su propia línea. La lista de
Módulo IV: Conexión en Red
24
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
máquinas autorizadas colocada después de un sistema de ficheros exportado, debe estar separada
por un espacio. Las opciones para cada uno de las máquinas deben ser colocadas entre paréntesis
directamente detrás del identificador de la máquina, sin ningún espacio de separación entre la
máquina y el primer paréntesis.
De esta sencilla manera, /etc/exports sólo necesita saber el directorio a exportar y las máquinas
que pueden utilizarlo:
/un/directorio bob.domain.com
/otro/directorio/exportado 192.168.0.3
Después de reexportar /etc/exports con el comando exportfs -a, la máquina
bob.domain.com será capaz de montar /un/directorio, y 192.168.0.3 podrá montar
/otro/directorio/exportado. Como no hay opciones especificadas en este ejemplo, varias
preferencias por defecto toman efecto:
?
ro
?
async
?
wdelay
?
root_squash
Sólo lectura (read-only). Las máquinas que monten este sistema de ficheros no podrán
cambiarlo. Para permitirlas que puedan hacer cambios en el sistema de ficheros, debe
especificar la opción rw (lectura-escritura - read-write).
Permite al servidor escribir los datos en el disco cuando lo crea conveniente.
Mientras que esto no tiene importancia en un sistema de sólo lectura, si una máquina hace
cambios en un sistema de ficheros de lectura-escritura y el servidor se cae o se apaga, se
pueden perder datos. Especificando la opción sync, todas las escrituras en el disco deben
hacerse antes de devolver el control al cliente. Esto bajará el rendimiento.
Provoca que el servidor NFS retrase el escribir a disco si sospecha que otra
petición de escritura es inminente. Esto puede mejorar el rendimiento reduciendo las veces
que se debe acceder al disco por comandos de escritura separados. Use no_wdelay para
desactivar esta opción, la cual sólo funciona si está usando la opción sync.
Hace que cualquier cliente que acceda al sistema de ficheros exportado
(como root en la máquina cliente), se convierta en el ID del usuario nobody. Esto
reconvierte el poder del usuario root remoto al de usuario local más bajo, previniendo que
los usuarios root remotos puedan convertirse en usuarios root en el sistema local.
Alternativamente, la opción no_root_squash lo descativa. Para reconvertir a todos los
usuarios, incluyendo a root, use la opción all_squash. Para especificar los ID de usuario y
grupo para usar con usuarios remotos desde una máquina particular, use las opciones
anonuid y anongid respectivamente. De esta manera, puede crear una cuenta de usuario
especial para usuarios NFS remotos para compartir y especificar (anonuid=<uidvalue>,anongid=<gid-value>), donde <uid-value> es el número ID de usuario y
<gid-value> es el número ID de grupo.
Módulo IV: Conexión en Red
25
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Para saltarse estas opciones predeterminadas, debe especificar la opción que desea cambiar. Por
ejemplo, si no especifica la opción rw, entonces se exportará en sólo lectura. Cada opción
predeterminada debe ser explícitamente sobreescrita con su opción correspondiente.
Adicionalmente, hay otra opciones que están disponibles que no afectan a las predeterminadas.
Estas incluyen desactivar el navegar por subdirectorios, permitir el acceso a puertos inseguros, y
permitir bloquear ficheros inseguros (necesario para algunas implementaciones antiguas de clientes
NFS). Vea la página man de exports para estas opciones menos usadas.
Para especificar máquinas a las que permitir usar un sistema de ficheros en concreto, podemos usar
varios métodos, entre los que se incluyen:
?
una sola máquina — Cuando una máquina en particular es especificada con nombre
completo de dominio, nombre de máquina o dirección IP.
?
comodines — Cuando usamos un caracter * o ? para referirnos a un grupo de nombres
completos de dominio o direcciones IP o que coincidan con una cadena particular de letras.
Sin embargo, sea cuidadoso cuando use comodines con nombres de dominios completos, e
intente ser lo más exacto que pueda. Por ejemplo, el uso de *.domain.com como comodín,
permitirá a ventas.domain.com acceder al sistema de ficheros exportado, pero no a
bob.ventas.domain.com. Para permitir ambas posibilidades, así como a
sam.corp.domain.com, debería usar *.domain.com *.*.domain.com.
?
redes IP — Permite el acceso a máquinas basadas en sus direcciones IP dentro de una red
más grande. Por ejemplo 192.168.0.0/24 y 192.168.0.0/255.255.255.0 son equivalentes.
?
grupos de redes — Permite que un nombre de grupo de red NIS, escrita como @<groupname>, sea usada. Esto pone al servidor NIS controlando el acceso de este sistema de
ficheros, donde los usuarios pueden ser añadidos o borrados de un grupo NIS sin que
afecte a /etc/exports.
La manera en que el fichero /etc/exports está organizado es muy importante, particularmente lo
que concierne a los espacios en blanco. Recuerde separar siempre los sistemas de ficheros
exportados de máquina a máquina y de uno a otro con un espacio. Sin embargo, no debería haber
otros espacios en el fichero a menos que se usen en líneas comentadas.
Por ejemplo, las siguientes dos líneas significan cosas distintas:
/home maquina3.linux.ldr(rw)
/home maquina3.linux.ldr (rw)
La primera línea permite sólo a los usuarios de maquina3.linux.ldr acceder en modo de lecturaescritura al directorio /home. La segunda línea permite a los usuarios de maquina3.linux.ldr
montar el directorio de sólo lectura (el predeterminado), pero el resto del mundo puede instalarlo
como lectura-escritura.
Módulo IV: Conexión en Red
26
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Otra cuestión a tener en cuenta, que ya fue mencionada, pero conviene recordarla, es que portmap
se fija en /etc/hosts.allow y /etc/hosts.deny para determinar si a una máquina particular le
debe ser explícitamente permitido o denegado su acceso. Por ende, el primer archivo debería
contener al menos:
statd: .linux.ldr
mountd: .linux.ldr
Estas dos líneas permitirán a los hosts del dominio linux.ldr conectarse a los servicios RPC
rpc.statd y rpc.mountd, y por ende, al servidor NFS de estar permitido esto en
/etc/exports.
Finalmente, es fundamental tener en cuenta que los privilegios de montajes NFS son permitidos
específicamente a máquinas, no a usuarios. Si permite a un sistema acceder a una parte en concreto
de su disco duro, los usuarios de esa máquina podrán acceder a esos datos compartidos.
Por ende, al configurar el fichero /etc/exports, sea extremadamente cuidadoso cuando comparta
directorios con permisos de lectura y escritura (rw) a un sistema remoto. Los usuarios de sistemas
remotos que monten su sistema de ficheros exportados, pueden modificar los datos, intentar ataques
de DoS, etc.
4.3.3 El cliente NFS
Como se ha comentado, para que una máquina cliente pueda utilizar un sistema de ficheros nfs, este
debe de haber sido compilado en el kernel estáticamente o como módulo.
Para que un cliente pueda utilizar un sistema de ficheros exportado por un servidor NFS, es
utilizando el comando mount. Es decir los volúmenes NFS se montan de la misma forma que el
resto de sistemas de ficheros:
mount -t nfs dirnfs dirlocal opciones
Por ejemplo:
# mount -t nfs mis01:/home /home
Las opciones son las típicas de mount, y pueden ser encontradas en su página de manual.
Para evitar el trabajo de escribir el comando con las opciones en volúmenes montados con
frecuencia, es posible incluirlos en /etc/fstab, por ejemplo:
server:/usr/local/pub
/pub
Módulo IV: Conexión en Red
nfs
rsize=8192,wsize=8192,timeo=14,intr
27
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Indica que hay que montar server:/usr/local/pub en /pub (local), que es un sistema de
archivos de tipo NFS y algunas opciones específicas de mount para NFS. De este modo, el
volumen se montará en el inicio del sistema, y por ende los beneficiarios del sistema no dependerán
de un superusuario que de la orden de montaje.
De haber muchos sistemas de archivos de red para montar, por cuestiones de uso de recursos no
conviene montar todos los NFSs en el arranque, puesto que tal vez muchos tengan baja utilización.
En estos casos, SuSE tiene un sistema de montaje automático, llamado automount, que resulta una
solución ideal. Ver la página de manual de automount y autofs para más información.
4.4 DHCP
DHCP (Dynamic Host Configuration Protocol) es un protocolo con arquitectura cliente / servidor
que ofrece un mecanismo automático para obtener los parámetros de configuración de una interfaz
de red TCP/IP a través de un servidor, que ofrece sus servicios en una red de área local. Fue
creado por el Grupo de Trabajo Dynamic Host Configuration del IETF, organización de
definición protocolos para Internet.
Es un protocolo de asignación de direcciones distribuidas basado en un mecanismo de consulta.
Normalmente se utiliza para simplificar la configuración de los equipos y también para escenarios
donde hay más equipos que direcciones disponibles.
Es útil para proporcionar de un modo rápido la configuración de red del cliente pues de esta forma
dicha configuración se reduce a la selección por parte del administrador del uso del protocolo
DHCP y nada mas. El cliente recupera esta información desde el servidor DHCP.
También es útil si un administrador desea cambiar la dirección de IP de muchos sistemas. En lugar
de volver a configurar todos los sistemas, puede modificar una fichero de configuración DHCP en el
servidor para establecer la nueva dirección IP. Si los servidores DNS de una organización cambian,
los cambios también se aplicarán en el servidor DHCP, no en todos los clientes DHCP.
Además, si un portátil o cualquier tipo de equipo móvil se configura para DHCP, podrá desplazarse
entre distintas subredes sin tener que volver a configurarlo, ya que cada idealmente cada subred
dispondrá de un servidor DHCP que permitirá su conexión a la red.
DHCP está basado en el protocolo BOOTP, creado con el fin de permitir la configuración
automática de máquinas que se arrancan conectadas a una red TCP/IP, asignando siempre la misma
dirección a las máquinas sin reutilizarlas. DHCP añadió la posibilidad de usar direcciones de red
reusables, de tal forma que no es necesario tener tantas direcciones IP como máquinas, siempre de
que se esté seguro de que no se utilizan todas las máquinas a la vez. Este es un sistema muy utilizado
por los proveedores de Internet por acceso telefónico y en redes a las que se conectan usuarios
esporádicos.
Módulo IV: Conexión en Red
28
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Está compuesto por dos componentes principales:
1. El protocolo para la transmisión de los parámetros de configuración de una interfaz TCP/IP
desde el servidor a los clientes. El formato de los paquetes está basado en el protocolo
BOOTP, y permite la compatibilidad entre los clientes de este tipo y los servidores de
DHCP.
2. El mecanismo para la asignación de las distintas direcciones a los clientes.
El servidor admite tres tipos de configuración de direcciones IP:
1. Estática. Se configura en el servidor la dirección de red que se corresponde con la dirección
LAN del cliente (equivalente a BOOTP).
2. Dinámica, por tiempo ilimitado. Se indica un rango de direcciones que se asignan a cada
cliente de carácter permanente, hasta que el cliente la libera.
3. Dinámica, arrendada. Las direcciones se otorgan por un tiempo ilimitado. Un cliente debe
renovar su dirección para poder seguir utilizándola.
El servidor DHCP tiene dos bases de datos, una de direcciones estáticas, y otra para las dinámicas.
Cuando recibe una petición, primero chequea su base de datos estática. Si existe una entrada para
esa dirección física, se devuelve la dirección IP estática correspondiente. Si no se encuentra la
entrada, el servidor selecciona una IP disponible de la base de datos dinámica y añade la nueva
asociación a la base de datos.
Cuando el período de tiempo de asignación de la dirección dinámica (que fue negociado al inicio)
expira, el cliente tiene que renovar el período o dejar de usar la dirección. El servidor tiene la opción
de aceptar o rechazar la renovación.
Para obtener una dirección, el procedimiento es de la siguiente manera:
?
El cliente envía un mensaje DHCPDISCOVER broadcast usando el puerto destino 67.
?
Aquellos servidores que puedan dar este tipo de servicio responden con un mensaje
DHCPOFFER, donde se ofrece una IP que será bloqueada. En estos mensajes también
puede ofrecer la duración del alquiler. Si el cliente no recibe dicho mensaje, intenta
establecer conexión cuatro veces más, cada dos segundos, si aún así no hay respuesta,
espera cinco minutos antes de intentarlo de nuevo.
?
El cliente elige una de las IPs ofertadas y envía un mensaje DHCPREQUEST al servidor
seleccionado.
?
El servidor responde con un mensaje DHCPACK y crea la asociación entre la dirección
física del cliente y su IP. Ahora el cliente usa la IP hasta que el alquiler expire.
Módulo IV: Conexión en Red
29
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
?
Al alcanzar el 50% del tiempo del alquiler, el cliente envía otro mensaje DHCPREQUEST
para renovar el alquiler.
?
Si el servidor responde con DHCPACK, el cliente puede seguir usando la IP durante otro
periodo de tiempo. Si se recibe un DHCPNACK, el cliente debe de dejar de usar esa IP y
empezar de nuevo el proceso de obtención de una IP.
?
Si después de transcurrir el 87.5% del alquiler no se recibe respuesta, se manda otro
DHCPREQUEST. Si se recibe un DHCPACK antes de que expire el tiempo de alquiler, se
obtiene más tiempo de alquiler. En caso contrario, se debe comenzar de nuevo el proceso
de obtención de una IP. El cliente puede terminar el alquiler antes de que expire el tiempo.
En este caso, el cliente envía un mensaje DHCPRELEASE al servidor.
4.4.1 El servidor DHCP
Podemos configurar un servidor DHCP mediante el fichero de configuración /etc/dhcpd.conf.
que almacena la información de red de los clientes. Se pueden declarar opciones globales para
todos los clientes y opciones para cada sistema particular. Para reflejar los cambios, hará falta
reiniciar el servicio con rcdhcpd restart.
El archivo de configuración puede contener tabulaciones o líneas en blanco adicionales para facilitar
el formato. Las palabras clave no distinguen entre mayúsculas y minúsculas, y las líneas que
empiezan con un cardina o numeral (#) se consideran comentarios.
Algunos parámetros deben empezar con la palabra clave option.
Los parámetros (incluidas las opciones) declarados antes de una sección encerrada entre llaves ({ })
se consideran parámetros globales. Los parámetros globales se aplican a todas las secciones
situadas (jerárquicamente con respecto a las llaves) “debajo” de ellos.
Tenemos que incluir una sección subnet para cada red que deseemos administrar mediante el
protocolo DHCP:
Todas las subredes que comparten la misma red física deben declararse dentro de una declaración
shared-network, como veremos a continuación. Los parámetros dentro de shared- network,
son globales para las declaraciones subset, pero no se aplican fuera de la shared-network:
shared-network laboratorio_redes {
# Parámetros globales para ambas subredes
option domain-name
"linux.ldr”;
option domain-name-servers
ns.linux.ldr, ns.sec.ldr;
option routers
192.168.1.254;
subnet 192.168.1.0 netmask 255.255.255.0 {
#parámetros deseados aplicables a esta subred
Módulo IV: Conexión en Red
30
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
default-lease-time 600; # 10 minutos
max-lease-time 7200; # 2 horas
range 192.168.1.1 192.168.1.31;
}
subnet 192.168.1.32 netmask 255.255.255.0 {
#parámetros deseados aplicables a esta subred
range 192.168.1.33 192.168.1.63;
}
}
Vemos también que una de las subredes tiene los parámetros default-lease-time y maxlease-time destinados a controlar el tiempo de alquiler de una dirección. Los tiempos se
especifican en segundos. Si los parámetros hubieran estado fuera de la red compartida, se aplicarían
a toda la red compartida y las demás definidas debajo.
El parámetro range permite especificar el rango de direcciones IP disponibles para la asignación
dinámica de una subred. De estar ausente, sólo los hosts declarados explícitamente como se verá
más adelante podrán obtener una dirección en dicha subred.
La declaración group puede utilizarse para aplicar parámetros globales a un grupo de
declaraciones. Puede agrupar redes compartidas, subredes, hosts u otros grupos:
group {
option routers
option subnet-mask
option domain-name
option domain-name-servers
192.168.1.254;
255.255.255.0;
"linux.ldr";
192.168.1.1;
host maquina3 {
option host-name "maquina3.linux.ldr";
hardware ethernet 00:A0:78:8E:9E:AA;
fixed-address 192.168.1.3;
}
host mail {
option host-name "mail.linux.ldr";
hardware ethernet 00:A1:DD:74:C3:F2;
fixed-address 192.168.1.6;
}
}
Se presentan acá 2 hosts configurados estáticamente por medio de su dirección MAC, gracias al
parámetro hardware ethernet de una declaración host. El parámetro opcional host-name
asigna un nombre host al cliente.
Módulo IV: Conexión en Red
31
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
Finalmente, el servidor DHCP está obligado a utilizar un esquema de actualización de DNS, por el
cual indica a un servidor DNS la dirección IP que asigna a ciertos hosts. Este tema está más allá del
alcance de este módulo, por lo que sólo diremos que hay que agregar la línea Ddns-update-style
ad-hoc; en el archivo dhcpd.conf como un parámetro global, o de otro modo no funcionará.
Para obtener una lista completa de sentencias de opciones e información relacionada, consulte la
página del manual de dhcp-options y dhcpd.conf.
4.4.2 El cliente DHCP
Para configurar un cliente DHCP manualmente en SuSE, debe modificar el archivo
/etc/sysconfig/network/ifcfg-eth0 si estamos intentando adquirir la dirección en eth0. Hay
un archivo similar para cada interfase de red instalada por YaST2.
Dentro del archivo basta con establecer el parámetro:
BOOTPROTO=dhcp
4.5 SERVIDOR FTP
El Protocolo de Transferencia de Archivos (File Transfer Protocol) representa un método para
compartir información que subsiste desde las primeras épocas de las redes TCP/IP, y está
ampliamente difundido. Todos los sistemas operativos actuales tienen incorporado por defecto un
cliente para este protocolo, lo que supone una gran ventaja a la hora de considerar implementar un
servidor.
El servidor Pure-FTPd viene incluido en la distribución SuSE bajo un paquete con el mismo nombre.
Su ventaja es ser eficiente, sencillo, y por ende seguro, frente a otros servidores que implementan un
sinnúmero de funciones raras veces utilizadas que les causan vulnerabilidades.
Su archivo de configuración se encuentra en /etc/pureftpd.conf, y a continuación, veremos
algunos de los parámetros importantes:
# Cage in every user in his home directory. Hace creer a cada usuario que
su directorio home es la raíz del sistema, haciendo imposible el acceso al
resto de la estructura real de directorios del sistema. Esto es muy bueno
para la seguridad, y la recomendación es no cambiarlo.
ChrootEveryone
yes
# Maximum number of simultaneous users. Número máximo de usuarios
simultaneos.
MaxClientsNumber
Módulo IV: Conexión en Red
20
32
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
# Fork in background. Para que se ejecute como un demonio.
Daemonize
yes
# Maximum number of sim clients with the same IP address. Número máximo de
conexiones abiertas por IP.
MaxClientsPerIP
3
# Don't allow authenticated users - have a public anonymous FTP only. Con
esto se crea un FTP solo público.
AnonymousOnly
no
# Disallow anonymous connections. Only allow authenticated users. Con esto
en yes, se crea un FTP solo anónimo.
NoAnonymous
no
# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*)
# The default facility is "ftp". "none" disables logging.
# Acá se especifica el origen que declararán los mensajes del ftp en syslog
SyslogFacility
ftp
# 'ls' recursion limits. The first argument is the maximum number of
# files to be displayed. The second one is the max subdirectories depth
# Máximo número de archivos para mostrar y profundidad de directorios
LimitRecursion
2000 8
# Disallow downloading of files owned by "ftp", ie.
# files that were uploaded but not validated by a local admin.
# Los archivos subidos por usuarios no pueden ser bajados hasta haber sido
revisados por un administrador, que tiene que cambiar el propietario.
AntiWarez
yes
# IP address/port to listen to (default=all IP and port 21).
# Dirección IP y puerto en el cual escuchar (todos por defecto, puerto 21)
#Bind
192.168.0.2,21
# Maximum bandwidth for anonymous users in KB/s
# Máximo ancho de banda por cada usuario anónimo en KB/s
# AnonymousBandwidth
#
#
#
#
8
Maximum bandwidth for *all* users (including anonymous) in KB/s
Use AnonymousBandwidth *or* UserBandwidth, both makes no sense.
Máximo ancho de banda para todos los usuarios, en KB/s
Usar este o el anterior, no ambos pues no tiene sentido.
Módulo IV: Conexión en Red
33
Facultad de Cs. Exactas y Tecnología
Depto. de Electricidad, Electrónica y Computación
Ing. en Computación
Curso: Administración Avanzada de Linux
# UserBandwidth
8
# This option is useful with servers where anonymous upload is
# allowed. As /var/ftp is in /var, it save some space and protect
# the log files. When the partition is more that X percent full,
# new uploads are disallowed.
# No dejar que se suban archivos si el uso de la partición supera este
porcentaje
MaxDiskUsage
80
En realidad, una vez instalado, está listo para ejecutarse con rcpure-ftpd start sin realizar
modificación alguna a su archivo de configuración. Por defecto, los usuarios del sistema ya podrían
autenticarse por medio de sus cuentas en /etc/passwd y acceder con todos sus permisos a sus
directorios home.
Para realizar más ajustes a la configuración, conviene leer el archivo completo, y si no, dirigirse a
www.pureftpd.org, que es el sitio home del proyecto.
Módulo IV: Conexión en Red
34
Descargar