Ir al contenido

Entradas etiquetadas como ‘servidores’

1
sep

Servidor PXE

Introducción

Un servidor PXE es un sistema capaz de brindar a sus clientes la opción de instalación vía red (netinstall). Es una forma muy rápida y cómoda de realizar la instalación de un sistema operativo dado que no se necesita siquiera que el equipo a instalar cuente con una lectora de CD/DVD. Además, un servidor PXE puede contar con la capacidad de instalar múltiples sistemas operativos, evitándonos tener uno o más CDs/DVDs por cada sistema. Otra ventaja es que la instalación se realiza obteniendo los paquetes desde un repositorio central con lo que, terminada la instalación, el sistema contará con las últimas versiones de cada paquete. Esto mismo puede suponer una desventaja si la conexión a Internet es lenta, aunque en este último caso lo ideal es montar un mirror de los sistemas necesarios de manera que los archivos se descarguen mucho más rápido.

Para montar un servidor PXE propio utilizaremos Debian Lenny y los siguientes programas:

  • Servidor DHCP.
  • Servidor TFTP.

En la sección siguiente se procede a la instalación y configuración del servidor en cuestión.

Instalación y configuración

Instalar el software necesario.

pxe-server:~# aptitude install tftpd-hpa dhcp3-server

Una vez instalados ambos servicios, es necesario permitir el inicio de tftpd-hpa como demonio, de la siguiente manera:

pxe-server:~# vi /etc/default/tftpd-hpa 

RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"

Si el directorio /var/lib/tftpboot no existiera será necesario crearlo. Ahora bien, el próximo paso es iniciar el servidor TFTP.

pxe-server:~# /etc/init.d/tftpd-hpa start

Luego de configurado TFTP, habrá que indicarle al servidor DHCP las interfaces en las que debe ofrecer IPs. En este caso se utiliza la eth0.

pxe-server:~# vi /etc/default/dhcp3-server

INTERFACES="eth0"

El próximo paso es instruir al servidor DHCP acerca de la información de configuración que debe brindar.

pxe-server:~# vi /etc/dhcp3/dhcpd.conf

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.250;
  option routers 192.168.1.1;
  option domain-name-servers 192.168.1.1;

  filename "pxelinux.0";
}

Una vez cumplidos los dos pasos anteriores ya se puede poner a funcionar el servidor DHCP.

pxe-server:~# /etc/init.d/dhcp3-server restart

Constatar entonces que tanto el servidor DHCP como el servidor TFTP estén funcionando.

pxe-server:~# netstat -nlup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2684/dhcpd3
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1706/dhclient3
udp        0      0 0.0.0.0:69              0.0.0.0:*                           2379/in.tftpd

El paso siguiente es descargar los archivos necesarios para realizar la instalación por red. En este caso se mostrará cómo configurar al servidor para que permita instalar Debian Lenny.

pxe-server:~# cd /var/lib/tftpboot/
pxe-server:/var/lib/tftpboot# lftp -c "open http://http.us.debian.org/debian/dists/lenny/main/installer-i386/current/images/netboot/; mirror"

Listo, el servidor ya está configurado y funcionando. A partir de este momento ya es posible instalar Debian Lenny en cualquier equipo vía red. Para ello, se configura el cliente para que bootee utilizando PXE, se lo conecta en el mismo segmento de red en que se encuentra el servidor configurado y listo, la instalación comenzará automáticamente.

14
ago

Wake On LAN: prender un equipo de forma remota

Wake On LAN: ¿Qué es y para qué sirve?

Muchas veces es necesario acceder a una máquina remota por algún motivo aunque puede que la necesidad sea eventual y no se justifique el gasto de tenerla encendida todo el tiempo. Para estas oportunidades, la técnica de Wake On LAN (WOL) es ideal. Básicamente, nos permite encender un equipo utilizando como único medio la red local.

WOL tiene dos prerrequisitos fáciles de cumplir: requiere que la computadora a ser encendida soporte WOL y esté conectada a una red Ethernet. Su forma de funcionamiento es igualmente simple: se envía una trama especial, llamada paquete mágico (magic packet), que contiene dentro la dirección MAC de la PC a “despertar” repetida 16 veces. De esta manera, la PC que está apagada recibe dicha trama, detecta el paquete mágico y al verificar que la MAC contenida es la propia envía una señal de encendido. Lógicamente, para que esto funcione es necesario que la placa de red siga recibiendo energía, con lo cuál existe un mínimo consumo.

Configurando WOL en la máquina destino.

Para habilitar WOL es necesario hacerlo primero desde el BIOS, desde la sección Power Management (administración de energía). Allí se encuentra una opción normalmente referida como Wake On LAN, Wake on MAC LAN o algo parecido. Lógicamente, hay que habilitar dicha opción. En la mayoría de los sistemas debería alcanzar con eso, dado que WOL es una característica independiente del sistema operativo. No obstante, en un caso (con un motherboard MSI K9N Neo) no me funcionó dicha opción y lo habilité desde Linux. Por ello explicaré a continuación cómo hacerlo.

testing:~# ethtool eth0
Settings for eth0:
        Supported ports: [ MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 1
        Transceiver: external
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Link detected: yes

De la salida anterior importan particularmente dos opciones: Supports Wake-on y Wake-on. La primera de ellas, con una g indica que la placa de red soporta efectivamente WOL; la segunda, con una d indica que WOL está desactivado en esa interfaz. Para habilitarlo:

testing:~# ethtool -s eth0 wol g
testing:~# ethtool eth0
Settings for eth0:
        Supported ports: [ MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 1
        Transceiver: external
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: g
        Link detected: yes

Despertando un equipo por LAN.

Para encender un equipo por LAN se necesita enviar el paquete mágico. Hay varias utilidades que hacen esto. En Linux se puede utilizar wakeonlan y en Mac existe una utilidad free llamada WakeUp. Mikrotik también lo soporta con una utilidad propia, que se verá a continuación.

Utilizando wakeonlan en Linux.

Si el equipo a encender está en la misma red alcanza con el siguiente comando, indicando sólo la MAC del mismo. En este caso se supone que la MAC es 08:00:27:e8:02:6b.

leandro@megan:~$ wakeonlan 08:00:27:e8:02:6b
Sending magic packet to 255.255.255.255:9 with 08:00:27:e8:02:6b

Si el equipo está en otra red entonces son necesarios algunos pasos y parámetros adicionales:

  • La utilidad wakeonlan envía el paquete mágico al puerto 9 UDP. Por tal motivo, en caso de utilizar NAT es necesario redirigir ese puerto a la IP de la máquina destino. De le contrario será necesario sólo habilitarlo en el firewall.
  • La máquina que ejecute la utilidad para prender el equipo remoto debe ahora apuntar a la IP del router que redirigirá el paquete.

A continuación se muestran los parámetros del comando dado que no es tema de este post explicar cómo redirigir puertos. Se supone aquí que el router hace NAT y tiene la IP 10.0.0.1.

leandro@megan:~$ wakeonlan -i 10.0.0.1 08:00:27:e8:02:6b
Sending magic packet to 10.0.0.1:9 with 08:00:27:e8:02:6b

Utilizando la utilidad de Mikrotik.

Con un router Mikrotik, basta con especificar la MAC del sistema destino y, opcionalmente, la interfaz mediante la cual dicho sistema se conecta.

[leandro@MikroTik] > tool wol mac=08:00:27:e8:02:6b interface=LAN
1
ago

Nginx + PHP + FastCGI + MySQL + FreeBSD

El objetivo de este post es explicar la configuración mínima para tener funcionando sobre un sistema FreeBSD 8 un servidor web muy liviano con Nginx y FastCGI, con soporte para PHP y MySQL.

Un poco de la arquitectura

Como ya comenté, el servidor web estará basado en un sistema FreeBSD 8 por diferentes motivos:

  • Altamente estable.
  • Muy seguro en su configuración por defecto.
  • Sistema liviano, sin servicios innecesarios ni paquetes de software que no sean indispensables para el funcionamiento del sistema.

Además de lo anterior me gustan los sistemas BSD y también trabajar con diferentes entornos operativos, lo cual también ayudó en la elección.

Para brindar el servicio web el elegido fue Nginx, debido a que es un servidor web muy liviano y estable, capaz de ofrecer alta performance y con una configuración muy sencilla. Como se comenta en su wiki, Nginx es el motor de alrededor del 6.55% de los servidores web del mercado, siendo el backend de varios sitios importantes como WordPress, Hulu, Ohloh, Git HUB, Source Forge y Torrent Reactor.

Ahora bien, para servir los requerimientos de FastCGI se utilizará spawn-fcgi, que es una implementación empaquetada del código escrito originalmente para dar soporte a FastCGI en Lighttpd.

Por su parte, las versiones de MySQL y PHP serán la 5.5 y la 5.3.3 respectivamente, con la primera disponible en los repositorios de FreeBSD. En el caso de PHP, será necesario compilarlo desde los fuentes.

Pasos preliminares

Se asume que se cuenta con un sistema FreeBSD 8 instalado y funcionando correctamente, con los repositorios de paquetes configurados. En el sistema utilizado para este tutorial los únicos servicios que se ejecutan son sendmail (viene por defecto con FreeBSD) y SSH, como se puede ver a continuación:

[root@ ~]# netstat -na -p tcp | grep -i listen
tcp4       0      0 127.0.0.1.25           *.*                    LISTEN
tcp4       0      0 *.22                   *.*                    LISTEN
tcp6       0      0 *.22                   *.*                    LISTEN

Instalación del servidor MySQL

Lo primero a instalar será el servidor de bases de datos, dado que es el paso más simple de realizar. Para ello, se instala y se define que se desea permitir que el servicio se inicie y que lo haga automáticamente con el sistema. Dicha acción se define en el archivo /etc/rc.conf. Finalmente se inicia el servicio.

[root@ ~]# pkg_add -r mysql55-server

[root@ ~]# vi /etc/rc.conf
mysql_enable="YES"

[root@ ~]# /usr/local/etc/rc.d/mysql-server start

A continuación puede verse que el servicio está efectivamente esperando por conexiones en el puerto TCP 3306.

[root@ ~]# netstat -na -p tcp | grep -i listen
tcp4       0      0 127.0.0.1.25           *.*                    LISTEN
tcp4       0      0 *.22                   *.*                    LISTEN
tcp6       0      0 *.22                   *.*                    LISTEN
tcp46      0      0 *.3306                 *.*                    LISTEN

Instalación y configuración de Nginx

El servidor nginx está también disponible en los repositorios de paquetes de FreeBSD, con lo cuál para instalarlo basta con ejecutar lo siguiente:

[root@ ~]# pkg_add -r nginx

Ahora bien, si se desea que el servidor sea accesible desde otros lugares es necesario editar el nombre del mismo desde el archivo de configuración de nginx y cambiar el nombre localhost por uno válido o por la IP del servidor.

[root@ ~]# vi /usr/local/etc/nginx/nginx.conf
        server_name  NOMBRE_SERVIDOR;

Luego, es necesario nuevamente definir el inicio del servicio y arrancarlo.

[root@ ~]# vi /etc/rc.conf
nginx_enable="YES"

[root@ ~]# /usr/local/etc/rc.d/nginx start

A continuación puede verse que el servicio está efectivamente esperando por conexiones en el puerto TCP 80.

[root@ ~]# netstat -na -p tcp | grep -i listen
tcp4       0      0 *.80                   *.*                    LISTEN
tcp4       0      0 127.0.0.1.25           *.*                    LISTEN
tcp4       0      0 *.22                   *.*                    LISTEN
tcp6       0      0 *.22                   *.*                    LISTEN
tcp46      0      0 *.3306                 *.*                    LISTEN

Instalación y configuración de PHP

Como se dijo al principio del post, PHP se instalará desde los fuentes, con lo cuál será necesario cumplir algunas dependencias y luego realizar la compilación. En este caso, PHP se compilará con soporte para zlib, gd y mysql.

[root@ ~]# pkg_add -r gd libXpm
[root@ ~]# cd /usr/rsc
[root@ /usr/src]# wget -c http://ar2.php.net/distributions/php-5.3.3.tar.bz2
[root@ /usr/src]# tar -xvjf php-5.5.5.tar.bz2
[root@ /usr/src/php-5.3.3]# ./configure --with-zlib --with-gd --with-mysql --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/local/lib --with-xpm-dir=/usr/local/lib
[root@ /usr/src/php-5.3.3]# make
[root@ /usr/src/php-5.3.3]# make install

Configurar el soporte para FastCGI

Este paso es muy simple y consiste en instalar spawn-fcgi, configurar su inicio, arrancarlo e indicarle a Nginx que los requerimientos PHP los redirija a dicho servicio. Todo esto se hace como se ve a continuación.

[root@ ~]# pkg_add -r spawn-fcgi

[root@ ~]# vi /etc/rc.conf
spawn_fcgi_enable="YES"

[root@ ~]# /usr/local/etc/rc.d/spawn-fcgi start

Luego de iniciado el servicio, se puede ver que el mismo está efectivamente escuchando en el puerto TCP 9000.

[root@ ~]# netstat -na -p tcp | grep -i listen
tcp4       0      0 *.80                   *.*                    LISTEN
tcp4       0      0 127.0.0.1.9000         *.*                    LISTEN
tcp4       0      0 127.0.0.1.25           *.*                    LISTEN
tcp4       0      0 *.22                   *.*                    LISTEN
tcp6       0      0 *.22                   *.*                    LISTEN
tcp46      0      0 *.3306                 *.*                    LISTEN

Ahora sí, finalmente, indicarle a Nginx dos cosas:

  • Que considere las páginas index.php como páginas de inicio. Esto se realiza agregando el valor index.php al final de la directiva index.
  • Que procese los scripts PHP con spawn-fcgi. Ya existe una configuración que simplemente se debe descomentar para que esto funcione.
[root@ ~]# vi /usr/local/etc/nginx/nginx.conf

            index  index.html index.htm index.php;

        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/www/nginx/$fastcgi_script_name;
            include        fastcgi_params;
        }

Una aclaración es que la variable fastcgi_param debe indicar el path completo al directorio raíz de nginx, dado que el valor que incluye por defecto no funciona.

Pasos finales

Si se cumplieron todos los pasos anteriores y no surgió ninguna dificultad ya se cuenta entonces con la implementación de la arquitectura planteada funcionando correctamente. Ahora sólo resta publicar los sitios web que se deseen.

12
jul

Habilitar SNMP en Mikrotik

Los routerboard Mikrotik incluyen la posibilidad de monitorearlos utilizando SNMP de forma muy sencilla, como puede verse a continuación.

[user@core-gateway] > snmp set enabled=yes contact="root@netstorming" location="communications-room" trap-community=public
[user@core-gateway] > snmp print
         enabled: yes
         contact: "root@netstorming"
        location: "communications-room"
       engine-id: ""
    engine-boots: 0
     time-window: 15
       trap-sink: 0.0.0.0
  trap-community: public
    trap-version: 1
[user@core-gateway] > snmp community print
 # NAME                                                                                                               ADDRESS            SECURITY   READ-ACCESS
 0 public                                                                                                             0.0.0.0/0          none       yes
[user@core-gateway] > snmp community set 0 address=172.16.30.2
[user@core-gateway] > snmp community print
 # NAME                                                                                                               ADDRESS            SECURITY   READ-ACCESS
 0 public                                                                                                             172.16.30.2/32     none       yes

En los comandos anteriores puede verse que se habilita SNMP, se utiliza la comunidad por defecto public que nos permite consultar diferentes MIBS al equipo y se la restringe para que sólo se la pueda consultar desde la IP 172.16.30.2 que es la IP del servidor de monitoreo.

Se puede constatar que lo anterior funcione correctamente ejecutando el comando snmpwalk en dicho servidor:

scarlet:~ leandro$ snmpwalk -v1 -c public 172.16.30.1
SNMPv2-MIB::sysDescr.0 = STRING: router
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.14988.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (29815700) 3 days, 10:49:17.00
SNMPv2-MIB::sysContact.0 = STRING: root@netstorming
SNMPv2-MIB::sysName.0 = STRING: core-gateway
SNMPv2-MIB::sysLocation.0 = STRING: communications-room
SNMPv2-MIB::sysServices.0 = INTEGER: 78
...

La salida es mucho más extensa que lo que se muestra, pero si se obtiene algo de lo anterior entonces se puede asumir que SNMP está funcionando correctamente en el equipo y que el servidor es capaz de obtener la información que necesita.

29
jun

BitTorrent para actualizar Facebook y Twitter

Muchos sistemas operativos libres utilizan el protocolo BitTorrent para que los usuarios descarguen los CDs y DVDs del mismo por su gran eficiencia, dado que no sólo se pueden lograr grandes velocidades de transferencia sino que además se reduce de manera muy importante el tráfico en los servidores propios.

Pero eso no es todo, dado que recientemente desde Facebook y Twitter comentaban que utilizan dicho protocolo para hacer actualizaciones masivas del código en sus servidores, una tarea que les lleva en la actualidad unos pocos minutos. Sin dudas una solución muy buena para conocer y comenzar a implementar, aunque sin dudas a una escala menor (al menos en mi caso). Si lo hago lo estaré comentando por aquí oportunamente.