Como chequear si un Raspberry Pi tiene bajo voltaje

Aca estoy!, (despues de tanto tiempo sin escribir), en este caso tengo montado un servidor web en un Raspberry PI. Esta online desde hace 2 años, y desde hace unos dias quedaba freezado a un par de horas de reiniciarlo.

El «Micro Server» esta corriendo un webserver con Nginx y Php y esta sirviendo un sitio web muy sencillo. Sorpresivamente el raspberry viene con ethernet de 1 Giga, asi que aprovechamos para montar un speedtest local para medir internamente.
Como el servidor quedo configurado con conectividad Ipv4 e Ipv6 hicimos un speedtest acorde para poder medir velocidades en V6 ya que los existentes estan en paises muy alejados y no dan resultados muy certeros.

Utilizamos un speedest opensource y lo modificamos para adaptarlo a nuestras necesidades


La razon principal de mudar este sitio a un Raspberry fue principalmente la reduccion del consumo energetico para que el UPS del rack sea mas eficiente.

Las fuentes de alimentacion de este tipo de equipos se van degradando progresivamente (son micro USB de 5 Volt 5,2 Amp, como las de celular). Con lo cual no hay ningun parametro visual o error evidente.

Diagnostico:

El equipo encendia y funcionaba un par de horas aleatoreamente.
La fuente no mostraba signos de mal-funcionamiento.

Solucion

Es evidente que lo primero que hariamos es cambiar la fuente. Pero en mi caso no estaba completamente seguro si era o no el origen del problema. Entonces para asegurarme encontre los siguientes comandos para diagnosticar voltaje.

sudo apt-get install libraspberrypi-bin
vcgencmd get_throttled

Si la respuesta es 0x0 es porque esta todo bien! 🙂
Si la respuesta es 0x50000 tenes o tuviste problemas de voltaje desde el ultimo encendido
Si la respuesta es 0x80000 tenes problemas de temperatura.

Logs

Logre encontra un error en los logs buscando de la siguiente manera:

sudo cat /var/log/syslog | grep "voltage"

Deberia arrojar resultados similares a esto:

kern  :crit  : [ 1701.464833 <    2.116656>] Under-voltage detected! (0x00050005)

Espero que les sirva tanto como a mi.

Saludos

API MIKROTIK Segunda parte – Usando el API con PHP

En la primera parte, explicamos cual podría ser su uso y para que sirve.
Ahora vamos a explicar como se configura el API en pocos pasos, con un poco de PHP y usando las clases creadas por Denis Basta. (version 1.3 o 1.4), con apenas un minimo cambio hecho para que la clase «connect» permita pasar ademas el numero de puerto del RouterOS como parametro.

Yo estoy familiarizado con programar en PHP pero para el que no, pueden hacerlo con el lenguaje que desee. En la Wiki de Mikrotik podran encontrar ejemplos para:

Paso 1: Configura tu RouterOS

a) Habilitar el servicio API.
desde IP > Services. Seleccionas la fila que dice «api» y la habilitas, luego doble click sobre ella para editar. Puedes asignarle el puerto que quieras, pero por defecto usa el 8728 tcp. Si te gusta tener todo ecualizado podrías agregarlo en los mangles para darle QoS. Finalmente donde dice «Avaliable From» es la direccion IP desde donde estara el API corriendo. En nuestro caso, como usaremos PHP puede ser el servidor Apache.  (sigue los pasos de la imagen).
ip-services-api

 

b) Crear un grupo
Para darle seguridad necesitamos crear un usuario y un grupo nuevo dentro del RouterOS donde queremos ordenar nuestras tareas diarias. Para ello vamos a «System > Users > Groups» y presionamos en el icono «+». En esta ventana simplemente escribimos el nombre del grupo, (para este ejemplo yo le puse «tugrupoapi») y elegi las politicas «read, write, api». Damos click en OK
user_api_group

c) Crear un usuario
Luego de crear el Grupo, nos movemos a la pestaña Users como esta en la imagen a continuacion. Presionamos el icono «+» para crear un usuario nuevo.
Name: aqui escribiremos nuestro nuevo nombre de usuario: Ejemplo blog.tech-nico.com, (puedes crear el tuyo).
Group: elegimos el grupo «tugrupoapi» (ver el punto «b»),
Address allowed:  Es la IP que tiene permitido acceder a nuestro RouterOS a través del API. «El apache server en nuestro caso»,
Password: tipeamos nuestro password, asegurate que sea fuerte.
Finalmente click en el boton «OK».

user_api_user_add

Paso 2: Crear un script para testear el acceso: conectar_test_api.php

<?php require_once(‘api_mt_include2.php’); ?>
<?php
$ipRouteros=»200.20.30.40″; // tu RouterOS.
$Username=»blog.tech-nico.com»;
$Pass=»tupassword»;
$api_puerto=8728;

$API = new routeros_api();
$API->debug = false;
if ($API->connect($ipRouteros , $Username , $Pass, $api_puerto)) {
$API->write(«/system/ident/getall»,true);
$READ = $API->read(false);
$ARRAY = $API->parse_response($READ);
$name = $ARRAY[0][«name»];
if(count($ARRAY)>0){ // si esta conectado
$API->write(«/system/licen/getall»,true);
$READ = $API->read(false);
$ARRAY = $API->parse_response($READ);
$nlevel = $ARRAY[0][«nlevel»];
$API->write(«/system/reso/getall»,true);
$READ = $API->read(false);
$ARRAY = $API->parse_response($READ);
$cpu = $ARRAY[0][«cpu»];
$cpu_frequency = $ARRAY[0][«cpu-frequency»];
$arquitectura = $ARRAY[0][«board-name»];
$API->write(«/system/pack/getall»,true);
$READ = $API->read(false);
$ARRAY = $API->parse_response($READ);
$version = $ARRAY[0][«version»];

echo ‘<img src=»icon_led_green.png» />&nbsp;’;
echo «<strong>».$name.»(» .$arquitectura. «)</strong>&nbsp;&nbsp;»;
echo «v:» . $version. «&nbsp;&nbsp;»;
echo «level:» . $nlevel . «&nbsp;&nbsp;»;
echo $cpu.»(«.$cpu_frequency.» Mhz.)»;
}else{ //el usuario esta of line
echo ‘<img src=»icon_led_grey.png» />&nbsp;’.$ARRAY[‘!trap’][0][‘message’];
}

}else{
echo «<font color=’#ff0000′>La conexion ha fallado. Verifique si el Api esta activo.</font>»;
}
$API->disconnect();
?>

Paso 3: Editamos las lineas que dicen:

$ipRouteros=»200.20.30.40″; // tu RouterOS.
$Username=»blog.tech-nico.com»;
$Pass=»tupassword»
$api_puerto=8728;

Paso 4: Finalmente subimos por FTP los archivos a nuestro servidor Web y ejecutamos en el navegador el archivo conectar_test_api.php;
test_php_navegador
Si todo salio bien, vamos a ver una pantalla parecida a la de arriba. Lo que hicimos fue loguearnos mediante el API a nuestro servidor, y luego traer el nombre «Identity», la plataforma, la version del ROS, que licencia tiene instalada, etc.

Descarga aqui todos los archivos de este ejemplo.

Como veran, este seria el primer paso para comenzar a programar tus scripts. Ya teniendo esto funcionando vamos a poder realizar varios ejemplos que voy ir posteando en mi tiempo libre.

Cualquier cosa comenten que les respondo enseguida.

API MIKROTIK – Como optimizar tu administracion con un poco de PHP (introduccion)

API MIKROTIK Tercera parte – Nuestro primer ejemplo (codigo abierto)

API MIKROTIK – Crear queues simples con PHP (con validacion)

_______________
Nicolas tech-nico.com/blog

Template Cacti AirOS 5.5 para cacti version: 0.8.7g (hash version)

Para los que no lo saben, en el firmware 5.5 de ubiquiti dejaron de funcionar los graficos del Cacti. Por suerte un colaborador del foro oficial forum.ubnt.com publico un template que funciona de maravillas.

El unico inconveniente que se presenta al importar el archivo cacti_host_template_airos-ubnt_5_5.xml en el panel de control de cacti es que arroja el error:

Error: XML: Hash version does not exist

Este error es porque dentro del archivo xml tiene un tag llamado hash, que se forma con la version de cacti y unos numeros aleatorios. Por lo tanto si tu version no coincide con la del hash, arroja el error de arriba.

ejemplo: hash_0200248f0dcc6cc49fee26220bfeb7ae781802

0024 es la version de Cacti, que si miramos en la siguiente tabla de versiones corresponde a la 0.8.8 o 0.8.8a

"0.8.4"  => "0000",
"0.8.5"  => "0001",
"0.8.5a" => "0002",
"0.8.6"  => "0003",
"0.8.6a" => "0004",
"0.8.6b" => "0005",
"0.8.6c" => "0006",
"0.8.6d" => "0007",
"0.8.6e" => "0008",
"0.8.6f" => "0009",
"0.8.6g" => "0010",
"0.8.6h" => "0011",
"0.8.6i" => "0012",
"0.8.6j" => "0013",
"0.8.7"  => "0014",
"0.8.7a" => "0015",
"0.8.7b" => "0016",
"0.8.7c" => "0017",
"0.8.7d" => "0018",
"0.8.7e" => "0019",
"0.8.7f" => "0020",
"0.8.7g" => "0021",
"0.8.7h" => "0022",
"0.8.7i" => "0023",
"0.8.8"  => "0024",
"0.8.8a" => "0024"

En mi caso tengo la version 0.8.7g. Por lo tanto tendria que modificar el 24 por 21. :).
Lo que hice fue usar Adobe Dreamweaver para buscar y reemplazar mediante una expresion regular:  (lo vamos a hacer en 2 pasos).

Paso 1:

Buscar:

(hash_)([0-9]{2})(00)(24)

y reemplazarlo con:

$1$2$3{loquequieras}21

Paso 2:

Buscar:

{loquequieras}

y reemplazarlo por NADA. (dejar vacio).

Este paso ultimo paso es necesario porque si no, dreamweaver se confunde y piensa que $3 es $321, entonces separamos $3__algo__21 con algo que quieras y finalmente quitamos ese «algo» con el paso 2.

El archivo finalmente queda asi: descargar aqui

Recuerda situar el archivo AirOS5_5.xml en la ruta:
<path_cacti>/resource/snmp_queries/AirOs5_5.xml

__________________
Nicolas
tech-nico.com

Improvisar WinSCP en Mac o Linux

Algo que no me quiero olvidar es la sintaxis del comando scp que acabo de usar en MacOS X Lion. Me encontre en google con varias interfaces gráficas muy parecidas a WinSCP pero como no las conozco me da un poco de temor ingresar datos tan sensibles como usuario, contraseña, etc.

El comando es:

scp -P numpuerto -i path/to/keyfile  ruta/al/archivo_que _queres_subir  usuario_remoto@ip_servidor:/ruta/en/servidor

-P es el flag del numero de puerto, en la mayoria de los casos el 22.
-i es la ruta a la llave publica si es que tienes.

Ejemplo: supongamos que queremos subir el archivo tech-nico.xml que esta en la carpeta /nicolas.
$ cd /nicolas
$ scp -P 22  tech-nico.xml  patricio@192.168.72.9:/home/patricio
patricio@192.168.72.9’s password:  

Finalmente te va a solicitar la contraseña del servidor.

Como veran es muy facil.

Feliz año nuevo!!!!.

____________________
Nicolas
tech-nico.com

Publicar Imagen de Ubiquiti Aircam en un sitio web (sin login) de manera automática

Esta webcam, mas precisamente la Aircam de Ubiquiti no tiene muchos parámetros para configurarla. Solo se acceden via login. Otras camaras tienen la opcion de desactivar el login o bien configurar un servidor FTP y publicar la imagen de la cámara cada x tiempo.
Nosotros lo que haremos es ingresarle por SSH y copiar la imagen /tmp/snap.jpeg (que es la ruta donde publica ubiquiti la imagen en vivo) dentro de nuestro sitio web de apache.

Para ello deberemos primero crear las Keys que requiere el acceso SSH.

Crear el par de claves públicas y privadas:

$ sudo ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

Damos enter, para que las llaves se guarden en ~/.ssh

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Le ponen el password que quieran. Luego vamos a la carpeta home del usuario root o bien al home del usuario logeado y veremos 2 archivos: id_rsa e id_rsa.pub.

Publicamos la llave publica id_rsa.pub en nuestra cámara desde el navegador. Como esta en la imagen.

Para testear que ingresas bien a la cámara puedes correr la siguiente linea desde la consola de linux donde se hospeda tu sitio web:

$ sudo /usr/bin/scp -qv «ubnt@IPdeAircam:/tmp/snap.jpeg» /var/www/tusitio/webcam.jpg.
Si todo va bien te tiene que solicitar la contraseña de la cámara. Luego revisa que se haya generado el archivo webcam.jpg en tu sitio.  :). Perfecto!, Ahora si queremos que la foto se publique sola, tenemos que lograr que esta linea de comandos no nos pida la contraseña. Para ello necesitamos instalar «expect», un programa para automatizar tareas que va a encargarse del login.

sudo apt-get install expect

Luego vamos a armar 2 script; uno que hara el trabajo de ingresar a la camarita, con lo siguiente:   webcam_image_get.sh

#! /usr/bin/expect
set hostName [lindex $argv 0]
 ### Modificar ubnt por el usuario, y /var/... por la ruta de tu sitio.
spawn /usr/bin/scp -q "ubnt@$hostName:/tmp/snap.jpeg" /var/www/tusitio/webcam.jpg

set timeout 10
expect {
  ### Modificar ubnt por la contraseña de tu camara
 -re ".*passphrase.*" { send "ubnt\n"; expect eof exit }
  eof { exit }
  timeout { puts "\n--TIMEOUT!--\n";exit}
}
exit

Modificar «ubnt ubnt» por el usuario y contraseña de tu camara y la ruta que tiene que apuntar a la de tu sitio web.

Y el otro script ejecutara el anterior cada cierto tiempo en segundos, y ademas usaremos «convert» para reescribir la imagen con un texto personalizado.

Para poder usar «convert» instalamos:  $ sudo apt-get install imagemagick

Y aqui el script: webcam_cron.sh

#! /bin/sh

while [ true ]; do
        sleep 2   # espearmos 2 segundos
 /home/tu_usario/webcam_image_get.sh 190.100.100.5 # ip de tu camara
        sleep 1  # esperamos 1 segundo mas
        convert -family Arial -pointsize 16 -fill "#ffffff"  -draw "text 20,20 'Tech-Nico.com Live'" /var/www/tusitio/webcam.jpg/var/www/tusitio/webcam.jpg
done

En rojo las cosas que tenes que modificar para tu caso.
Le damos permisos de ejecución a los 2 scripts con: $ sudo chmod +x

Finalmente para ejecutar «webcam_cron.sh» como trabajo en background y re-direccionamos la salida estándar a un archivo de texto llamado output para esconder los mensajes.

$  sudo ./webcam_cron.sh >>output 2>&1 &

Ahora si! ya tenemos nuestra imagen publicandose automaticamente. Solo tenemos que armar un archivito HTML y ponerle la etiqueta Refresh para que refresque cada cierto tiempo.

La única desventaja de esto es que «no vamos a ver la imagen como un video» Es mas lento porque hasta que se logea por ssh, intercambia las llaves.. ingresa la contraseña… copia el archivo..  todo eso le demora unos 2 segundos. Asi que lo mas rapido que puede publicar va a ser en 3 o 4 segundos como maximo.

Resultado

Espero que les guste y.. lo mas importante.. «les sirva».

________________
Nicolas Daitsch
tech-nico.com/blog

Nuevo Firmware Ubiquiti AirMax v5.5

Una excelente noticia para todos los WISP, el nuevo firmware v5.5 de la serie «M» Airmax trae muchas sorpresas y cambios muy solicitados. Entre ellas el poder agregar infinitos MAC address en un ACL y poder comentarlos o desactivarlos como lo hacemos con RouterOS. Tambien tenemos la actualizacion del kernel a una version superior.
Ademas también tenemos ahora la posiblidad de usar Airmax Client en todos los productos 802.11 a/b/g.

Creo que mas muchas de las funcionalidades agregadas son las que faltaban para que mas de uno se decida a utilizar Ubiquiti, e incluso migrar hacia ubiquiti.

Entre las mejoras destacadas tenemos:

- Improvement: Linux kernel update to 2.6.32 version
- Improvement: AirMax performance in large PtMP networks
- Improvement: AirSync performance in PtMP networks
- Improvement: ACL List: Dynamic list now allows instant changes (no restart or dropped connections required)
- Improvement: ACL List: MAC list limit increased from 64 to unlimited
- Improvement: ACL List: Ability to add comments to MACs
- Improvement: ACL List: Ability to enable/disable a MAC without removing it from the list
- Improvement: DFS functionality improvement according FCC/ETSI requirements
- Improvement: Report Horizontal / Vertical antenna instead of "Chain 0 / Chain 1"
- Improvement: New look for wireless mode configuration
- Improvement: Various WEB GUI tweaks, changes, improvements
- Improvement: Send NASID in Access-Request packet.
- Improvement: Add internal speed test tool to DMZ exemption ports
- Improvement: Hide Discovery Tool for read-only account
- Improvement: Extension for Port Forward configuration. Allow to specify Public IP

Entre las nuevas funcionalidades:

- New: Management VLAN support
- New: Advanced network settings configuration mode
- New: RADIUS MAC authentication
- New: Low TX power mode support for all M series models
- New: AirMax client support for 802.11 a/b/g products
- New: DHCP relay functionality in Router/SOHO Router mode
- New: UPnP server support in Router/SOHO Router modes
- New: Ability to Block WAN Access in SOHO Router mode
- New: Fallback IP for PPPoE client
- New: 3/8 MHz channel width support for M900
- New: 8/30 MHz channel width support for M2/M5
- New: 8/25 MHz channel width support for M3
- New: 25 MHz channel width support for M365
- New: Full range of channel width options in Compliance mode
- New: Max allowed MTU size for newer HW revision models is 2024 bytes
- New: Make Device name the Product Model by default
- New: Separate throughput graphs for LAN0/LAN1 interfaces
- New: Option to create support info file with ping watchdog before device reboot
- New: Enable/Disable CDP option in Device Discovery section
- New: Check for existing uploaded firmware image when opening System page
- New: Prepare for IPv6 support
- New: Traffic shaper for ingress traffic
- New: Notification for software updates
- New: Add PPPoE service name configuration
- New: Kernel patches for SIP conntrack/NAT support
- New: Show AirMax priority in Main page for Station mode

Fixes:

- Fix: Configuration change causes device with a long uptime to lock up
- Fix: Device stops passing traffic after some time and requires a reboot or "kick" to work again
- Fix: Dynamic DNS update after PPPoE session initialization
- Fix: Station list is empty when there are few stations associated
- Fix: Port ID is mandatory in CDP packet
- Fix: STA-WDS in bridge mode is passing back multicast/broadcast packets
- Fix: "Antenna Gain" and "Cable Loss" fields are locked for LocoM900 with external antenna
- Fix: Incorrect connection time reporting
- Fix: Timestamps reset because of stuck beacon. Causes other manufacturers' (i.e. Tranzeo) devices to re-associate.
- Fix: Can't launch airView with HTTPS enabled on IE8
- Fix: Traceroute fails to DNS host with multiple addresses

__________________
Nicolas tech-nico.com

Recuperando Std exception old lock file terminating – mongodb

Cuando un servidor tiene un apagado forzoso (se apaga por un corte de energia) o por alguna otra razón, es probable al querer iniciar nuevamente la base de datos /etc/init.d/mongodb start obtengamos el error: «exception in initAndListen std::exception: old lock file, terminating» en el el log de mongodb.

Para resolverlo simplemente eliminamos el archivo  /var/lib/mongodb/mongod.lock.
__________________
Nicolas tech-nico.com

[Solucionado] Error en Thundercache (mongodb) luego de la instalación (Uncaught exception ‘MongoCursorException’ )

Desde hace un tiempo que estoy intentando instalar ThunderCache en Ubuntu Server 11.04 64bits. La cuestión es que siempre que finalizaba la instalación se rompía algo, y perdía el el acceso por web al ThunderCenter. A muchos les ha pasado luego de instalar las actualizaciones o bien hacer upgrade a las versiones mas nuevas.

Mas en detalle
Luego de terminar con la instalación de ThunderCache (bin 846) con ThunderCenter 3.4.4 hay que ingresar a http://ipthunder:82     usuario: admin     password:admin

La primer pantalla es la de configuración, algo como:

 

Al presionar en <Confirm> nos obliga a reiniciar el servidor. La gran sorpresa es que luego del reinicio, no podemos ingresar mas por web. Si bien la IP responde, el apache no!!.

Mirando en el log del apache nos vamos a encontrar con este error:

# tail /var/log/apache2/error.log

Uncaught exception ‘MongoCursorException’ with message ‘getFile(): bad file number value (corrupt db?): run repair’ in /usr/local/tcenter/www/index.php:15\nStack trace:\n#0 /usr/local/tcenter/www/index.php(15): MongoCollection->findOne(Array)\n#1 {main}\n thrown in /usr/local/tcenter/www/index.php on line 15

Para resolverlo seguimos estos pasos:

1 #  /etc/init.d/thunder restart
2 #  apache2ctl stop
3 #  /etc/init.d/mongo stop
4 #  /etc/init.d/mongodb stop
5 #  mongod --dbpath /var/lib/mongodb --config /etc/mongodb.conf --repair
6 #  chown mongodb  /var/lib/mongodb -R
7 #  /etc/init.d/mongodb start
8 #  apache2ctl start

El funcionamiento es impresionante, realmente vale la pena instalarlo en redes grandes.

Las Barras de progreso en verde son descargas de objetos cacheados. Y las azulcitas son objetos que esta almacenando en el cache.

Que tengan unas muy felices fiestas!
______________________
Nicolas tech-nico.com/blog

Crontab y PHP: Enviar logs, procesos, o backups via mail

Algo que surgió anoche en la clase de Linux (Crontab), fue casualmente «poder hacer un backup automático y que lo envie a nuestro mail». Todavía no aprendimos Bash Scripting / Pyton / Perl o bien para el que esta mi situación, tenemos la alternativa de ejecutar un script PHP.

Inicialmente este script hacia un dump de la base de datos mysql y enviaba el archivo .sql via mail. Aca lo posteo con algunas modificaciones para que cada uno lo adapte a sus necesidades.
En este ejemplo vamos a imprimir el syslog (tail syslog) y enviarlo via mail como archivo adjunto.
La funcion en PHP para ejecutar un comando Linux es:

system(«tu comando»);            // Ej:  system(«ps -fea»);
*En este ejemplo listamos los procesos.

Sabiendo esto, el código del script PHP podría ser algo asi:

<?php
//// Script: Nicolas Daitsch 24 de noviembre de 2011
//// http://tech-nico.com/blog

////////////// CONFIGURACION //////////////////////////
$sendto = "Webmaster <tuemail@gmail.com>"; // DESTINO
$sendfrom = "Log Diario Servidor <logs@tuempresa.com>"; // ORIGEN
$sendsubject = "Log Diario mi servidor"; // ASUNTO
$bodyofemail = "Aca esta el log que genero el Crontab."; // MENSAJE
$COMANDO_LINUX = "tail /var/log/syslog"; // COMANDO
////////////////////////////////////////////////////////

    $backupfile = "syslog_". date("Y-m-d") . '.txt';
    system($COMANDO_LINUX > $backupfile);
    include('Mail.php');
    include('Mail/mime.php');

    $message = new Mail_mime();
    $text = "$bodyofemail";
    $message->setTXTBody($text);
    $message->AddAttachment($backupfile);
    $body = $message->get();
    $extraheaders = array("From"=>"$sendfrom", "Subject"=>"$sendsubject");
    $headers = $message->headers($extraheaders);
    $mail = Mail::factory("mail");
    $mail->send("$sendto", $headers, $body);

    //unlink($backupfile);
?>

Editamos la sección que dice //// CONFIGURACION y escribimos nuestros valores.
Luego instalamos el modulo PEAR para envio de mails con PHP:

#  apt-get  install  php-mail   php-mail-mime   php-mail-mimedecode

Editamos el Crontab:

# crontab -e

Agregamos esta linea al final, guardamos y salimos:

08 12 * * * /usr/bin/php -f /var/www/backup.php > /root/cronerrors.txt 2>&1

Explicamos lo que hace esta linea:

  1. (08 12 * * *) Todos los dias a las 12:08 PM
  2. (/usr/bin/php -f) Ruta del interprete PHP en Debian/Ubuntu. Flag «-f» Ejecutar un archivo PHP.
  3. (/var/www/log_script/log_send.php) Ruta del Script
  4. (> /root/cronerrors.txt 2>&1) Redirecciono la salida de error hacia un archivo de texto en /root. Esto también puede ser /home/usuario/errores.log
Descargamos los archivos necesarios para el funcionamiento. Y los ubicamos en la ruta /var/www/.
___________________

Configurar OpenVPN Roadwarrior en Debian 6 y Windows

Vamos a configurar OpenVPN del modo RoadWarrior con PKI (Public Key Infraestructure)
Un claro ejemplo para explicar el modo RoadWarrior: Son 1 o mas clientes que se conectan (autenticándose) de manera remota desde una PC hacia nuestro «linux OpenVPN Server», y utilizando internet como medio de acceso para ingresar de manera segura a los recursos de la empresa, como serian, un servidor de aplicaciones, mail, recursos compartidos, etc.

Comenzamos con la instalacion:

1) Instalamos OpenVPN

# apt-get install openvpn

2)  comenzamos generando los certificados:

01. #  cp -a /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn/
02. #  cd /etc/openvpn/easy-rsa/2.0/
03. #  . ./vars
04. #  ./clean-all
05. #  ./build-ca
06. #  ./build-key-server servidor
07. #  ./build-key cliente1
08. #  ./build-dh
09. #  cd keys
10. #  cp ca.crt ca.key servidor.crt servidor.key dh1024.pem  /etc/openvpn/

Explicación paso a paso:
01: Copiamos los scripts con el comando «cp»
02: Nos posicionamos sobre el directorio de scripts
03: Inicializamos variables «. ./vars»
04: blanqueamos el directorio de claves «./clean-all»
05: generamos certificado CA  «./build-ca»

Aquí nos nos preguntara un montón de datos sobre la empresa que utiliza el certificado. Sugiero llenarlo con datos reales. NOTA: Debemos prestar mucha atención en el «Common Name».  Si en Common Name completamos con «TECHNICO» Lo anotamos o recordamos para no repetirlo en los proximos pasos; ya que en las 3 veces que lo generaremos, necesitamos nombres que no se repitan.

06: Creamos las credenciales para el servidor. » ./build-key-server servidor».

Completamos con los datos anteriores, sin repetir «common name» (como mencionamos anteriormente).

07: Creamos las credenciales para el cliente. » ./build-key cliente1″. Esto va a generar «cliente1.key» y «cliente1.crt»
08: Creamos los parámetros con el comando»./build-dh».  *dh: Diffie Hellman (Protocolo Criptografico).
09: nos posicionamos en el directorio donde se generaron los certificados «cd keys».
10: copiamos los certificados a /etc/openvpn/

3) Continuamos con la configuración:
Instalamos el editor VI y luego entramos a editar server.conf

# apt-get install vim
# vi /etc/openvpn/server.conf

USO DEL VI Editor
a) Para editar presionan la letra «i» o la tecla <insert>. Luego para finalizar de editar <esc>
b) para guardar y salir del vi: escriben ‘ : ‘ (dos puntos); aparecera un path para escribir.
c) Escriben ‘wq’ y presionan <Enter> (w de write y q de quit). Con esto ya deberian estar nuevamente en el path de linux.
Archivo server.conf:

port 1194
proto udp
dev tun
persist-tun
ca ca.crt
cert servidor.crt
key servidor.key
dh dh1024.pem

#Direcciones que se asignaran a los clientes, el server es .1
server 10.1.1.0 255.255.255.0

ifconfig-pool-persist ipp.txt

#Routeo para que los clientes alcancen la red local del server (1.0/24)
push .route 192.168.1.0 255.255.255.0.

#Para que los clientes se visualicen entre ellos
#Debe ir junto con la opción routeback en el shorewall
client-to-client

keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 4

4) Configuración de cliente OpenVPN en Windows XP, Vista o Seven.

a) Descargar: openvpn-2.0.9-gui-1.0.3-install.exe y luego instalarlo.
b) Copiar a la carpeta «C:\Program Files\OpenVPN\config» con WinSCP o desde un Sftp los archivos:

  • /etc/openvpn/easy-rsa/2.0/keys/ca.crt
  • /etc/openvpn/easy-rsa/2.0/keys/cliente1.crt
  • /etc/openvpn/easy-rsa/2.0/keys/cliente1.key

c) Creamos un archivo TXT y lo guardamos como cliente1.ovpn en «C:\Program Files\OpenVPN\config». Luego le pegamos lo siguiente:

tls-client
client
dev tun
proto udp
remote 192.168.1.135   # IP o dominio del servidor OpenVPN
float #debido a que la IP de arriba es dinamica
resolv-retry infinite
nobind
persist-key
persist-tun
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"  #revisar las comillas luego de copy/paste
cert "C:\\Program Files\\OpenVPN\\config\\cliente1.crt"
key "C:\\Program Files\\OpenVPN\\config\\cliente1.key"
comp-lzo
verb 4

5) Reiniciamos openvpn en Debian

#  /etc/init.d/openvpn restart

Stopping virtual private network daemon: server.
Starting virtual private network daemon: server.

6) Iniciamos OpenVpn en windows. Ver Imagen

Click con boton derecho en el iconito señalado, y luego click en Connect. Si no nos arroja ningún error significa que todo es un éxito.

______________
Nicolas Tech-Nico.com

Resolver «Zone expired | unexpected rcode (SERVFAIL)» en Bind9

Hoy me ocurrió que luego de un mal apagado del servidor, había dejado de resolver mis zonas DNS. Mirando el SYSLOG note el error: «zone tech-nico.com.ar/IN: expired«.

Oct 16 16:12:47 www named[11730]: zone tech-nico.com.ar/IN: expired
Oct 16 16:12:47 www named[11730]: zone 114.58.200.in-addr.arpa/IN: expired
Oct 16 16:12:48 www named[11730]: zone tech-nico.com.ar/IN: refresh: unexpected rcode (SERVFAIL) from master 200.58.114.78#53 (source 0.0.0.0#0)
Oct 16 16:12:48 www named[11730]: zone 114.58.200.in-addr.arpa/IN: refresh: unexpected rcode (SERVFAIL) from master 200.58.114.78#53 (source 0.0.0.0#0)
Oct 16 16:13:36 www named[11730]: zone 114.58.200.in-addr.arpa/IN: refresh: unexpected rcode (SERVFAIL) from master 200.58.114.78#53 (source 0.0.0.0#0)
Oct 16 16:13:38 www named[11730]: zone tech-nico.com.ar/IN: refresh: unexpected rcode (SERVFAIL) from master 200.58.114.78#53 (source 0.0.0.0#0)

Lo resolvi cambiando el serial code en todas las zonas; Ejemplo: /etc/bind/tech-nico.com.ar

$TTL 3600
tech-nico.com.ar.     IN      SOA     dns1.tech-nico.com.ar. root.tech-nico.com.ar.       (
                        2011101610  ;  serial number

Donde «2011101610» es formato YYYYMMDDXX. YYYY= año MM=mes DD=dia y XX=Numero de revisión.

_____________________
tech-nico.com 

Servidor de archivos en Debian 6 (Samba)

Algo que siempre nos va a venir al pelo es la configuración del Samba para compartir archivos en un Grupo de Trabajo. Lo publicamos como ayuda de memoria.

Tarea: compartir 2 carpetas en el grupo TECHNICO. Cada carpeta pertenece a un usuario distinto.

1) Vamos a instalar los paquetes del Samba:

# apt-get install samba samba-common smbclient samba-doc smbfs

2) hacemos un backup del archivo de configuracion.

# cp  /etc/samba/smb.conf   /etc/samba/smb.conf.original

3) Instalamos el editor VI y luego entramos a editar smb.conf

#  apt-get install vim
# vi /etc/samba/smb.conf

 #========= Global Settings ==============
[global]
workgroup = TECHNICO 

##### Authentication ######
## descomentar la siguiente linea.
##(Es para poder loguearnos con las cuentas de linux)
security = user 

 #### al final del archivo agregamos ###

[cattaneo]
 comment = bienvenido 
 path = /home/samba/cattaneo
 browseable = yes 
 read only = no 
 valid users = cattaneo

[deepdish] 
 comment = hola 
 path = /home/samba/deepdish 
 browseable = yes 
 read only = no 
 valid users = deepdish 

USO DEL VI Editor
a) Para editar presionan la letra «i» o la tecla <insert>. Luego para finalizar de editar <esc>
b) para guardar y salir del vi:  escriben ‘ : ‘  (dos puntos); aparecera un path para escribir.
c) Escriben ‘wq’  y presionan <Enter> (w de write y q de quit). Con esto ya deberian estar nuevamente en el path de linux.

4) Creamos usuarios de sistema (sin shell ni directorio personal) y de samba. (va a pedir las contraseñas usar la misma en adduser que en smbpasswd).

# adduser –shell /bin/false –no-create-home cattaneo
# adduser –shell /bin/false –no-create-home deepdish
# smbpasswd -a cattaneo
# smbpasswd -a deepdish

5) Creamos carpetas y permisos (en este caso le doy permisos totales 777)

# cd /home
# mkdir samba
# chmod 777 samba
# cd samba
# mkdir cattaneo
# mkdir deepdish
# chmod 777 cattaneo/   &&  chmod 777 deepdish/
# chown cattaneo:cattaneo cattaneo/
# chown deepdish:deepdish deepdish/

6) reiniciamos el servicio Samba con:

# /etc/init.d/samba restart

Fuente: Curso de Linux Clase 14 Parte II

_______________
tech-nico.com/blog
nicolas daitsch