domingo, 14 de julio de 2013

How to create a Virtualbox image from a physical partition by one command

Exytaido de:  http://karim-ouda.blogspot.com.ar/2011/11/how-to-create-virtualbox-image-from.html

I managed to create an image from a running Linux machine using the following command

Command:

sudo dd if=DRIVE | VBoxManage convertfromraw stdin FILENAME BYTES

Real Example

sudo dd if=/dev/sda | VBoxManage convertfromraw stdin MyLinuxImage.vdi 120034123776


Notes:

1- To get the number of bytes in partition, you can use the following command
sudo fdisk -l /dev/sda

2- You need to use /dev/xxx not /dev/xxx1 or xxx2 so that the image contains MBR records

For more information check the following link:
https://www.virtualbox.org/wiki/Migrate_Windows

sábado, 13 de julio de 2013

Convert VMware disks (.vmdk) to VirtualBox format (.vdi)

Extraido desde : http://codelab.ferrarihaines.com/archives/61

Although you can play directly VMware images in VirtualBox, sometimes you might prefer to convert it to a native .vdi image so you can use all the standard commands like clonevdi, etc on it.
Converting the image is quite straightforward:
  1. Release and remove the VMware image from virtualbox's virtual media manager if the disk is already in use by one of your virtual machines.
  2. Clone the disk specifying VDI as output format:
    brau>$ /usr/bin/VBoxManage clonehd image_to_convert.vmdk converted.vdi --format VDI --variant standard --type normal
     
    Sun VirtualBox Command Line Management Interface Version 3.1.6
    (C) 2005-2010 Sun Microsystems, Inc.
    All rights reserved.
     
    0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
    Clone hard disk created in format 'VDI'. UUID: 84f005f6-bbf8-4a0e-9fe8-3b7bf0df14d5
  3. Add your new vdi to your Virtual Media Manager. Now you are ready to create a new VM using the new .vdi disk
 add “–format vdi” to this command to make sure the resulting disk has the vdi format and not vmdm

Tutorial: Redimensionar un disco duro virtual en VirtualBox

Extraído de http://bytesymas.com/?p=36

Para aquel que no lo conozca, Oracle Virtualbox es una herramienta de virtualización. Esta herramienta permite tener máquinas virtuales con las que arrancar en el sistema operativo de tu ordenador, otro sistema operativo como si estuvieras ejecutando un programa. Esto tiene muchas utilidades, como puede ser probar una nueva distribución de linux antes de instalarla en el ordenador, o tener en una máquina virtual un entorno de desarrollo para un proyecto determinado.
Se puede dar el caso de que una vez creada la máquina virtual, te des cuenta que te has quedado corto a la hora de asignarle disco duro.
Para solucionar este problema, en versiones antiguas de VirtualBox había que crear una imagen de disco duro virtual nueva con el tamaño deseado, y clonar todo el contenido del disco antiguo al nuevo.
Desde la versión 4 de VirtualBox, aumentar el tamaño de una imagen de disco duro virtual se hace de la siguiente manera. Los pasos de este tutorial son para el caso en que el sistema operativo anfitrión sea un Windows XP, y el sistema operativo invitado un Ubuntu.
Con la máquina virtual a la que pertenece la imagen apagada, abrir la consola de Windows e ir al path donde esté instalado VirtualBox. Una vez allí hay que ejecutar el siguiente comando:
VBoxManage modifyhd <path> --resize <tamaño>
Donde <path> es la ruta completa al fichero .vdi que representa al disco duro que queremos redimensionar, y <tamaño> es el tamaño (en Mb) al que queremos redimensionar el disco.

Por ejemplo si tuviéramos una imagen de disco llamado maquina_ubuntu.vdi en C:\Discos y quisieramos redimensionarla a 10GB el comando a ejecutar sería:

VBoxManage modifyhd C:\Discos\maquina_ubuntu.vdi --resize 10000

Si todo ha ido OK, se mostrará el progreso de como va aumentando el tamaño del disco virtual.

Si se produce el siguiente error:

0%…
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage: error: Resize hard disk operation for this format is not implemented yet!

Significa que el disco duro que se está intentando redimensionar se creó con tamaño fijo y no dinámico. De momento VirtualBox solo permite redimensionar imagenes de disco que se hayan creado con tamaño dinámico. Que el mensaje diga ‘is not implemented yet!’ me hace suponer que en futuras versiones de VirtualBox se podrán redimensionar imagenes que se hayan creado con tamaño fijo de la misma forma que se hace ahora con los dinámicos.

Si queremos redimensionar una imagen de disco que se creó con tamaño fijo, primero tendremos que convertirla a dinámico. Para convertir un disco en dinámico, tendremos que clonarlo, ya que cuando VirtualBox clona un disco, el disco resultante tiene tamaño dinámico. Para esto desde la consola de windows y en el path de instalación del VirtualBox escribimos el siguiente comando:

VBoxManage clonehd <origen> <destino>

Donde origen es el path completo de la imagen de disco duro virtual que queremos clonar, y destino es el path completo a la imagen de disco duro virtual resultante.
Por ejemplo si quisieramos clonar un disco llamado maquina_ubuntu.vdi en C:\Discos y crear un disco resultante que se llame maquina_ubuntu-new.vdi el comando a ejecutar sería:

VBoxManage clonehd C:\Discos\maquina_ubuntu.vdi C:\Discos\maquina_ubuntu-new.vdi

Una vez clonada la imagen del disco duro, desde VirtualBox seleccionamos la máquina virtual a la que pertenece este disco. Pulsamos ‘Configuración’ y allí seleccionamos ‘Almacenamiento’. En controlador SATA, quitamos la imagen de disco original y añadimos la nueva imagen generada (es importante al añadir la nueva, que esta esté asignada al mismo puerto SATA que la imagen anterior).

Una vez hecho esto, ya habremos sustituido la imagen de disco duro creada con tamaño fijo por una igual, pero creada de forma dinámica.Así que ya podemos ejecutar el comando para redimensionar el la imagen de disco sin que se produzca el error.
Con la imagen del disco ya redimensionada, solo queda aumentar la partición para que el Sistema Operativo disponga de todo el nuevo espacio que le hemos asignado. Esto se puede hacer de forma muy sencilla utilizando la herramienta Gparted desde algún Live CD.

Desde VirtualBox, seleccionamos la máquina virtual a la que pertenece la imagen del disco. Pulsamos ‘Configuración’ y allí seleccionamos ‘Almacenamiento’. En el árbol de almacenamiento, en Controlador IDE pulsamos ‘Agregar dispositivo CD/DVD’ y buscamos la imagen iso del Live CD que contiene el Gparted. El propio CD de instalación de Ubuntu, trae esta herramienta. Pero si no disponemos de la imagen iso en el ordenador, recomiendo descargarse SliTaz, ya que solo ocupa 35Mb y tiene la herramienta que necesitamos.

Con la imagen de CD seleccionada, marcamos el Checkbox de ‘Live CD’ y aceptamos. Una vez hecho esto procedemos a ejecutar la máquina virtual, y asi arrancará desde el CD. Cuando haya arrancado ejecutamos GParted y redimensionamos las particiones para ocupar todo el nuevo espacio que hemos asignado al disco (esto no tiene mucho secreto, hacerlo de forma gráfica es muy intuitivo).

Y listo, ya hemos aumentado el tamaño del disco duro de la máquina virtual. Antes de ejecutarla de nuevo, desde Configuración - Almacenamiento eliminad la imagen de CD que se añadió para ejecutar el GParted, y ya podemos entrar normalmente a la máquina virtual.

viernes, 12 de julio de 2013

Install libmcrypt and php-mcrypt on CentOS 5.3 without losing too much hair

Extraido de la pagina: http://www.kelvinwong.ca/2009/12/06/install-libmcrypt-and-php-mcrypt-on-centos-5-3-without-losing-too-much-hair/

I had to install mcrypt on a new virtual private server running CentOS 5.3 and Plesk 9.2. We didn’t want to do compile it, so we used yum to install it. The libmcrypt library is used to provide cryptographic functions and we are planning to use them in our php scripts. Let’s try to install it…
[root@nechi etc]# cat /etc/redhat-release
CentOS release 5.3 (Final)
[root@nechi etc]# uname -a
Linux nechi.local 2.6.18-028stab064.7 #1 SMP Wed Aug 26 13:11:07 MSD 2009 x86_64 x86_64 x86_64 GNU/Linux
[root@nechi etc]# php -v
PHP 5.2.11 (cli) (built: Oct 7 2009 08:45:24)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
[root@nechi etc]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* atomic: www5.atomicorp.com
* base: mirror.nic.uoregon.edu
* updates: mirror.chpc.utah.edu
* addons: centos.mirror.nac.net
* extras: mirror.stanford.edu
plesk | 951 B 00:00
atomic | 951 B 00:00
base | 2.1 kB 00:00
updates | 1.9 kB 00:00
addons | 951 B 00:00
extras | 1.1 kB 00:00
repo id repo name status
addons CentOS-5 - Addons enabled : 0
atomic CentOS / Red Hat Enterprise Linux 5 - at enabled : 709
base CentOS-5 - Base enabled : 3,348
extras CentOS-5 - Extras enabled : 290
plesk Plesk Server Administrator enabled : 193
updates CentOS-5 - Updates enabled : 363
repolist: 4,903
[root@nechi etc]#

The easiest way to do this is to use the php-mcrypt rpm package. That package has some dependencies. Earlier, I had installed libmcrypt so I figured I could just install the php-related rpm and I’d be done:
[root@nechi etc]# yum install php-mcrypt
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* atomic: www5.atomicorp.com
* base: mirror.nic.uoregon.edu
* updates: mirror.chpc.utah.edu
* addons: centos.mirror.nac.net
* extras: mirror.stanford.edu
Excluding Packages from Plesk Server Administrator
Finished
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package php-mcrypt.x86_64 0:5.2.11-2.el5.art set to be updated
--> Processing Dependency: libltdl.so.3()(64bit) for package: php-mcrypt
---> Package php-mcrypt.i386 0:5.2.11-2.el5.art set to be updated
--> Processing Dependency: libltdl.so.3 for package: php-mcrypt
--> Processing Dependency: libc.so.6(GLIBC_2.4) for package: php-mcrypt
--> Processing Dependency: libc.so.6 for package: php-mcrypt
--> Processing Dependency: libmcrypt.so.4 for package: php-mcrypt
--> Processing Dependency: libc.so.6(GLIBC_2.1.3) for package: php-mcrypt
--> Processing Dependency: libc.so.6(GLIBC_2.0) for package: php-mcrypt
--> Running transaction check
---> Package libtool-ltdl.i386 0:1.5.22-6.1 set to be updated
---> Package php-mcrypt.i386 0:5.2.11-2.el5.art set to be updated
--> Processing Dependency: libmcrypt.so.4 for package: php-mcrypt
---> Package glibc.i686 0:2.5-42 set to be updated
---> Package libtool-ltdl.x86_64 0:1.5.22-6.1 set to be updated
--> Finished Dependency Resolution
php-mcrypt-5.2.11-2.el5.art.i386 from atomic has depsolving problems
--> Missing Dependency: libmcrypt.so.4 is needed by package php-mcrypt-5.2.11-2.el5.art.i386 (atomic)
Error: Missing Dependency: libmcrypt.so.4 is needed by package php-mcrypt-5.2.11-2.el5.art.i386 (atomic)
[root@nechi etc]#

Oh great, it’s 1am on a Saturday night and my new OS hates me (digression: this speaks volumes).
[root@nechi etc]# yum list installed | grep mcrypt
libmcrypt.x86_64 2.5.8-4.el5.centos installed
[root@nechi etc]# ldconfig -p | grep libmcrypt.so.4
libmcrypt.so.4 (libc6,x86-64) => /usr/lib64/libmcrypt.so.4
[root@nechi etc]# find / -name libmcrypt.so.4
/usr/lib64/libmcrypt.so.4
[root@nechi etc]# ls -la /usr/lib64/libmcrypt.so.4
lrwxrwxrwx 1 root root 18 Dec 6 00:25 /usr/lib64/libmcrypt.so.4 -> libmcrypt.so.4.4.8
[root@nechi etc]# yum install libmcrypt-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* atomic: www5.atomicorp.com
* base: mirror.nic.uoregon.edu
* updates: mirror.chpc.utah.edu
* addons: centos.mirror.nac.net
* extras: mirror.stanford.edu
Excluding Packages from Plesk Server Administrator
Finished
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package libmcrypt-devel.x86_64 0:2.5.8-4.el5.centos set to be updated
--> Finished Dependency Resolution

Dependencies Resolved
=========================================================================================================================================
Package Arch Version Repository Size
=========================================================================================================================================
Installing:
libmcrypt-devel x86_64 2.5.8-4.el5.centos extras 10 k
Transaction Summary
=========================================================================================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 10 k
Is this ok [y/N]: y
Downloading Packages:
libmcrypt-devel-2.5.8-4.el5.centos.x86_64.rpm | 10 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : libmcrypt-devel [1/1]
Installed: libmcrypt-devel.x86_64 0:2.5.8-4.el5.centos
Complete!
[root@nechi etc]# yum install php-mcrypt

So can you guess what happened next? The library was found the next time I tried to install it, right? Of course not. It still couldn’t find the stupid library. So Google and I had a talk and it turns out that you need to be really specific about your package (a good general rule in most situations) if you have a 64-bit machine.
[root@nechi etc]# yum install php-mcrypt.x86_64
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* atomic: www5.atomicorp.com
* base: mirror.nic.uoregon.edu
* updates: mirror.chpc.utah.edu
* addons: centos.mirror.nac.net
* extras: mirror.stanford.edu
Excluding Packages from Plesk Server Administrator
Finished
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package php-mcrypt.x86_64 0:5.2.11-2.el5.art set to be updated
--> Processing Dependency: libltdl.so.3()(64bit) for package: php-mcrypt
--> Running transaction check
---> Package libtool-ltdl.x86_64 0:1.5.22-6.1 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved
=========================================================================================================================================
Package Arch Version Repository Size
=========================================================================================================================================
Installing:
php-mcrypt x86_64 5.2.11-2.el5.art atomic 27 k
Installing for dependencies:
libtool-ltdl x86_64 1.5.22-6.1 base 37 k
Transaction Summary
=========================================================================================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 64 k
Is this ok [y/N]: y
Downloading Packages:
(1/2): php-mcrypt-5.2.11-2.el5.art.x86_64.rpm | 27 kB 00:00
(2/2): libtool-ltdl-1.5.22-6.1.x86_64.rpm | 37 kB 00:00
-----------------------------------------------------------------------------------------------------------------------------------------
Total 76 kB/s | 64 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : libtool-ltdl [1/2]
Installing : php-mcrypt [2/2]
Installed: php-mcrypt.x86_64 0:5.2.11-2.el5.art
Dependency Installed: libtool-ltdl.x86_64 0:1.5.22-6.1
Complete!
[root@nechi etc]#

OMFG. Hey, did I mention that it is a Saturday night?
[root@nechi etc]# php -r "echo phpinfo();" | grep "^mcrypt"
mcrypt
mcrypt support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value
[root@nechi etc]#

martes, 9 de julio de 2013

Install Microsoft TrueType Fonts in Fedora 19 and Ubuntu


Extraido de: http://benperove.com/howto/install-microsoft-truetype-fonts-in-fedora-and-ubuntu/


When it comes to typography, Microsoft TrueType fonts are both visually appealing and aesthetically pleasing. They’re found all over the web, usually specified in stylesheets. Unfortunately for Linux users, the most common TTFs aren’t installed (by default, that is). Instead, they are replaced by generic equivalents. With these font packages installed, you will see websites as the designer intended.

The Microsoft TrueType fonts package includes:

    Andale Mono
    Arial Black
    Arial (Bold, Italic, Bold Italic)
    Comic Sans MS (Bold)
    Courier New (Bold, Italic, Bold Italic)
    Georgia (Bold, Italic, Bold Italic)
    Impact
    Times New Roman (Bold, Italic, Bold Italic)
    Trebuchet (Bold, Italic, Bold Italic)
    Verdana (Bold, Italic, Bold Italic)
    Webdings

Installing MS TrueType fonts in Ubuntu

You can install the MS core fonts by installing the msttcorefonts package. You will need to enable the “Universe” component of the repositories (done by default in Feisty & Hardy). After that, run the following from the command line:
$sudo apt-get install msttcorefonts

While this gives you the core fonts, it also gives you the ability to install any other font by simply copying the .TTF to the ~/.fonts/ directory.

When installing new fonts, you’ll need to re-login to be able to see & use them. Optionally, this step can be bypassed by regenerating the fonts cache with:
$sudo fc-cache -fv

Installing MS TrueType fonts in Fedora

Yep, a few extra steps in Fedora, but still a cinch. From the shell:

cd /tmp
wget http://corefonts.sourceforge.net/msttcorefonts-2.0-1.spec
yum install rpm-build cabextract
rpmbuild -ba msttcorefonts-2.0-1.spec
yum localinstall –nogpgcheck \
/usr/src/redhat/RPMS/noarch/msttcorefonts-2.0-1.noarch.rpm

Ha esta instalación le tuve que agregar el chkfontpath que lo baje desde  http://packages.atrpms.net/dist/f19/chkfontpath/

That should do it. Reinitialize the font cache, re-login or reboot and have another look at this site (with Georgia).

Gestión remota con el comando screen

Extraido desde http://www.muylinux.com/2009/01/05/gestion-remota-desconectando/

Bueno, ¿qué tal las vacaciones? Espero que las hayáis disfrutado :) Yo he estado entretenido investigando algunas cosillas que espero poder publicar si tengo tiempo.


En este post vamos a hablar de screen. Es una herramienta muy útil para hacer una gestión remota pudiendo desconectar y volver a reconectar sin parar el proceso que hemos lanzado. Obviamente, todo esto que digo lo digo sin usar cosas como segundo plano, NOHUP, redirecciones y sin que sean demonios. Por ejemplo, imaginémonos que estamos conectados a un equipo remoto y decidimos compilar KDE, no vamos a estar con la terminal viendo pasar todas las líneas de compilación.
Menos palabrería y veamos un ejemplo práctico. Lo primero es tener dos máquinas (por lo menos), una hará de equipo remoto (rf1) y la otra de equipo local (mine). Obviamente, ambas máquinas deberían estar conectadas de alguna manera: red local, modem, etc. Y lo segundo es tener el software screen instalado, no os preocupéis mucho ya que se encuentra en todas las distribuciones (por lo menos se encuentra en todas las “grandes”) y suele instalarse por defecto. Ahora que tenemos todo preparado, comencemos con el ejemplillo.

Empecemos tecleando el comando en pantalla:
mine:~> screen
Nos aparecerá un texto en el que se nos comunica la licencia (GPL) y otras cosillas e indicando que pulsemos la barra de espacio para continuar o bien [Enter] para salir. Si habéis pulsado [Espacio] no notaréis nada nuevo, vamos que la pantalla se ha “limpiado” y os habéis quedado como antes. Paz y armonía, no os estoy timando, si listáis los procesos que se están ejecutando en vuestro sistema veréis que sí se está ejecutando:

Si os aparece algo por el estilo es que todo va bien. Continuemos. Bueno, mejor no continuamos, vamos a ver cómo funciona screen. screen funciona mediante “teclas rápidas”, “atajos de teclado”, “combinaciones de teclas”, es decir, pulsando combinaciones de teclas. Os pongo unas cuantas a continuación:
[Ctrl]+[D] -> Cierra la terminal, si es la única que tenemos bierta, salir de screen
[Ctrl]+[A],[C] -> Nos permite abrir más terminales virtuales
[Ctrl]+[A],[N] -> Nos permite cambiar de una terminal a otra
[Ctrl]+[A],[Shift]+[C] -> Nos permite renombrar el terminal, por defecto todos se llaman bash
[Ctrl]+[A],[D] -> Nos permite cerrar la terminal sin cerrar los procesos que se están ejecutando
[Ctrl]+[A],[?] -> Nos muestra las combinaciones de teclas
Vale, vale, muy bonito, pero sigue con el ejemplo. OK, seguimos con el ejemplo. Ahora que tenemos screen corriendo, vamos a conectarnos con un equipo remoto:


Vemos que no aparece nada nuevo así que vamos a lanzar una tarea “interminable”, un ping:





Dejamos que pasen unos cuantos pings y ahora pulsamos:[Ctrl]+[A],[D].Nos aparecerá el mensaje que vemos en la siguiente imagen.



Vale, ¿y? Pues nada, ahora nos podemos desconctar y conectarnos de nuevo tecleando screen -r y volveremos a conectarnos al ping ese que hemos dejado corriendo sin que se haya interrumpido :) Útil, ¿no?
Ahora que ya habéis visto cómo funciona y una de sus ventajas … echad mano del man y de Internet así como de vuestra imaginación y haced buen uso de screen ;)

Ruteo de paquetes IP

Extraido de: http://www.investigacion.frc.utn.edu.ar/labsis/Publicaciones/AdminTcp/ruteo.html

Como se describió previamente, la principal responsabilidad del protocolo IP es determinar qué camino deben tomar los paquetes para llegar al punto de destino. La tarea de determinar ese camino es lo que se conoce como ruteo (o encaminamiento).
IP asume que la computadora está directamente conectada a una red local (por ejemplo, una LAN Ethernet) y que puede enviar paquetes directamente a cualquier otra computadora sobre esa misma red; si la dirección de destino es en la red local, IP simplemente accede al medio físico de transmisión y envía el paquete. En la figura siguiente, Antares y Rigel están sobre la misma red, por lo que pueden comunicarse directamente:
 
El problema aparece cuando la dirección de destino queda en otra red, en cuyo caso IP recurrirá a un gateway para enviar indirectamente los paquetes. Como se recordará, se denomina gateway19 a un dispositivo (ya sea otra computadora o un dispositivo específicamente diseñado a tal efecto) que está conectado a más de una red y tiene la capacidad para redirigir (forward) paquetes entre esas redes. En la figura, Orión, Andrómeda, Cygni y Centauri son los gateways de la red.
Para determinar a qué gateway deberán enviarse los paquetes, IP extrae la dirección de red del nodo de destino y consulta una tabla, denominada tabla de ruteo, en la cual se listan las redes conocidas y los gateways que pueden utilizarse para alcanzarlas. Por ejemplo, la tabla de ruteo de Aldebarán contiene la siguiente información:
Red
Gateway
170.25.1.0
170.25.3.254
170.25.2.0
170.25.3.254
170.25.3.0
*
170.25.4.0
170.25.3.253


en donde el asterisco indica que no es necesario ningún gateway para llegar a la red en cuestión dado que la máquina tiene conexión directa a la misma. Obsérvese en primer lugar que el ruteo hacia redes remotas se realiza en base a direcciones de red (esto es, la parte de host de la dirección IP se ignora); además, la tabla de ruteo especifica tanto la red local como las remotas, y que para el caso de éstas últimas, indica la dirección IP de alguna máquina en la red local que puede ser utilizada para alcanzarla.
Supongamos, por ejemplo, que Altair requiere enviar datos a Canopus. El módulo IP de Altair determina que la computadora de destino no pertenece a su misma red; consultando su tabla de ruteo, determina que puede llegarse a la red de Canopus a través de Orión, por lo que le envía los paquetes a dicha computadora. El módulo IP residente en Orión, por su parte, sabe que para llegar a Canopus hay dos vías posibles: pasando por Andrómeda o por Cygni. Aplicando algún criterio para evaluar ambas rutas y seleccionar la mejor de ellas, Orión envía cada paquete a, por ejemplo, Andrómeda. Esta última determina que la dirección de destino está en una de las redes a las que se encuentra directamente conectada, por lo que los envía diretamente a Canopus.
Es importante observar que la ruta que seguirán los paquetes desde el origen hasta su destino se va decidiendo a medida que los mismos viajan por la red. Cada nodo es responsable de determinar cual es el proximo "salto" en dirección al nodo final, en función del contenido de su tabla de ruteo. Este modelo de ruteo asume que si el nodo de destino no pertenece a la red local, deberá haber una entrada en la tabla de ruteo que especifique el gateway a utilizar. En otras palabras, asume que todos los nodos están al tanto de la estructura de la red.
En consecuencia, cada vez que la estructura de la red cambia (por ejemplo, cuando se agrega o elimina una subred), el administrador debería actualizar las tablas de ruteo en todos los nodos. Igualmente, si la red se interconectara a otra red, una nueva entrada debería agregarse en las tablas de ruteo de cada máquina.
Siguiendo con este razonamiento, a medida que la red crece y se interconecta a otras redes las tablas de ruteo se hacen mas largas y complejas; inclusive sería posible que fueran virtualmente imposibles de construir o mantener, en especial si la red se conecta a Internet (formada por miles de redes independientes).
Por supuesto, existen previsiones para enfrentar estos problemas: el ruteo dinámico o adaptativo y las rutas por defecto.
Ruteo estático vs. ruteo dinámico
La tabla de ruteo de un host puede construirse de dos maneras. Una posibilidad consiste en que el administrador (por medio de scripts que se ejecutan al inicializar el sistema, o por medio de comandos ejecutados interactivamente) introduzca manualmente las entradas de la tabla. Esta técnica se denomina ruteo estático, debido a que la tabla de ruteo se construye cuando la computadora se prende y no varia con el tiempo.
La otra posibilidad es ejecutar en cada host un programa que actualice automática y periódicamente la tabla de ruteo. Dichos programas se basan en el hecho de que una computadora siempre tiene acceso a otras computadoras conectadas a la red local; esto se traduce en que las tablas de ruteo contienen inicialmente al menos las direcciones de las redes locales. Si tomamos por caso a Orión, su tabla de ruteo inicialmente contendría la siguiente información:

Red
Gateway
170.25.1.0
*
170.25.2.0
*
170.25.3.0
*


De manera similar, la tabla de Andrómeda contendrá lo siguiente:
Red
Gateway
170.25.3.0
*
170.25.4.0
*


Si Orión y Andrómeda intercambiaran sus tablas de ruteo, cada una podría "aprender" de la otra qué redes son alcanzables por esa vía. Así, Andrómeda podría concluir lo siguiente:
Red
Gateway
170.25.1.0
170.25.3.254
170.25.2.0
170.25.3.254
170.25.3.0
*
170.25.4.0
*


Así, si todos los nodos de la red ejecutan un programa de estas características (llamado demonio de ruteo) al cabo de cierto tiempo habrán "descubierto" por si mismas la estructura de la red y construido sus tablas automáticamente. Mas aún, si se produjera algún cambio en la estructura de la red, bastaría con que alguna de las computadoras lo detectara para que en pocos segundos esa nueva información se propagara por toda la red.
Esta estrategia se denomina ruteo dinámico o adaptativo y tiene la ventaja de que, al ser automático, permite eliminar las tareas administrativas relacionadas con el mantenimiento de las tablas de ruteo.
En ambientes Unix se dispone de dos programas que implementan este tipo de protocolos de ruteo: routed y gated.
Rutas por defecto
El uso de ruteo dinámico elimina la necesidad de modificar las tablas de ruteo cuando la red cambia. Sin embargo, no resuelve el problema de las abultadas tablas de ruteo resultantes de conectar una red a muchas otras.
Consideremos la tabla de ruteo que construiría una máquina como Altair:

Red
Gateway
170.25.1.0
170.25.2.254
170.25.2.0
*
170.25.3.0
170.25.2.254
170.25.4.0
170.25.2.254


Como puede verse, Altair ha aprendido las rutas a todas las subredes de la red, pero el único gateway que puede utilizar es Orión. De manera similar, si fuera posible que todas las computadoras de la red del ejemplo aprendieran las direcciones de todas las redes que forman la Internet, Altair eventualmente construiría una tabla de ruteo con miles de entradas, en donde todas tendrían a Orión como gateway. En ambos casos, el resultado es una tabla de ruteo con información altamente redundante.
Para eliminar este problema, es que puede instalarse en la tabla de ruteo una ruta por defecto (conocida también como default gateway). IP utiliza la ruta por defecto (que se indica con el número 0.0.0.0) cada vez que no se encuentra en la tabla de ruteo una ruta hacia una red específica. Aplicando éste criterio, la tabla de Altair se reduciría a lo siguiente:

Red
Gateway
170.25.2.0
*
0.0.0.0
170.25.2.254


que sencillamente indica que si la dirección de destino está en la red local, es accesible directamente, y que en caso contrario (independientemente de cual sea el destino), los paquetes deberán enviarse a 170.25.2.254 (es decir, Orión).
Configurando los nodos
Caso 1: Redes sin segmentación interna
En este caso, se tiene una red pequeña, en la que todas las computadoras están ubicadas sobre el mismo segmento físico y no hay ninguna conexión a otras redes TCP/IP:



Como se puede ver, todas las computadoras tienen acceso directo a todas las demás. La tabla de ruteo será mínima; solo contendrá una referencia a la red local y a la red de loopback instaladas automáticamente por ifconfig al inicializar las interfaces correspondientes.
Puede utilizarse el comando route -n para examinar el contenido de la tabla de ruteo (-n indica a route que utilice formato numérico):
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
205.12.9.0 0.0.0.0 255.255.255.0 U 0 40 1252 eth0

En el listado anterior, la primera columna indica dirección de red (que debe interpretarse de acuerdo a la mascara de la tercera columna) y la segunda columna indica el gateway a utilizar (0.0.0.0 se utiliza para indicar que hay conexión directa a la red en cuestión. Route también muestra información adicional sobre cada ruta:
    Flag: Se compone de una serie de caracteres que indican las características de la ruta. Por ejemplo, U indica que la ruta está operacional (por Up), G que es una ruta a un gateway, H que es una ruta a un host, etc.
    Metric: Valor utilizado para cuantificar la ruta. IP utiliza este valor para seleccionar la mejor de dos o más rutas alternativas a la misma red.
    Ref: Cantidad de veces que ésta ruta fue utilizada para establecer una conexión.
    Use: Cantidad de paquetes trasmitidos a través de esa ruta.
Si esta misma red se conectara a otras redes (por ejemplo, la Internet), sería necesario indicar en cada uno de los hosts de la red una ruta estática por defecto hacia el gateway a las otras redes:
 
Las rutas por defecto puede instalarse en las estaciones por medio del siguiente comando route:
# route add -net default 205.12.9.254
Si ahora se reexaminara la tabla de ruteo en dichas estaciones, se obtendría el siguiente resultado:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
205.12.9.0 0.0.0.0 255.255.255.0 U 0 40 1252 eth0
0.0.0.0 205.12.9.254 0.0.0.0 UG 0 0 0 eth0

Obsérvese que Orión interconecta nuestra red con el exterior, por lo que tiene una dirección en la red local (170.25.9.254) y otra en la red del proveedor de acceso a la otra red (en este caso, la Internet). A fin de lograr la conectividad, deberá instalarse en Orión una ruta por defecto hacia el exterior, utilizando como gateway una dirección que el proveedor especifique, por ejemplo:
# route add -net default 150.104.3.254
Por otra parte, el proveedor deberá instalar en sus ruteadores alguna ruta que indique que nuestra red es alcanzable a través de la dirección 150.104.3.21, cerrando así el ciclo de entrada y salida a nuestra red.
Caso 2: Redes segmentadas
En este caso, la red está compuesta por varios segmentos unidos entre sí por gateways. Una primera opción sería ejecutar un demonio de ruteo dinámico en todas las computadoras, y dejar que las tablas se actualicen automáticamente. Sin embargo si tal programa no estuviera disponible (o por alguna razón se decide no emplearlo) bastaría con instalar en las computadoras de cada segmento una ruta estática por defecto hacia el gateway Orión, tal como se muestra en la siguiente figura:

Para obtener esta configuración, en Antares y Rigel habría que ejecutar el siguiente comando:
# route add -net default gw 170.25.1.254
mientras que en Altair y Aldebarán el comando sería:
# route add -net default gw 170.25.2.254
No es necesario instalar manualmente ninguna ruta en Orión, debido a que todas las necesarias serán instaladas automáticamente por ifconfig.
Sería diferente si la red tuviera más subredes:
 

En éste caso, sería necesario informar a Orión acerca de la existencia de la red 170.25.4.0, y a Andrómeda acerca de las redes 170.25.1.0 y 170.25.2.0. Una vez mas, puede utilizarse el comando route para instalar las rutas, utilizando la siguiente sintaxis:
# route add -net red netmask máscara gw gateway
Por ejemplo, en Andrómeda habría que ejecutar los siguientes comandos:
# route add -net 170.25.1.0 netmask 255.255.255.0 gw 170.25.3.254
# route add -net 170.25.2.0 netmask 255.255.255.0 gw 170.25.3.254
con lo que la tabla de ruteo quedaría conformada de la siguiente manera:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
170.25.3.0 0.0.0.0 255.255.255.0 U 0 105 11252 eth0
170.25.4.0 0.0.0.0 255.255.255.0 U 0 55 1976 eth1
170.25.1.0 170.25.3.254 255.255.255.0 UG 0 20 841 eth0
170.25.2.0 170.25.3.254 255.255.255.0 UG 0 33 976 eth0

Finalmente, si la red tuviera conexión a redes externas, sería necesario instalar en los gateways una ruta por defecto que conduzca hacia el gateway al exterior:
 

En Orión:
# route add -net default gw 170.25.3.253
En Andrómeda:
# route add -net default gw 170.25.4.253
Opciones al comando route
En todos los ejemplos anteriores se utilizó el comando route para instalar rutas manualmente en la tabla de ruteo. Sin embargo, al igual que ocurre con ifconfig, usualmente el administrador no instala las rutas introduciendo comandos manualmente (o modificando scripts de inicialización del sistema), sino que se limita a modificar archivos de configuración o utilizar alguna herramienta gráfica.
En el caso de Red Hat Linux, la utilidad netcfg que se mencionó con anterioridad puede utilizarse para configurar la ruta por defecto e instalar rutas estáticas. También pueden realizarse estas tareas modificando manualmente archivos de configuración network y static-routes respectivamente, ubicados ambos bajo /etc/sysconfig.