Configurar UPS APC + Status por eMail en Debian, CentOS y SELinux.

El otro día me topé con un gran dilema, de si había un fantasma en mi oficina, o si el personal de limpieza me apagaba el server agrede, hice una recopilación de varios sitios buscando info sobre cómo poder configurar los UPS APC usb, de tal manera que cuando se interrumpiese la corriente eléctrica, éste me enviase un email con su estatus, de esa manera sabría a qué hora exacta fue la interrupción eléctrica, aclaro también que informa cuando la corriente vuelve, en caso de que el servidor se apague debido a que la batería no soporte tantas horas sin luz, es recomendable configurar el servidor para que inicie de manera autónoma.
Manos a la obra, vamos a necesitar lo siguiente:

Servidor dónde tengamos conectados los UPS, pueden ser Debian, CentOS o SELinux.
Tener configurado el servidor de correos Sendmail (Es lo mejor, tengo varios scrips de automatización que me envían diariamente un informe por correo.).
Un UPS, en mi caso tengo un APC Back-UPS RS 1500.

Configuración:

Conectar el UPS al servidor mediante el cable USB que trae.
Ahora tenemos que instalar el aplicativo "apcupsd" (www.apcupsd.org/), para ello dependiendo de la versión GNU/Linux que tengamos hacemos lo siguiente:
  • Debian: apt-get install apcupsd
  • CentOS: yum install apcupsd
  • SELinux: zypper in apcupsd
Ahora si vamos a meter mano y tratar de no romper nada, para las 3 distros anteriores vamos a editar el archivo de configuración de apcupsd, recuerden siempre hacerlo como root.
[root@miserver ~]# vi /etc/apcupsd/apcupsd.conf
Nos deslizamos a la Opción “UPSNAME” y seguido a ella vamos a colocar el nombre para nuestro dispositivo, debería quedar algo así:
UPSNAME MiUPS
Vayamos ahora por el tipo de conección de nuestro UPS, en ésta caso, vamos hasta la línea “UPSCABLE” y “UPSTYPE” en ambas hay que colocar usb (depende del tipo de conexión de los ups no se olviden de eso):
UPSCABLE usb
UPSTYPE usb
Nota: Tenemos que buscar la línea “DEVICE /dev/ttyS0” y comentarla de manera a que quede #DEVICE /dev/ttyS0, debido a que nuestro ups es usb, dentro del mismo archivo de configuración, también vemos las opciones de conectar con ups ethernet.

Bien, una vez terminado los pasos anteriores vamos a guardar y cerrar el archivo de configuración, ahora lo que nos queda es decirle al sistema que el demonio del UPS se ha configurado, para ello hacemos lo siguiente:
[root@miserver ~]# vi /etc/default/apcupsd
El achivo no tiene contenido, por lo cual hay que agregar lo siguiente:
ISCONFIGURED=yes
Guardamos los cambios y salimos.

Ya casi estamos, ahora vamos a reiniciar el servicio para que los cambios que realizamos sean aplicados.
[root@miserver ~]# service apcupsd restart
Suponiendo que todo haya salido bien, vamos a verificar el estado del UPS llamando al servicio apcaccess desde el terminal:
[root@miserver ~]# apcaccess
Debería aparecernos lo siguiente:
[root@miserver ~]# apcaccess

APC : 001,036,0903
DATE : 2014-07-24 13:04:57 -0300
HOSTNAME : TCP254.TIROL
VERSION : 3.14.10 (13 September 2011) redhat
UPSNAME : UPSServerTirol
CABLE : USB Cable
DRIVER : USB UPS Driver
UPSMODE : Stand Alone
STARTTIME: 2014-07-23 15:39:25 -0300
MODEL : Back-UPS RS 1500
STATUS : ONLINE
LINEV : 224.0 Volts
LOADPCT : 11.0 Percent Load Capacity
BCHARGE : 100.0 Percent
TIMELEFT : 46.2 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME : 0 Seconds
SENSE : Medium
LOTRANS : 194.0 Volts
HITRANS : 264.0 Volts
ALARMDEL : 30 seconds
BATTV : 26.9 Volts
LASTXFER : Low line voltage
NUMXFERS : 0
TONBATT : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x07000008 Status Flag
SERIALNO : JB0828019477
BATTDATE : 2008-07-11
NOMINV : 230 Volts
NOMBATTV : 24.0 Volts
NOMPOWER : 865 Watts
FIRMWARE : 8.g9a.I USB FW:g9a
END APC : 2014-07-24 13:05:40 -0300


Bien, ahora vamos a realizar la configuración por correo electrónico, sigamos los pasos para cada distro que tengamos:
  • Debian: apt-get install sendmail
  • CentOS: yum install sendmail
  • SELinux: zypper in sendmail
Es hora de configurar apcupsd. Voy a pasar a describir el contenido del directorio /etc/apcupsd, dónde veremos varios archivos bastante importantes:
  • “CHANGEME”: Avisa si la batería del UPS necesita ser reemplazada.
  • “COMMFAILURE”: Avisa si la PC pierde la comunicación con el UPS.
  • “COMMOK”: Avisa si vuelve la comunicación entre la PC y el UPS.
  • “ONBATTERY”: Avisa si el UPS se desconectó de la corriente eléctrica y empieza a usar la batería.
  • “OFFBATTERY”: Avisa si el UPS vuelve a retomar la conexión con la corriente eléctrica y deja de usar la batería.
Nota: Cada uno puede modificar cualquiera de éstos valores, en nuestro caso solo voy a modificar 3 de ellos, “onbattery” en caso de que pierda la conexión con la corriente eléctria; “offbattery” para saber si se restituye la energía eléctrica y “changeme” para saber si debo reemplazar la batería del UPS.

Voy a mostrar la configuración de “ONBATTERY”, como para no hacer tan larga ésta guía, para las demás va a ser el mismo proceso, solamente vamos a cambiar lo que sería el mensaje o asunto del del correo, para saber de qué se estaría tratando el mismo:
[root@miserver ~]# vi /etc/apcupsd/onbattery
Vamos a modificarlo por lo siguiente:

#!/bin/sh
#
# This shell script if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when the UPS
# goes on batteries.
# We send an email message to root to notify him.
#
SYSADMIN = usuario@midominio.net 
  APCUPSD_MAIL = "sendemail" 
  HOSTNAME = `hostname` 
  MSG = "UPS desconectado de la Fuente de Alimentacion" 
  # 
  ( 
  echo "" 
  echo "=====================================" 
  echo "APAGÓN EN $ HOSTNAME!" 
  echo "=====================================" 
  echo "" 
  echo "La UPS en su Servidor ha experimentado un problema de alimentación que ha requerido el SAI para activar el modo de la batería." 
  echo "" 
  echo "No se asuste! Mantenga la calma ..." 
  echo "" 
  echo "el estado del SAI actual:" 
  echo "" 
  /sbin/apcaccess status 
  ) | $APCUPSD_MAIL -s "$MSG" -f miservidor@midominio.net -t $SYSADMIN 
  exit 0 

Guardamos los cambios, ahora nos queda saber si el correo es enviado, para ello podemos hacer 2 cosas, la primera sería ejecutar de manera manual el scrip: sh /etc/apcupsd/onbattery ; la segunda simplemente es desconectar el cable de corriente del UPS, y esperar a que llegue nuestro correo :D.

Hasta aquí no hicimos mucha ciencia, simplemente modificamos algunas varialbes, en éste caso agregamos un cuerpo para el correo electrónico, agregamos nuestra dirección de email, y el asunto para saber si el UPS está funcionando con batería, si vuelve la corriente eléctria o simplemente si la batería necesita ser reemplazada.
Con ésto terminamos ésta sencilla guía, espero que les resulte de mucha utilidad.
Saludos y hasta la próxima.

P/D: Dejo el tutorial en PDF para que lo puedan descargar.
Posted on 2:33 p.m. by ...kCh3t... and filed under , , | 2 Comments »

vLan en CentOS, Fedora™ y Red Hat™ Enterprise Linux.

Intro: una VLAN (acrónimo de Virtual LAN o Red de Área Local Virtual) es un método para crear redes lógicamente independientes dentro de una misma red física. Varias VLANs pueden coexistir en un único conmutador físico o en una única red física. Son útiles para reducir el tamaño del dominio de difusión y ayudan en la administración de la red, separando segmentos lógicos de una red de área local, impidiendo que puedan intercambiar datos usando la red local.»
Su implementación requiere de disponer de conmutadores (switches) con capacidad para VLAN (protocolo 802.1q), los cuales deberán estar previamente configurados para gestionar algunas VLANs (y saber cómo hacerlo) y entender perfectamente IP versión 4.


Manos a la obra.

El soporte necesario para configurar VLANs se incluye junto con el paquete iproute, el cual se incluye en la instalación predeterminada, pues se trata de un paquete obligatorio e indispensable para el sistema. De manera alternativa puede gestionar también las VLANS a través del paquete vconfig (en combinación con el mandato ifconfig), ejecutando lo siguiente:

yum -y install vconfig

Procedimientos.

Editar el archivo /etc/sysconfig/network:

vim /etc/sysconfig/network

Añadir el siguiente parámetro para activar el soporte para VLAN, mismo que permitirá que posteriormente cargue automáticamente el módulo 8021q del núcleo de Linux:

VLAN=yes

Asumiendo que se utiliza la interfaz eth1 para acceder a la red local, editar el archivo de configuración:

vim /etc/sysconfig/network-scripts/ifcfg-eth1

Quitar todos los parámetros de red que se hayan establecido y dejar el contenido como el del siguiente ejemplo, en el cual se asume que la dirección MAC del dispositivo de red corresponde a 44:87:FC:AA:DD:2D:

DEVICE=eth1
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
HWADDR=44:87:FC:AA:DD:2D
NM_CONTROLED=no




Reiniciar el servicio de red a fin de que aplique el cambio y para que cargue de manera automática el módulo 8021q del núcleo de Linux.

service network restart



Pueden crearse manera temporal (se perderán luego de reiniciar el sistema) los dispositivos de VLAN del siguiente modo:

ip link add link DISPOSITIVO name DISPOSITIVO.ID-VLAN type vlan id ID-VLAN
ip addr add IP/CIDR brd BROADCAST dev DISPOSITIVO.ID-VLAN
ip link set dev DISPOSITIVO.ID-VLAN up




Ejemplo:

ip link add link eth1 name eth1.2 type vlan id 2
ip addr add 172.16.0.65/26 brd 172.16.0.127 dev eth1.2
ip link set dev eth1.2 up

ip link add link eth1 name eth1.3 type vlan id 3
ip addr add 172.16.0.129/26 brd 172.16.0.191 dev eth1.3
ip link set dev eth1.3 up

ip link add link eth1 name eth1.4 type vlan id 4
ip addr add 172.16.0.193/26 brd 172.16.0.255 dev eth1.4
ip link set dev eth1.4 up




De manera alternativa, puede hacer lo mismo utilizando los mandatos vconfig y el mandato ifconfig, del siguiente modo:

vconfig add eth1 2
vconfig add eth1 3
vconfig add eth1 4
ifconfig eth1.2 172.16.0.65 netmask 255.255.255.192
ifconfig eth1.3 172.16.0.129 netmask 255.255.255.192
ifconfig eth1.4 172.16.0.193 netmask 255.255.255.192




En caso de que sea necesario, para eliminar los dispositivos de VLAN, puede ejecutar el mandato IP con la siguiente sintaxis:

ip link set dev DISPOSITIVO.ID-VLAN down
ip link delete DISPOSITIVO.ID-VLAN



Ejemplo:

ip link set dev eth1.2 down
ip link delete eth1.2

ip link set dev eth1.3 down
ip link delete eth1.3

ip link set dev eth1.4 down
ip link delete eth1.4




De manera alternativa, puede utilizar también el mandato vconfig con la opción rem, seguido del nombre del dispositivo VLAN. Siguiendo el ejemplo utilizado en este documento, sólo habría que ejecutar lo siguiente:

vconfig rem eth1.2
vconfig rem eth1.3
vconfig rem eth1.4




Para que los dispositivos de VLANs sean permanentes, es necesario crear, dentro del directorio /etc/sysconfig/network-scripts, los archivos de configuración de interfaz, siguiendo el siguiente formato:

icfg-DISPOSITIVO.ID-VLAN


El número de VLAN, preferentemente debe corresponder son el mimos utilizado en el conmutador principal. Se debe evitar usar la VLAN 1 (eth1.1 o eth1.1), 172.16.0.1 como IP para el servidor, así como también evitar utilizar la red 172.16.0.0/26, porque suelen corresponder al número de VLAN, dirección IP y segmento de red que regularmente utilizan los conmutadores.
Ejemplo de contenido de /etc/sysconfig/network-scripts/ifcfg-eth1.2.

DEVICE=eth1.2
TYPE=Ethernet
BOOTPROTO=static
ONBOOT=yes
NM_CONTROLED=no
IPADDR=172.16.0.65
PREFIX=26
BROADCAST=172.16.0.127
NETWORK=172.16.0.64


Ejemplo de contenido de /etc/sysconfig/network-scripts/ifcfg-eth1.3

DEVICE=eth1.3
TYPE=Ethernet
BOOTPROTO=static
ONBOOT=yes
NM_CONTROLED=no
IPADDR=172.16.0.129
PREFIX=26
BROADCAST=172.16.0.191
NETWORK=172.16.0.128




Ejemplo de contenido de /etc/sysconfig/network-scripts/ifcfg-eth1.4

DEVICE=eth1.4
TYPE=Ethernet
BOOTPROTO=static
ONBOOT=yes
NM_CONTROLED=no
IPADDR=172.16.0.193
PREFIX=26
BROADCAST=172.16.0.255
NETWORK=172.16.0.192




Reiniciar nuevamente el servicio de red a fin de que inicien las interfaces de VLAN.

service network restart



Se puede verificar con el mandato ip que todas las VLAN estén presentes.

ip addr show


Lo anterior debe devolver una salida similar a la siguiente:

1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
    inet 127.0.0.2/8 brd 127.255.255.255 scope host secondary lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 44:87:FC:AA:DD:2D brd ff:ff:ff:ff:ff:ff
3: eth1.2@eth1:  mtu 1500 qdisc noqueue state UP 
    link/ether 44:87:FC:AA:DD:2D brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.65/26 brd 172.16.0.127 scope global eth1.2
    inet6 fe80::a00:27ff:fece:5172/64 scope link 
       valid_lft forever preferred_lft forever
4: eth1.3@eth1:  mtu 1500 qdisc noqueue state UP 
    link/ether 44:87:FC:AA:DD:2D brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.129/26 brd 172.16.0.191 scope global eth1.3
    inet6 fe80::a00:27ff:fece:5172/64 scope link 
       valid_lft forever preferred_lft forever
5: eth1.4@eth1:  mtu 1500 qdisc noqueue state UP 
    link/ether 44:87:FC:AA:DD:2D brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.193/26 brd 172.16.0.255 scope global eth1.4
    inet6 fe80::a00:27ff:fece:5172/64 scope link 
       valid_lft forever preferred_lft forever



De manera alternativa, se puede verificar con el mandato ifconfig que todas las VLAN estén presentes.


La salida debe ser algo similar a lo siguiente:

eth1      Link encap:Ethernet  HWaddr 44:87:FC:AA:DD:2D  
          inet6 addr: fe80::226:b9ff:fe38:36bc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13512148 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15358606 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4445028488 (4.1 GiB)  TX bytes:12134964357 (11.3 GiB)
          Interrupt:122 Memory:da000000-da012800 

eth1.2    Link encap:Ethernet  HWaddr 44:87:FC:AA:DD:2D  
          inet addr:172.16.0.65  Bcast:172.16.0.127  Mask:255.255.255.192
          inet6 addr: fe80::4687:fcff:feaa:dd2d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:4333 (4.2 KiB)

eth1.3    Link encap:Ethernet  HWaddr 44:87:FC:AA:DD:2D  
          inet addr:172.16.0.129  Bcast:172.16.0.191  Mask:255.255.255.192
          inet6 addr: fe80::4687:fcff:feaa:dd2d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:4235 (4.1 KiB)

eth1.4    Link encap:Ethernet  HWaddr 44:87:FC:AA:DD:2D  
          inet addr:172.16.0.193  Bcast:172.16.0.255  Mask:255.255.255.192
          inet6 addr: fe80::4687:fcff:feaa:dd2d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:3405 (3.3 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:183 errors:0 dropped:0 overruns:0 frame:0
          TX packets:183 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:21398 (20.8 KiB)  TX bytes:21398 (20.8 KiB)


Administrando direcciones IP de las VLANs a través de un servidor DHCP.

Para alivio de los administradores de sistemas, es posible utilizar el servicio de DHCP para gestionar la administración de direcciones IP a través de un servidor DHCP.
Editar el archivo /etc/sysconfig/dhcpd y definir las interfaces de VLAN a utilizar junto con el servidor DHCP.

DHCPDARGS="eth1.2 eth1.3 eth1.4";


Editar el archivo /etc/dhcpd.conf (CentOS 5 y Red Hat Enterprise Linux 5) o bien /etc/dhcp/dhcpd.conf (CentOS 6 y Red Hat Enterprise Linux 6), definir una sección por cada red:

ddns-update-style interim;
ignore client-updates;
authoritative;
default-lease-time 900;
max-lease-time 7200;
option ip-forwarding off;
option domain-name "red-local.net";
option ntp-servers 200.23.51.205, 132.248.81.29, 148.234.7.30;

shared-network vlan2 {
        subnet 172.16.0.64 netmask 255.255.255.192 {
                option routers 172.16.0.65;
                option subnet-mask 255.255.255.192;
                option broadcast-address 172.16.0.127;
                option domain-name-servers 172.16.0.65;
                option netbios-name-servers 172.16.0.65;
                range 172.16.0.66 172.16.0.126;
        }
}
shared-network vlan3 {
        subnet 172.16.0.128 netmask 255.255.255.192 {
                option routers 172.16.0.129;
                option subnet-mask 255.255.255.192;
                option broadcast-address 172.16.0.191;
                option domain-name-servers 172.16.0.192;
                option netbios-name-servers 172.16.0.192;
                range 172.16.0.130 172.16.0.190;
        }
}
shared-network vlan4 {
        subnet 172.16.0.192 netmask 255.255.255.192 {
                option routers 172.16.0.193;
                option subnet-mask 255.255.255.192;
                option broadcast-address 172.16.0.255;
                option domain-name-servers 172.16.0.193;
                option netbios-name-servers 172.16.0.193;
                range 172.16.0.194 172.16.0.254;
        }
}




Reiniciar (o iniciar, según sea el caso) el servicio dhcpd y comprobar que funcione correctamente el servicio, conectando algunos equipos a los conmutadores involucrados.

service dhcpd restart

Con eso terminamos. Saludos.

Posted on 7:47 p.m. by ...kCh3t... and filed under , | 0 Comments »