Defcon-1-Logo

           [Home]    [FBSD Articles]    [Scripts Corner]    [Contribute]    [Search]    [FBSD Links]    [Files]

About Us

FreeBSD Articles
  *Hardware
  *Networking
  *Security
  *Software
  *X Windows


Files / Scripts
Newbies Corner
Tech. Talk
Tips and Tricks


FreeBSD Links

Articles in other
Languages :
  *French Articles
  *Spanish Articles

Want to Help ?
 
   Click Here

Email Users5

Search:
 

 


FreeBSD Search:


 

 

Powered-By-Apache-Logo

         IP Aliasing en FreeBSD 2.2.x & 3.0

IP Aliasing es el proceso por el cual se agrega mas de una IP a una interface de red.
Los usos tipicos del IP aliasing son hosting virtual de web y FTP, y re-organizar servers sin tener que actualizar cualquier otra maquina (esto es especialmente util para nameservers).

IP Aliasing no esta relacionado con el concepto multi-homing (una maquina multi-homed tiene mas de una interfaz de red activa), excepto donde una maquina multi-homed provee servicios como los listados mas arriva. El termino multi-homing es un error propagado por Mac world, y vos no deberias seguir sus pasos.

Los dos comandos escensiales para crear un IP Alias en FreeBSD (y todos los otros sistemas UNIX que nunca use) son ifconfig y route. EL uso correcto de estos comandos esta descrito mas abajo. Para todos los detalles exquisitos sobre el uso de estos comandos, por favor mira las paginas man que estan linkeadas abajo. Hay 2 comandos mas los cuales son utiles para verificar que todo esta funcionando como deberia y para dar debug si no estan funcionando como deberian. Netstat permite ver la tabla de enrutamiento (routing table) del kernel, y "ping" es una herramienta adorable para testear el funcionamiento de tus nuevos alias (o cualquier IP).

Importante: Debes SER root para ejecutar la gran mayoria de estos comandos.

Usando ifconfig

ifconfig es usado para configurar todos los aspectos de las interfaces de red (direcion, protocolo, netmask, etc). Nuestro caso con ifconfig aqui es addherir (y usualmente quitar) direciones alias de las interfaces.

Por ejemplo, abajo asumimos que nuestra maquina tiene una sola tarjeta 3Com 3C509 (ep0) con la direccion 192.168.57.82 y mascara de subred de 255.255.255.0, ademas de la interfaz loopback (lo0) que es 127.0.0.1.
Vos vas a tener que, por supuesto, substituir tu propia direccion y mascara de subred para tu interface(s). La direccion y mascara de subred para la interface loopback es la misma para cada computadora.

Para aderir un alias a ep0, simplemente ejecutamos un comando como:
ifconfig ep0 inet 192.168.57.10 netmask 255.255.255.255 alias. Esto le dice a FreeBSD que estamos poniendo un IP (inet) a la tarjeta 3Com (ep0) con una direccion de 192.168.57.10 y una mascara de subred de 255.255.255.255 (ejemplo, todos bits 1) para prevenir un problema con el sistema operativo sobre que ya hay una direccion en la interface, y eso es una interface alias (alias).

Vos tambien quizas quieras dejar de lado la opcion netmask (o poner algo diferente). En FreeBSD 2.1.0 y anteriores, como sea, hay un bug que causa que los comandos de ifconfig retornen un error en el primer intento, pero en el segundo funciona, si no especificas una mascara de subred de 255.255.255.255. Si no configuras la mascara de subred a 255.255.255.255, vas a tener que tambien adedir una ruta (route) a mano como se describe mas abajo.

Para remover un alias, ejecutamos un comando bastante similar:
ifconfig ep0 inet 192.168.57.10 -alias. No necesitamos parametros adicionales, como mascara de subred, porque el alias es unicamente identificado por la direccion IP asi que FreeBSD puede remover todas las direcciones basandose en eso.


Usando route

route es usado para hacer manualmente cambios en la tabla de enrutamiento (routing table) del kernel. En nuestra aplicacion, una vez que le dijimos a FreeBSD acerca del alias para la interface, debemos especificar una ruta para la direccion de alias. Si configuras la mascara de subred a 255.255.255.255 en tu ifconfig, podes saltear este paso.

Para agregar una ruta (route) a nuestra interface, ejecutamos:
route add -host 192.168.57.10 127.0.0.1 0. Esto le dice a FreeBSD que para llegar a 192.168.57.10, los packetes deben ser eviados a la interface loopback (127.0.0.1, tambien llamada localhost), y el "metric" (hops) es 0, significa que esta en la maquina local.

Para borrar esta ruta (route), ejecutamos:
route delete -host 192.169.57.10 nuevamente, ya que la ruta (route) puede ser identificada por los parametros dados, podemos nuevamente dejar de lado parametros como mascara de subred, etc. Ve la pagina man para una explicacion completa acerca del comando "route".

Verificando tu trabajo

Ahora que tenemos un alias definida y ruteable, tenemos que verificar que esta funcionando correctamente. Primero vamos a mirar la tabla de enrutamiento (routing table) del kernel, para verificar que la ruta del alias esta en el lugar correcto, luego vamos a usar ping para verificar que los packetes actualmente llegan sin problemas a la interface que tiene el alias.

Para mirar la version numerica de la tabla de enrutamiento del kernel, ejecuta:
netstat -nr. En nuestro ejemplo, el resultado del comando seria algo como esto:
Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 192.168.57.1 UGSc 4 964 ep0 127.0.0.1 127.0.0.1 UH 1 39 lo0 192.168.57 link#2 UC 0 0 192.168.57.10/32 link#2 UC 0 0 192.168.57.82 127.0.0.1 UGHS 0 0 lo0 224/4 link#2 UCS 0 0
Aca vemos la ruta por default, la ruta para la interface loopback, la ruta para la red local, y una ruta para nuestro alias. El /32 en el final de la direccion con alias indica el largo de la subnet (el numero 1 comenzando desde la izquierda de la mascara de red). Porque yo use una netmask de 255.255.255.255, el largo de la subnet (el numero de 1's) es 32.

Una vez que establezcas que la ruta esta en el kernel, verifica rapidamente que el ruteo funciona correctamente. Ejecuta un ping como este: ping 192.168.57.10. Si las cosas estan bien, vas a ver algo asi:
PING 192.168.57.10 (192.168.57.10): 56 data bytes
64 bytes from 192.168.57.10: icmp_seq=0 ttl=255 time=0.313 ms
64 bytes from 192.168.57.10: icmp_seq=1 ttl=255 time=0.197 ms
64 bytes from 192.168.57.10: icmp_seq=2 ttl=255 time=0.190 ms
Simplemente preciona Ctrl-C para parar el ping, Luego vas a ver unas estadisticas interesantes que generalmente podes ignorar. Si ninguno de los pings regresa o si hay mensajes de error, algo esta mal.
Intenta comenzando nuevamente desde el comienzo, leyendo la pagina man (no, realmente, LEE LAS PAGINAS MAN), y finalmente, preguntando en la lista freebsd-questions.

Poniendo todo junto

Ahora que entendemos como usar ifconfig y route para agregar alias de IPs, vamos a hacer que la maquina ejecture los comandos propios cuando inicie, de esta forma loa alias siempre van a estar activos.

Cerca del final del archivo /etc/rc.local, agregarias las lineas:
ifconfig ep0 inet 192.168.57.10 netmask 255.255.255.255 alias
Si usastes otra mascara de subred (netmask), entonces vas a tener que usar el coamndo route.
Podes agregar tantas alias como desees (asumiendo que tenes direcciones suficientes). Simplemente pone muchas copias de estas lineas en /etc/rc.local con las direcciones apropiadas para cada alias.
Podes tener direcciones de otra red (network) como alias en una interface si esa red esta ruteada a vos.

Hay un par de cosas por las cuales preocuparse cuando se trabaja con un largo numero de alias (mas de 10) que voy a mencionar aqui.

Primero, hay un bug en todas las distribuciones de bind (el servidor named que es parte del BIND) que hace que named no comienze propiamente cuando hay mas de 64 alias en una interface. Ninguno de los arreglos para esto es particularmente simple, asi que, los voy a saltear a todos ahora.

Segundo, para prevenir un amontonamiento de comandos ifconfig en /etc/rc.local, te sugiero que uses archivos separados en /etc/. Crea un archivo llamado ifconfig.ep0 y pone todos los comandos ifconfig ahi dentro. Luego en /etc/rc.local, agrega lo siguiente
if [ -x /sbin/ifconfig ];
then echo -n 'Adding local ifconfigs '
/etc/ifconfig.ep0 echo ' done.'
fi
Este script fue provisto por Neil Fowler Wright.

Email Us

ghostrdr@defcon1.org

This site cannot be duplicated without permission

© 1998 - 2010 Defcon1, www.defcon1.org. Copyrights for all materials on this web site are held by the individual authors, artists, photographers or creators. Materials may not be reproduced or otherwise distributed without permission of www.defcon1.org and the content's original author.