martes, enero 30, 2007

Nueva versión de Putty

Acaba de salir la versión nueva de putty, el completo cliente ssh para Windows y Unix. la nueva versión, beta 0.59, tiene varios cambios interesantes. Quizás el mejor de todo para mi , es el soporte para puerto serie para funcionar como los antiguos emuladores de terminales como el minicom. Hay varias mejoras en el soporte criptográfico de la aplicación, mejor soporte de fuentes en Windows y varios bugfixes. Para mi es uno de los software imprecindibles que hay que tener en Windows.

Putty nos permite conectarnos a máquinas a través de la suite de protocolos ssh, telnet o usar una conexión directa a serie. También nos permite usar túneles ssh para establecer conexiones seguras, permite el reenvío de sesiones X11, y muchas más cosas que me dejo en el tintero :)

viernes, enero 26, 2007

El kernel de Windows Vista: Un artículo sobre la planificación de tareas e hilos. Enlaces simbólicos. Cambios de I/O

Mark Russinovich, creador de Sysinternals - recientemente comprado por Microsoft - ha escrito junto a David Salomon varios libros sobre las tripas del S.O Windows construido a partir del núcleo NT (NT,2000, XP, 2003 y Vista). Dan una visión interna y profunda del sistema, y merece la pena para quien le guste. Ahora, trabaja para Microsoft, y hace poco ha publicado este artículo sobre las modificaciones que se han realizado a nivel de la planificación de tareas en el núcleo. Actualmente el planificador de tareas de los núcleos utiliza el tick del reloj para planificar el tiempo de ejecución de cada hilo. El problema, es que dentro de este tiempo de ejecución puede haber tiempo dedicado a otras tareas (interrupciones del sistema) que no se tiene en cuenta.

La modificación de Windows Vista es usar los contadores de ciclos que tienen actualmente la mayoría de los microprocesadores para poder de esa manera hacer la planificación de tareas y así ver cuanto tiempo ha usado un hilo determinado, y saber si se tiene que cambiar de hilo.

Otra modificación es un planificador para aplicaciones multimedia, denominado Multimedia Class Scheduler Service (MMCSS). Este planificador se encarga de cambiar la prioridad de los hilos registrados con el mismo, para que tengan la cantidad de CPU que han solicitado.

Otras novedad, por llamarla de alguna manera - lleva en Unix más de 20 años - son los enlaces simbólicos en NTFS.

Por último se ha añadido un planificador de entrada y salida para poder priorizar las peticiones de las aplicaciones de acuerdo con una política y modificaciones en el uso de los completion ports un objeto que se usa para sincronizar las entradas y salida asíncronas en Windows, con la idea de evitar cambios de contextos innecesarios.

Por supuesto, el artículo pone los dientes largos para el próximo libro que quieren publicar sobre las tripas de Windows, la revisión del Windows Internals, que será la 5º.

Technorati Tags: ,

jueves, enero 25, 2007

Configuración avanzada de TCP/IP en Linux (IV): Gestión de las direcciones. Interpretando la información

Mostrando información

Si queremos ver las direcciones asociadas a una determinada interfaz es fácil de ver con la orden ip address ls o ip address show:
terron@menzoberrazan:~$ ip addr ls
1: lo:  mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.1/24 brd 192.168.2.255 scope global eth0
3: ath0:  mtu 1500 qdisc pfifo_fast qlen 200
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.201/24 brd 192.168.1.255 scope global ath0
Puede verse los tres interfaces que tiene la máquina: se ve las direcciones de nivel de enlace (tipo link/ether), las direcciones IPv4 (inet) y en caso de existir direcciones IPv6, vendrían precedidas por inet6. Como con la mayoría de comandos de la orden ip, podemos seleccionar lo que nos puede mostrar. Así podemos seleccionar por la interfaz que nos interesa, con el alcance que tenga la dirección, hacia donde donde va la ruta, o bien por una etiqueta. La sintaxis completa del comando para mostrar la información es la siguiente:
 ip addr  show [ dev STRING ] [ scope SCOPE-ID ] [ to PREFIX
               ] [ FLAG-LIST ] [ label PATTERN ]
Sin embargo, vemos información muy interesante en la salida de este comando. En primer lugar, si nos fijamos en el ejemplo anterior tendremos en primer lugar la dirección y la máscara de red. Por ejemplo, en el caso de la interfaz eth0 del caso anterior, la dirección es 192.168.1.201 y la máscara de red es de 24 bits, es decir, 255.255.255.0. Vemos la dirección de difusión (broadcast) asociada a esa dirección en esa interfaz. Vemos el alcance donde es válida la dirección, en este caso es global. Si vemos el caso de la interfaz lo del ejemplo anterior tendremos que el alcance es host. Por último tenemos la etiqueta asociada a esa dirección, que en este caso coincide con el nombre del dispositivo.

Alcance de direcciones asociadas a direcciones IP

Una característica interesante de esta manera de configurar las direcciones es el alcance de las mismas. Así tenemos:
  • global:La dirección es válida de manera global, es decir, una dirección que puede usarse para alcanzar cualquier máquina.
  • site: Se trata de un alcance sólo válido con direcciones IPv6. Una dirección con este alcance significa que es válida dentro de este sitio.
  • link: La dirección es local y válida dentro del dispositivo de red. Por ejemplo, las direcciones del tipo 169.254.x.x de la RFC3927 son de este tipo.
  • host: La dirección sólo es válida dentro del host. La más clásica es la asociada a la interfaz loopback, 127.0.0.1

Technorati Tags: ,

lunes, enero 22, 2007

Configuración avanzada de TCP/IP en Linux (III): Configuración y manejo de las tablas arp y ndisc de las tablas arp a través de ip neigh

Cuando existen varios ordenadores conectados al mismo medio compartido - como puede ser una ethernet - es necesario encontrar que direcciones MAC de cada uno de ellos para poder comunicarse entre los mismos, así como la dirección MAC de los routers que enviarán los paquetes. El protocolo que se usa en TCP/IP para este trabajo recibe el nombre de ARP, y la información que se obtiene se almacena en las tablas ARP del sistema. Además, se esta utilidad maneja las tablas para el uso de proxy arp y ndisc (el protocolo para descubrir máquinas vecinas en la misma red en IPv6). En la terminología de Linux, esta tabla se denomina la tabla de vecinos.

Las tablas de vecinos (o tablas arp)

La manera más sencilla de ver esta tabla es usar el comando ip neigh ls (puede sustituirse ls por show):

terron@menzoberrazan:~$ ip neigh ls
192.168.1.5 dev ath0 lladdr yy:yy:yy:yy:yy:yy nud reachable
192.168.1.1 dev ath0 lladdr xx:xx:xx:xx:xx:xx nud stale

El formato de la tabla es sencillo. En primer lugar está la dirección IP (192.168.1.5 o 192.168.1.1), el dispositivo a través del cual se ha resuelto (en este caso la eth0), la direción de MAC (lladdr significa link layer address), el estado de alcance (nud es neighbourd unrechability deteccion). En este caso la primera entrada está reachable y la segunda stale. Este estado de alcance da información sobre la validez de la entrada en la tabla. Puede ser cualquiera de estos valores:

  • none: El estado de la entrada es vacío.
  • incomplete: Se ha producido una petición y el sistema está intentando averiguar la dirección mac asociada.
  • reachable: La entrada de la tabla es válida y alcanzable.
  • stale: La entrada de la tabla es válida pero no se sabe si es alcanzable. En caso de usarse la entrada el núcleo intentará comprobar su validez.
  • delay: Se ha lanzado un paquete usando una entrada de la tabla cuyo estado es delay. Se está esperando confirmación.
  • probe: El contador de tiempo asociado al estado delay ha terminado. El kernel está usando pruebas ARP o NDISC para verificar si el vecino al cual hace referencia la tabla es alcanzable.
  • failed: La resolución ha fallado.
  • noarp: La entrada es válida sin necesidad de usar protocolos arp o ndisc.
  • permanent: Entrada creada por el administrador. Es de tipo noarp.
  • router: Se trata de una entrada asociada a NDISC - IPv6 - que indica que el vecino es un router.

Para facilitar la extración de información de la tabla siempre podemos especificar filtros que nos faciten la información que queremos obtener. La sintaxís en este caso es:

ip neigh show [ to PREFIX ] [ dev DEV ] [ nud STATE ]

Podemos elegir que direcciones queremos ver con to, donde PREFIX no es más que una combinación de red o un host, podemos ver las entradas asociadas a un dispositivo usando dev o las entradas según el estado usando nud. Por ejemplo para ver todas las entradas asociadas al dispositivo eth0 se usaría:

ip neigh show dev eth0

Estas tablas llevan asociados contadores que manejan su tiempo de vida. Una vez que expira alguno de los contadores se produciran las acciones que llevan asociadas (por ejemplo sacar de la tabla una entrada no usada durante cierto tiempo). Los contadores puede accederse con la opción -s del comando ip.

Si estamos realizando pruebas de red, y tenemos problemas, podemos usar este comando para poder en primer lugar, ver si existe resolucion ARP. Un simple ping a una máquina y que no responda, podemos verificar la tabla de vecinos, y si no la entrada correspondiente está en failed es que no tenemos resolución arp.

En los Unix tradicionales está el comando arp para obtener esta información. Por ejemplo arp -na nos mostraría toda la tabla de vecinos del kernel.

Podemos manejar administrativamente la tabla con las órdenes add,del,change o replace, o bien borrarla complega con flush. El estado de detección puede fijarse a permanent,noarp,stale o reachable.

La sintáxis completa del comando es:

ip neigh { add | del | change | replace } { ADDR [ lladdr LLADDR ]
         [ nud { permanent | noarp | stale | reachable } ]

De esta manera podemos añadir entradas permanentes a la tablas de vecinos. Por ejemplo si quisieramos que en la interfaz eth0 la máquina 192.168.5.1 tuviese siempre la mac 11:22:33:44:55:66

ip neigh add 192.168.5.1 lladdr 11:22:33:44:55 dev eth0 nud permanent
Así se consigue que cualquier resolución MAC por eth0 hacía esa dirección utilice la dirección MAC que hemos configurado.

Si queremos borrar toda la resolución usamos ip neigh del. En este caso debemos especificar la dirección IP que queramos borrar, así como la interfaz por donde se ha producido la resolución:

ip neigh del 192.168.1.1 dev eth0
No deben de modificarse aquellas entradas NOARP añadidas por el kernel.

Para borrar toda la tabla, usamos un simple ip neigh flush. Por último comentar en la posibilidad de modificar un parámetro de una resolución con un ip neigh change

Proxy ARP

Existen circunstancias donde puede ser necesario el uso de un proxy ARP, es decir, que nuestra máquina responsa a peticiones ARP o NDISC en lugar del ordenador real (por ejemplo, por la existencia de un NAT). Para ello usamos la opción proxy que tiene el comando:
ip neigh proxy DIR [dev NAME]
De esta manera el sistema responderá con su dirección MAC a cualquier solicitud que busque la dirección MAC asociada con la dirección IP DIR. Si no se añade el nombre de la interfaz, responderá por todas las interfaces. En caso contrario,sólo con la señalada.

Technorati Tags: ,

viernes, enero 19, 2007

Algunas fotos de la costa portuguesa

Hace no mucho mi hermana estuvo con una amiga por la zona del Cabo San Vicente en Portugal, concretamente en la zona dos de sus playas, la de Castelejo y Cordoama. Hay un mirador en esta última playa que yo no conozco, pero desde donde mi hermana sacó las fotos:

Playa de Cordoama

Playa de Cordoama

Playa de Castelejo