miércoles, 29 de diciembre de 2010

Extractor casero de Humos (Parte 1)

Vamos a iniciar una nueva sección en este blog en la construcción de utilidades para el Hogar, Coche/Barco y Jardín utilizando las nuevas tecnologías, llamando a esta sección como Zona Geek.

El primer proyecto es un extractor casero de humos para baño, cocina y taller (como por ejemplo para soldaduras de circuitos electrónicos).

Construcción del prototipo básico.

Materiales.
  • 1x Placa de circuito impreso pre-estañada.
  • 1x Un regulador de tensión 7812.
  • 1x Ventilador de PC de 80mm.
  • 1x Interruptor SPST (del tipo Rocket)
  • 2x Batería de 9V (preferiblemente recargables).
  • 2x Conectores de bateria 9V flexibles.
  • 1x Cable de prototipado o trenzado.
  • 1x Estaño y soldador.
  • 1x Helping hand tool (opcional)

Diseño del circuito.

El circuito es bien sencillo y se muestra en el diagrama adjunto. Radica en obtener una tensión de 12V para los ventiladores a partir del regulador, y que mejor que un par de pilas recargables de 9V para tal efecto.


Fotografías de los materiales y prototipo.

Pilas recargables (si las compras en Hong Kong, puedes tener 12 pilas 9V a 300 mAh por 3EUR en total S&H incluido, que si comparamos con una Energizer de 9V de 150mAh vale 7 EUR, sobran las palabras).


NOTA: Utilizable para todo tipo de proyectos que necesites potencia: robots, actuators, ...


Conectores de baterias de 9V y rocket switches.



Ventiladores de PC de 80mm.



Un Helping Hand Tool con aumento, útil para modelismo y en nuestro caso para soldar.



Video del prototipo.

El siguiente video muestra el prototipo en funcionamiento con un ventilador de bajo perfil y de 2.5 W

video

Próximamente...

Vista la funcionalidad del prototipo, se van a realizar dos instalaciones en el hogar, siendo estas:

Instalación en cocina
  1. Instalaremos en la cocina como segundo sistema de ventilación de gases.
  2. Cambiaremos el ventilador de PC de bajo perfil por dos de PC normales de 12V, y conectados por MOLEX para posibles ampliaciones de ventiladores en paralelo.
  3. Instalaremos la circuitería, interruptor y baterias en una caja de PVC para dejar el sistema en perfecto acabado.
  4. Colocación de la rejilla de tipo 30 interna (apertura nominal: 0,623mm, diametro: 34 SWG, area abierta: 54%) y la externa.

Instalación en baño y/o aseo
  1. Instalaremos en el baño y en el aseo como sistema activo de ventilación de olores y humedad.
  2. Añadiremos un segundo ventilador para la rejilla pasiva actual de 10x20cm.
  3. Añadiremos entre rejilla y ventiladores una capa de carbón activo.
  4. Cambiaremos el rocket switch SPST por uno que incluya LED de estado.

sábado, 11 de diciembre de 2010

Comunicación Arduino con LCD basado en chip HD44780

El controlador HD44780 es muy común en pantallas LCD (formatos 16x2 o 20x4) y es idóneo para integrarlo como sistema de salida de información de un proyecto basado en Arduino.

Veámos, en esta entrada al blog, como se puede integrar con una placa Arduino, una circuiteria mínima y un programa de test asociado.

CIRCUITERIA
La circuiteria externa que utilizaremos para conectar el LCD con el Arduino, en nuestro caso con un Arduino UNO la podemos ver en el esquema siguiente que he realizado con el software Fritzing:

La implementación física:


Destacar que el chip de controlador del LCD, el HD44780, todo y ser muy común, debemos verificar la asignación de cada uno de los 16 pines de que dispone para asegurarnos de que el fabricante en cuestión no haya cambiado el orden de asignaciones.


ESQUEMA LCD 20x4
La información del datasheet del LCD 20x4 adquirido tiene las siguientes características:

Fabricante: Xiamen Ocular
Modelo: GDM2004D (ver datasheet)
Controlador: S6A0060 (compatible 100% HD44780)
Características: 5x8 dots, +5V power supply, 1/16 dutycycle, LED Backlight
  • Pin 1: Vss
  • Pin 2: Vdd
  • Pin 3: Vo
  • Pin 4: RS
  • Pin 5: R/W
  • Pin 6: E
  • Pin 7 a 10: DB0-DB3
  • Pin 11 a 14: DB4-DB7
  • Pin 15: LED+ (ánodo)
  • Pin 16: LED- (GND)

PROGRAMA ARDUINO
El programa que utilizaremos para probar la comunicación del Arduino con el LCD es el siguiente:

/*
Arduino - FreeNAS

The circuit:
LCD 1 (0V) to arduino ground pin 14 o al pin GND de power
LCD 2 (5V) to arduino +5 V
LCD 3 (V0) to output from potentiometer 10kOhm connected between +5 V and GND
LCD 4 (RS) to arduino pin 7
LCD 5 (R/W) to arduino ground
LCD 6 (E) to arduino pin 6
LCD 11 (DB4), 12 (DB5), 13 (DB6), 14 (DB7) on arduino pins 2, 3, 4, 5
LCD 15 (LED+) through resistor 12 Ohm to arduino +5 V
LCD 16 (LED-) to arduino ground
*/

LiquidCrystal lcd(7,6,5,4,3,2);

void setup() {
lcd.begin(20, 4);
lcd.setCursor(2,0);
lcd.print("DISPLAY LCD 4x20");
lcd.setCursor(6,1);
lcd.print("Proyecto");
lcd.setCursor(3,2);
lcd.print("Arduino-FreeNAS");
lcd.setCursor(1,3);
lcd.print("by RFKsolutions.es");
}

void loop() {
}


TEST DE FUNCIONAMIENTO
Podemos ver en el video como la placa Arduino envía desde su programa interno la información al display LCD y que en este caso hemos conectado la placa a una fuente USB externa, por lo que no necesitamos de un PC con puerto USB.



Se aprecia en el vídeo que si eliminamos la alimentación al pin 15 (en este caso abriendo el circuito eliminando la resistencia de 12 ohm) el LCD queda sin retroiluminación, y tenemos un LCD 100% operativo pero sin dicha característica.

sábado, 4 de diciembre de 2010

Comunicación por USB entre Arduino y un PC vía java.

La forma más fácil para comunicar el Arduino UNO con un PC es mediante el puerto USB/Serie y en este caso utilizaremos a tal efecto la librería RXTX de Java.

Arduino
En el Arduino se copia el programa de ejemplo ASCII Table que viene en la versión 0021 del software de programación Arduino.
  • Menu: File -> Examples -> 4.Communication -> ASCIITable

PC
En el PC bajo un entorno Eclipse de desarrollo y añadiendo la libreria RXTX (disponible en rxtx.org) se definen los siguientes ficheros:

TEST DE FUNCIONAMIENTO
Podemos ver en el video la pulsación en la placa Arduino y como se recoge la información en una aplicación java y se visualiza en consola el volcado de datos que envia el Arduino, en este caso la tabla ASCII.

Primeros pasos con Arduino UNO

Después de casi 15 años sin realizar "chapuzillas electrónicas" desde que acabe la carrera, ya es cuestión de refrescar un poco todos los conocimientos y aprovechar las facilidades que ofrecen los nuevos gadgets, de aquí mi nuevo juguete, el Arduino UNO (ver web arduino.cc).

De momento mi intención es informar del estado del servidor NAS (ver Servidor NAS) hacia el Arduino, procesar los mensajes y visualizarlos en la pantalla del LCD. El como ya veremos, debido a que en mi servidor NAS corre el sistema operativo FreeNAS y veremos como acceder vía USB.

El coste del prototipo es el siguiente:
  • 1x Arduino UNO 25,96 €
  • 1x Pantalla LCD 20x4 caracteres - Negro/Verde 17,82 €
  • 1x Set de cables M/M (10 Unid.) 3,84 €
  • 1x Mini tabla-prototipo adhesiva 3,84 €
  • 1x Cable USB
Todos los productos han sido adquiridos en BricoGeek.com, tienda online en España que la recomiendo para este tipo de componentes.

Empiezan las pruebas y de momento, código de proyecto creado en Google Code: arduino-freenas



miércoles, 1 de diciembre de 2010

Control remoto para XBMC

Después de utilizar durante largo tiempo un mando remoto compatible MCE para XBMC (el mando gris de la fotografía adjunta) he decidido adquirir una versión idéntica en funcionalidades, pero de diseño extraplano, pequeño, negro y con batería CR2032 (el mando negro de la fotografía)


  • 1x Remote Control MCE compatible negro (5 EUR nuevo en eBay; costes de envío incluidos)
Se trata de un dispositivo de conectar y listo, el mando incluye un mini-adaptador IR que se conecta a un puerto USB libre e interactúa directamente con el sistema operativo Windows, sin la necesidad de instalar ningún driver dada su compatibilidad MCE y sus 18 metros de alcance lo hacen idóneo para instalaciones de HTPC (ver artículo HTPC inalámbrico 802.11n con XBMC)

domingo, 28 de noviembre de 2010

Actualización Servidor NAS (Nov 2010)

El servidor NAS local montado sobre la infrasestructura de FreeNAS ha sufrido una serie de cambios a nivel hardware que podemos apreciar en el conjunto de fotografias adjuntas en la presente entrada.

  • Cambiada la placa PCI de 4 puertos SATA SIL3114 a una PCI SATA II SIL3124 con soporte de Port Multiplier y Native Command Queuing.
  • Añadido bracket E-SATA en ranura posterior.
  • Cambiada las 2 placas conversoras CompactFlash-IDE a una placa doble CF-IDE conectada directamente en la placa madre.
  • Añadida caja refrigeradora Evercool para tres discos 3.5" con ventilador de 80mm.
  • Restructuración de discos y cables.



El sistema operativo del servidor FreeNAS corre sencillamente en una CompactFlash de 64Mb, aun así disponemos de otra CompactFlash (de slave en el bus IDE) de 8GB para el uso de otras apliaciones adicionales: descarga de archivos de Transmission, scripts de automatización, etc.



Gracias a un bracket posterior con conexión eSATA y conectada a la placa con Port Multiplier podremos disponer de un número ilimitado de conexiones SATA-II en el exterior del servidor, al igual que queda un puerto libre por si es necesario añadir algún multiplicador internamente.


De momento, dispone de los siguientes dispositivos de almacenamiento:
  • 1x CF de 64 MB
  • 1x CF de 8GB
  • 4x HDD SATA II de 500GB
  • 2x HDD SATA II de 750GB
Destacar que el servidor sigue siendo expandible, ya que queda libre:
  • 1x Puerto eSATA.
  • 1x Puerto SATA II (soporta Port Multiplier y NCQ).
  • 1x Caja para 3 discos HotSwap RAID.
  • 1x Ranura PCI libre.
  • 3x Ranuras PCI-Express libre.
  • 1x Ranura PCI-Express 16 libre.
  • 3x Bahías internas de 3.5".
  • 6x Puertos USB 2.0.

Entradas relacionadas en este blog:

miércoles, 24 de noviembre de 2010

Evercool ARMOR Dual para 3xHDD Cooler

La última adquisición para mi NAS doméstico es un Cooler de disco duro que se aloja en dos bahías de 5.25", el Evercool ARMOR HD-AR permitiendo disponer de 3 discos duros de 3.5" altamente refrigerados.


Mediante un ventilador de 8 cm a una velocidad de 1200 rpm, un nivel de ruido inferior a 26 dBa, y una tapa abatible con almohadillas silenciadoras, dispondremos de un sistema ultrasilencioso y altamente refrigerado para cualquier tipo de disco.

Podemos apreciar en la imagen como queda tras su instalación.


La gráfica siguiente proporcionada por FreeNAS muestra la temperatura de 28ºC del disco ad13 (Seagate SATA I de 500GB) alojado en el Evercool ARMOR después de copiado de un fichero de 8Gb desde la red, por lo que obtenemos máxima actividad a mínima temperatura.


El mejor precio lo he encontrado por 25 USD en la web de FrozenCPU y lo recomiendo altamente para los sistemas NAS domésticos.

lunes, 1 de noviembre de 2010

jueves, 14 de octubre de 2010

Auriculares Sennheiser HD 555

Por fin, después de una semana larga ya tengo mi regalo de cumpleaños recien llegado de Alemania, unos auriculares Sennheiser HD 555 para los ratos de cine de alta definición (cuando no quieres molestar al resto).


Adjunto un video de la calidad que no demuestra lo espectaculares que son.



Características

  • Refinamiento acústico ergonómico (E.A.R.) permite canalización ideal de sonido.
  • La avanzada tecnología de diafragma Duofol que elimina las ondas estacionarias dentro de la cápsula.
  • Sistemas ferro magnéticos de neodimio de campo reforzado altamente optimizados
  • Extraordinaria comodidad de uso para escuchar sesiones largas.
  • Longevidad a través de componentes intercambiables.
  • Ligeras bobinas de voz de aluminio para elevada eficiencia y dinámicos excelentes.
  • Almohadillas para oido de velour suaves al contacto con la piel.
  • Reflector surround para características de sonido espacia.

Datos Técnicos

Impedancia nominal50 Ω
Presión de contacto3,5 N
Peso sin cable
260 g
Clavija hembra/receptáculo hembra6,3 mm stereo (3,5 mm Adapter)
Principio del transductordinámico, abierto
Acoplamiento al oidocircumaural
Longitud del cable3 m
Respuesta de (audio) frecuencia (audífonos)15 - 28000 Hz
Nivel de presión del sonido (SPL)112 dB
THD, distorsión armónica totalinferior a 0,2 %


Precio adquirido por 105 EUR.

¡RECOMENDADO !


martes, 12 de octubre de 2010

Uso de Clonezilla en FreeNAS

El artículo Using Clonezilla with FreeNAS nos describe como realizar un backup de un disco duro y almacenarlo en un recurso compartido.

De esta manera, teniendo una imagen de un disco duro, se pueden restaurar sistemas completos de manera individual o por ejemplo en los PCs de aulas de formación.

domingo, 3 de octubre de 2010

Cliente Torrent en FreeNAS

El sistema operativo FreeNAS para soluciones NAS opensource facilita un cliente del protocolo BitTorrent llamado Transmission.

En el presente artículo vamos a ver como configurar dicho servicio sobre:
  • Versión 0.7.1 de FreeNAS que incluye Transmission 1.92

Lo primero de todo, es acceder a la pestaña Servicios | BitTorrent del WebGUI de FreeNAS, la cual nos permite activar y configurar el cliente Transmission desde la interficie web.

En la presente configuración usaremos una Compact Flash interna (visto en el artículo Extender el S.O. FreeNAS embedded) como sistema que almacene la configuración asi como los ficheros descargados, para posteriormente moverlos a su destino (visto en el artículo Automatización copiado interno en FreeNAS)
  • Puerto del equipo: 45004
  • Directorio de descargas: /mnt/cfinterno/usr/transmission/
  • Directorio de configuración: /mnt/cfinterno/usr/transmission/.transmission_config
  • Directorio para observar: /mnt/cfinterno/usr/transmission/automatico/
  • Reenvío de puertos: desactivado
  • Intercambio de equipo-par: activado
  • Tabla de hash distribuida: activado
  • Cifrado: preferidos
  • Ancho de banda de subida: 10
  • Ancho de banda de descarga: 500
  • Directorio incompleto: vacio
  • Máscara de usuario: vacio
  • Opciones extra: vacio
Configuraremos tambien el WebGui de Transmission
  • Puerto: 9091
  • Autentificación: activado
  • Usuario: admin
  • Contraseña: ******
La imagen adjunta muestra el ejemplo de la configuración descrita.

En este punto, ya podemos guardar la configuración y comprobar su funcionamiento accediendo a la página web de Transmission de nuestro servidor FreeNAS.

La imagen adjunta muestra dicha interficie web


NOTA: Es aconsejable, acceder mediante Telnet/SSH y comprobar que la carpeta transmission e hijas tienen los permisos 777 y son del usuario transmission.


Artículos relacionados
  • Extender el S.O. FreeNAS embedded (link)
  • Automatización copiado interno en FreeNAS (link)

domingo, 26 de septiembre de 2010

Soluciones NAS


RFKsolutions FSNAS-600G es el servidor NAS de 6 discos para el entorno doméstico, pequeña y mediana empresa en formato barebone extendido capaz de gestionar 12 TB.

Amplie la información aquí.

viernes, 24 de septiembre de 2010

Reformatear una CF (Compact Flash)

Actualmente se suelen utilizar dispositivos USB, SD o CompactFlash para realizar volcados de imágenes ISO, sistemas autoarrancables o como elemento de almacenamiento de configuraciones. Hasta aquí todo correcto, pero que ocurre cuando queremos reutilizar dicho dispositivo para otro uso y vemos que ¿ no lo podemos reformatear ?

Existe una solución en Windows Vista/7 siguiendo unos simples pasos:

  1. Abrir una ventana de linea de comandos como admin ("cmd")
  2. Teclear "diskpart" y presionar Enter.
  3. Teclear "list disk" y presionar Enter para encontrar el número de tu drive.
  4. Teclear "select disk X" (donde remplacaremos la X con el número de tu drive) y presionar Enter.
  5. Teclear "clean" y presionar Enter.

domingo, 19 de septiembre de 2010

Soluciones NAS

S400 Connected Storage de UEBO: "El nuevo sistema de almacenamiento de Uebo S400 Connected Storage facilita la compartición de ficheros de manera fácil en entornos Macintosh, Linux, Unix y SO Windows de 32 o 64 bits mediante un servidor NAS de 4 bahias que permite un máximo de 8TB de almacenamiento en red..."

domingo, 12 de septiembre de 2010

HTPC inalámbrico 802.11n con XBMC

El presente artículo describe los elementos para la realización DIY (en español HUM) de un HTPC que cumpla ampliamente las especificaciones para un Home Theater Wireless (un HTPC auxiliar para una segunda sala, la habitación de los niños, etc.) y todo con el mínimo coste posible.

Lo primero, el hardware para esta prueba de concepto.

  • 1x Placa Mini-ITX Intel D510MO (64 EUR)
  • 1x Caja Chembro PC78131 con PSU de 60W (44 EUR)
  • 1x DDR2 SDRAM 1GB (34EUR)
  • 1x Slim Sata DVD Sony AD-7700S (36 EUR)
  • 1x HD 2.5" SATA 80 GB (22 EUR)
  • 1x Adaptador 802.11n 1T2R (15 EUR)
  • 1x Adaptador Slim Sata 13 pin-7pin (11 EUR)
  • 1x Altavoces 100W Philips SPA7351 Multimedia 2.1 (60 EUR)
  • 1x Monitor VGA
  • 1x Ratón (opcional)
  • 1x Teclado (opcional)
  • 1x Remote Control MCE compatible (6 EUR)
El uso del ratón y el teclado sólo nos sirve para la configuración, ya que activando el Mando a distancia compatible MCE podremos controlar el XBMC remotamente.

El monitor VGA nos sirve para poder reciclar un antiguo monitor en desuso y montar de esta manera un HTPC de bajo coste, no obstante siempre existe la posibilidad de adquirir un monitor de TFT/Plasma panorámico con entrada VGA.

Y por último, y quizás lo más importante, el software, la versión XBMC 9.11 (Skin Confluence)
De momento, el sistema corre con la distribución XBMC de Windows sobre un Windows XP con SP3, por lo que tan solo descargaremos la versión de Windows y la instalaremos en un Windows ya configurado con la tarjeta WIFI-N y el mando a distancia MCE.

Notas
  1. La placa D510MO [1][2] es capaz de dar salida sin perdidas por la VGA similar a las salidas digitales HDMI de otras placas, por lo que ahorramos de esta manera en costes.
  2. La ethernet de Gigabit proporcionada por la placa madre no se utiliza al tratarse de un HTPC inalámbrico mediante Wifi-N.
Una serie de imágenes complementarias
Adaptador 802.11n inalámbrico 1T2R (velocidad de recepción de 150Mbps)
Mando MCE compatible

Futuro
En un próximo artículo realizaremos con la arquitectura aquí mostrada, una serie de cambios a optimizar el equipo, tales como:
  • Eliminar el SO Windows XP al querer solamente un HTPC wireless dedicado.
  • Añadir una placa Mini PCI-Express con soporte para Compact Flash.
  • Añadir una CF (Compact Flash) de 4 GB para tener la versión embedded XBMC almacenada de manera persistente.
  • Eliminar el HD Sata de 80GB para reducir consumo y reducir el ruido a menos de 9dB.

viernes, 6 de agosto de 2010

Configuración firewall para servicio Samba en FreeNAS.

El presente artículo tiene como objetivo añadir políticas de seguridad al firewall mediante la configuración de las reglas de ipfw (IPFIREWALL de FreeBSD que se incluye en la instalación de FreeNAS) que permita a un cliente acceder a los recursos compartidos via Samba que ofrece el servidor NAS.

Veamos el escenario (arquitectura de una instalación típica) al que vamos a aplicar esta política.

Objetivo
  • Limitar el acceso al PC 192.168.1.5 para que sólo pueda acceder a los servicios de SMB/CIFS del servidor NAS.
Configuración
Aplica las reglas del firewall del servidor NAS 192.168.1.4 para que el PC 192.168.1.5 sólo pueda acceder al servicio de Samba (poder copiar o leer ficheros de carpetas compartidas).

En el artículo previo, se habían dado permisos globales al cliente 192.168.1.5 de acceso al servidor FreeNAS 192.168.1.4, siendo las reglas de ipfw las siguientes:


Eliminamos dichas reglas.

Ahora, vamos a hacer el firewall más restrictivo, tal que este cliente sólo tenga acceso al servicio de compartición de recursos Samba, en otras palabras, que el PC 192.168.1.5 (Windows XP) pueda grabar ficheros en un directorio compartido del servidor NAS.


siendo las reglas generadas:
00060 allow udp from 192.168.1.5 137 to any dst-port 137 via re0
00061 allow udp from 192.168.1.5 138 to any dst-port 138 out via re0
00062 allow tcp from 192.168.1.5 to 192.168.1.4 dst-port 139 via re0
00064 allow udp from 192.168.1.4 137 to 192.168.1.5 dst-port 137 via re0
00065 allow udp from 192.168.1.4 138 to 192.168.1.5 dst-port 138 in via re0
00066 allow tcp from 192.168.1.4 139 to 192.168.1.5 via re0


Observaciones
  1. Las reglas 60 y 62 deberían de ser sólo OUTput, mientras que las 64 y 66 ser sólo INput, no obstante se han activado de IN/OUT por la propagación de SMB originados en el cliente XP.
  2. Hay que tener especial cuidado en los puertos de las reglas 62 y 66, de ahi que nos aseguremos que uno de los puntos sea el puerto 139, ya que la comunicación abre un puerto del 1024 al 65535 y estos deben estar auditados siempre.
  3. Para ser puristas, las reglas 62 y 66 sobre el protocolo NETBIOS session service (139) deberían de tener el flag de ESTABLISHED en la configuración de la regla en FreeNAS, para asegurarnos que sólo hay comunicación tras el establecimiento de sesión.

Notas
El servicio que ofrece FreeNAS para conectarse con redes Windows es mediante Samba y en específico CIFS (Microsoft's Common Internet File System). Suponemos que tenemos el servicio SMB/CIFS de FreeNAS activo y configurado correctamente (Grupo de trabajo, elementos a compartir, etc.) ya que en el presente artículo sólo hemos configurado el firewall de FreeNAS para que un cliente determinado pueda acceder a dichos elementos compartidos.

jueves, 5 de agosto de 2010

Ejemplo de firewall en FreeNAS

La protección que ofrece disponer del firewall activado en un servidor de FreeNAS es más que evidente para el alto volumen de datos que almacena y que deben ser administrados, gestionados y auditados para un correcto uso y seguridad.

Veamos un ejemplo de la configuración de FreeNAS en una arquitectura doméstica típica, en este caso, es la propia de la que os escribe instalada en su casa.

La configuración la vamos a realizar en el elemento del dibujo llamado Firewall FreeNAS que para su entendimiento lo hemos separado visualmente del Servidor NAS (FreeNAS), pero que forma parte intrínseca de él.

En el gráfico siguiente el conjunto de reglas aplicadas al firewall (en formato GUI) para la arquitectura anterior, al cual se accede mediante la opción de menú Red->Cortafuegos.


siendo las reglas generadas las siguientes:
freenas# ipfw list
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
00400 allow ip from 192.168.1.2 to any in via re0
00500 allow ip from any to 192.168.1.2 out via re0
00600 allow ip from 192.168.1.3 to any in via re0
00700 allow ip from any to 192.168.1.3 out via re0
00800 allow ip from 192.168.1.5 to any in via re0
00900 allow ip from any to 192.168.1.5 out via re0
01000 allow ip from 192.168.1.10 to any in via re0
01100 allow ip from any to 192.168.1.10 out via re0
01200 allow ip from any to 192.168.1.255 dst-port 137 via re0
01300 allow ip from any to 192.168.1.255 dst-port 138 via re0
01400 allow ip from any to 192.168.1.255 dst-port 139 via re0
01500 allow tcp from any 22 to any via re0
01600 allow icmp from any to any via re0
01700 allow ip from any to any dst-port 123 via re0
01800 allow udp from any 5353 to any dst-port 5353 via re0
01900 allow ip from any to 80.58.61.250 dst-port 53 via re0
02000 allow ip from 80.58.61.250 53 to any via re0
02100 allow ip from any to 224.0.0.251 out via re0
02200 allow ip from any to 224.0.0.1 in via re0
02300 deny log logamount 5 ip from any to any in via re0
02400 deny log logamount 5 ip from any to any out via re0
65535 allow ip from any to any


Explicación de las reglas de acceso al servidor FreeNAS:
  • Al dispositivo 192.168.1.3 se le da acceso total a los servicios/puertos de FreeNAS; se trata de un portátil de propósito general.
  • Al dispositivo 192.168.1.5 se le da acceso total a los servicios/puertos de FreeNAS; se trata de un MiniPC fanless de descargas.
  • Al dispositivo 192.168.1.10 se le da acceso total a los servicios/puertos de FreeNAS; se trata de un NetworkedMediaTank que reproduce contenidos multimedia hacia la TV desde contenidos almacenados en red.
  • El dispositivo 192.168.1.2 es un router Wireless 802.11N que ofrece alta velocidad de transmissión (72Mbps en receptores WifiN MIMO 1T1R, 150Mbps en receptores WifiN 1T2R; ambos trabajando a la frecuencia de 20, a la de 40 se duplica hasta los 300Mbps) al cual se le abren todos los servicios/puertos del FreeNAS, para la nueva red 192.168.2.x (Explicaremos más sobre este router inalámbrico y su uso en un nuevo post).
  • Se abren los puertos de difusión de NetBIOS (para la compartición CIFS/SMB).
  • Se abre el puerto de SSH (Puerto 22).
  • Se abre el puerto 123 para sincronización NTP.
  • Se configura el puerto 53 y 5353 para sincronización DNS y DNS bonjour.
  • Se abre el puerto de ICMP (ping).
  • Se abre IGMP debido a multidifusión del proveedor (ADSL y Televisión).
  • Se cierra todo el resto.
NOTA: Se pueden cerrar más los puertos para los PCs que acceden, pero de momento no es necesario acotar las funcionalidades.

Espero que pueda servir de base para proteger vuestro entorno doméstico y/o profesional y entender su funcionamiento en un escenario real y típico.


sábado, 17 de julio de 2010

Switch Gigabit 5 puertos a pleno funcionamiento

Después de haber instalado un Switch de Gigabit 3CGSU05A de 3Com conectando a un servidor de FreeNAS con tarjeta de red GigaEthernet se consigue un aumento expectacular en la transferencia de archivos, sin limitaciones ni cuellos de botella en origen para la reproducción FullHD (*.mkv) en red.

NOTA: Tras la adquisición de 3Com por HP, el producto se llama HP 1405-5G Switch.

Sin la necesidad de activar JumboFrames, desde portátiles, PCs o NetworkedMediaTanks (MediaPlayers de red) podemos acceder al máximo ancho de banda disponible para la reproducción de la Alta Definición en red.

Ejemplo
: La gráfica adjunta muestra la copia de un fichero FullHD mkv en menos de 1 minuto hacia el servidor FreeNAS en la red gigabit con este switch.


Información técnica.

El 3Com Gigabit Switch 5 busca automáticamente la velocidad de conexión más rápida, los puertos 10/100/1000 con detección automática se ajustan automáticamente a la velocidad de los dispositivos de la red comunicando a 1000, 100 o 10 Mbps, de forma que el conmutador puede acomodar toda una gama de aplicaciones para grupo de trabajo. Lo único que se necesita es conectar la alimentación y los cables Ethernet.

No es necesario configurar ningún software. Fáciles de configurar, estos conmutadores ofrecen un diseño sin ventilador que permite un funcionamiento silencioso. Con 5 puertos, puede expandir su red añadiendo más ordenadores o dispositivos con velocidades de hasta 2000 Mbps por puerto en modo full-duplex.


Mas información en HP.

Adquirido en Marzo 2010 a precio en distribuidor de 38 EUR en la web de Optize.es

domingo, 27 de junio de 2010

100W Philips SPA7351 Multimedia 2.1

Mi última adquisición para reproducir multimedia en el Portátil y no se quede corto, 100W y envolvente 2.1 y como no, sonido Philips con Bass Reflex.


El blindaje magnético elimina la distorsión de la pantalla del ordenador

Puesto que los potentes imanes en los controladores del altavoz están blindados magnéticamente, no existe peligro de que provoquen distorsiones de imagen o daños de otro tipo cuando se colocan cerca de la pantalla del ordenador.

Control remoto de volumen para un ajuste cómodo del sonido

El práctico control remoto con cable pone el ajuste del nivel del volumen al alcance de los dedos.



Tecnología de refuerzo de graves con control de nivel

El diseño único del subwoofer produce graves mucho más profundos y de mayor calidad. El usuario puede también definir el nivel de graves a su gusto



Adquirido en Junio 2010 a precio en distribuidor de 60 EUR en la web de Optize.es

domingo, 13 de junio de 2010

Upload de FTP desatendido

El presente Script facilita la automatización de subidas de ficheros locales a un servidor remoto mediante FTP sin la necesidad de interactuar por la linea de comandos.

Script uploadftp.bat

@ECHO OFF
SETLOCAL
SET _SITE=
ftp.siteftp.com
SET _USER=
miFtpUser

IF "%2"=="" GOTO Sintaxis

> uploadftp.scr ECHO %_USER%
>>uploadftp.scr ECHO %1
>>uploadftp.scr ECHO binary
>>uploadftp.scr ECHO prompt n
>>uploadftp.scr ECHO mput %2
>>uploadftp.scr ECHO bye

:: Nota1: dependiendo S.O. puede ser necesario añadir el parametro '-n'
:: Nota2: Añadir el parametro -v para no hacer caso a las respuestas del servidor
FTP -s:uploadftp.scr %_SITE% >> uploadftp.log

TYPE NUL >uploadftp.scr
DEL uploadftp.scr
GOTO Final

:Sintaxis
ECHO Uso: %0 miPassword misFicheros*.*

:Final

Es necesario modificar el presente script para definir el site FTP destino en el campo _SITE y el usuario de FTP en el campo _USER, asi como si se desea o no el fichero de logs.

domingo, 9 de mayo de 2010

Añadir auditoría en los scripts de FreeNAS

En el artículo previo del presente blog "Automatización copiado interno en FreeNAS" podíamos ver un ejemplo de uso de scripting para la centralización de contenido multimedia. Vamos a dar un paso mas, creando una librería de funciones, y para empezar:

"Registro de auditoria (logs) centralizado"

Los pasos que debemos seguir son:
  1. Creación (o selección) de un directorio del disco duro o almacenamiento permanente, p.ej. /mnt/cfinterno/scripts/
  2. Creación de una entrada en WebGUI -> Sistema -> Avanzado -> rc.conf llamada usr_path y que apuntará al directorio creado en el paso anterior.
  3. Creación de un subdirectorio inc en el directorio creado en los pasos anteriores (p.ej. /mnt/cfinterno/scripts/inc/)
  4. Creación de un fichero llamado log.sh y almacenado en el directorio del paso anterior, con el contenido siguiente:


#***************************************************************************************************
#inc/log.sh
#Version: 0.1
#Author: Serg Rogovtsev (freenas@hawke.ru)
#Confirmed to work on: FreeNAS 0.7RC1 i386 embedded
#***************************************************************************************************
#
#Please send your working configurations/platforms to freenas@hawke.ru
#
#Is expected (altough not *fully* tested yet) to be safe to run from CRON:
#all paths are absolute, so we don't expect anything to be in out PATH
#
#Note: most "reasonable" console configuration is default, which puts all logging messages to STDERR.
#This way you could echo needed data from sub-shells and still don't mix it with log messages
#If you use H_LOG_USE_STDOUT you may end up with "VERBOSE" and "NORMAL" messages mixing up with your output.
#
#***************************************************************************************************

#Don't include twice
test -n "$H_LOG_INCLUDED" && return;
readonly H_LOG_INCLUDED="Y";

#***************************************************************************************************
#What to use as log source (used in full-line formats and in syslog). Default - script filename without .sh extension
H_LOG_SOURCE="${H_LOG_SOURCE:-`/usr/bin/basename -s \".sh\" \"$0\"`}"
#"Y" will put console log ouput to STDOUT instead of STDERR
H_LOG_USE_STDOUT=${H_LOG_USE_STDOUT:-N}
#"Y" will allow output of "verbose" (0) level messages (to all media); will also force output of normal (1) messages if not console is connected
H_LOG_VERBOSE=${H_LOG_VERBOSE:-N}
#"Y" will suspend ALL console log output
H_LOG_QUIET=${H_LOG_QUIET:-N}
#"Y" will enable syslogd logging, "N" will disable it
H_LOG_SYSLOG_ENABLED=${H_LOG_SYSLOG_ENABLED:-Y}
#Non-empty will be treated as a path to additional log for all messages.
#Useful in rc.conf when you don't have a permanent syslog or just want to have a separate global log for script actions.
H_LOG_GLOBAL_FILE_PATH=${H_LOG_GLOBAL_FILE_PATH:-}
#Non-empaty will be treated as a path to additional log.
#Expected to be set in script when file log is requested
H_LOG_FILE_PATH=${H_LOG_FILE_PATH:-}
#Sets date format for file and console-full logging
#see man date(1)
H_LOG_DATE_FORMAT="${H_LOG_DATE_FORMAT:-%b %e %T}"
#"Y" will enable full-line console logging. Default is "N" (short)
H_LOG_CONSOLE_FULL="${H_LOG_CONSOLE_FULL:-N}"
#***************************************************************************************************

#returns stream id depending on H_LOG_USE_STDOUT value
#Arguments: none
#Output: none
#Return: stream id
h_log_get_console()
{
if [ "$H_LOG_USE_STDOUT" = "Y" ]; then
echo 1;
else
echo 2;
fi
}

#Formats message for "full" logging style. Used in file logging and console logging
#Arguments: priority, message
#Output: formatted line
#Return: error code
h_log_format_message()
{
local date="`/bin/date \"+$H_LOG_DATE_FORMAT\"`";
local source="$H_LOG_SOURCE";
local priority="$1";
local message="$2";

/usr/bin/printf '%s %-8s %s: %s\n' "$date" "$priority" "$source" "$message";
}

#Logs message to console depending on settings. Will not log if H_LOG_QUIET=Y. Message format depends on H_LOG_CONSOLE_FULL.
#Arguments: priority, message
#Output: formatted message on STDERR or STDOUT (depending on H_LOG_USE_STDOUT and H_LOG_QUIET)
#Return: error code
h_log_console()
{
test "$H_LOG_QUIET" = "Y" && return
local n=`h_log_get_console`
local msg;
if [ "$H_LOG_CONSOLE_FULL" = "Y" ]; then
msg="`h_log_format_message \"$1\" \"$2\"`";
else
msg="$2";
fi

echo "$msg" >&$n
}

#Logs message to file
#Arguments: priority, message, logfilepath
#Output: none
#Return: error code
h_log_file()
{
h_log_format_message "$1" "$2" >> "$3"
}

#Logs message to syslog
#Arguments: priority, message
#Output: none
#Return: error code
h_log_syslog()
{
/usr/bin/logger -p "user.$1" -t "$H_LOG_SOURCE" "$2"
}

#Logs message to all enabled permanent (non-console) outputs
#Arguments: priority, message
#Output: none
#Return: always 0
h_log_perm()
{
test "$H_LOG_SYSLOG_ENABLED" = "Y" && h_log_syslog "$1" "$2"
test -n "$H_LOG_GLOBAL_FILE_PATH" && h_log_file "$1" "$2" "$H_LOG_GLOBAL_FILE_PATH"
test -n "$H_LOG_FILE_PATH" && h_log_file "$1" "$2" "$H_LOG_FILE_PATH"
return 0
}

#Logs message acccording to settings, level and connected console
#Arguments: level (0 for verbose, 1 for normal, 2 for error), message
#Output: formated message on STDERR or STDOUT (depending on message level, whether console is connected, H_LOG_VERBOSE, H_LOG_USE_STDOUT and H_LOG_QUIET)
#Return: always 0
h_log()
{
case "$1" in
0)
#Verbose messages will be logged only if H_LOG_VERBOSE is Y
#In that case they will be sent to "console" output irregardless it is console or redirect, and to configured permanent outputs
#The only way to stop verbose messaging on console output is using H_LOG_QUIET, which suppresses any "console" log output
test "$H_LOG_VERBOSE" != "Y" && return 0
h_log_console notice "$2"
h_log_perm notice "$2"
;;
1)
#Normal messages will be always logged to configured permanent outputs
#They will be sent to "console" output only if real console is connected to configured stream OR H_LOG_VERBOSE is Y
test -t `h_log_get_console` -o "$H_LOG_VERBOSE" = "Y" && h_log_console notice "$2"
h_log_perm notice "$2"
;;
2)
#Error messages will be always logged to all configured outputs
h_log_console error "$2"
h_log_perm error "$2"
;;
*)
#Unknown levels will be logged as error with additional notification
h_log 2 "Invalid log level $1. Message was: $2"
;;
esac
return 0;
}

#Log error and quits current (sub)shell
#Arguments: message[, exitcode (default 255)]
#Output: formatted error message on STDERR/STDOUT depending on settings
#Return: does not return
h_log_die()
{
h_log_error "Aborted: $1"
exit ${2:-255}
}

#shortcuts
h_log_verbose()
{
h_log 0 "$1"
}

h_log_normal()
{
h_log 1 "$1"
}

h_log_error()
{
h_log 2 "$1"
}


Como cualquier usuario podra utilizar estas rutinas, solo es necesario permiso de lectura. El permiso de ejecución no es necesario ya que no es un script sino un include.
De esta manera ya podemos usar auditoria (logs) en los scripts, y para muestra un simple script de test.


#!/bin/sh
#including rc.conf so we can get user script path
. /etc/rc.conf
#including our subroutines
. "$usr_path/inc/log.sh"

#now doing something, and then logging:
h_log_normal "We're good!"
#oops
h_log_error "Something broken"
#fatality!
h_log_die "You've killed me now, chap..."

La adaptación del script de "Automatización copiado interno en FreeNAS"quedaría pues de la siguiente manera:


#!/bin/sh

# variables de entorno
. /etc/rc.conf
. "$usr_path/inc/log.sh"

# variables del programa
DIRORIGEN="/mnt/cfinterno/usr/transmission/TEMPORAL";
DIRDESTINO="/mnt/data01/CINE/CINE13"

#inicio del programa
h_log_normal "status=start source=$DIRORIGEN target=$DIRDESTINO date=`date -j +"%d/%m/%Y %H:%M:%S"`"
for file in $DIRORIGEN/*.avi
do
if [ "$file" != "$DIRORIGEN/*.avi" ]; then
h_log_normal "[`date -j +"%d/%m/%Y %H:%M:%S"`] $file movido a destino."
mv "$file" "$DIRDESTINO"
sleep 1
fi
done
h_log_normal "status=end"

Un ejemplo de la programación mediante cron del script anterior.

sábado, 1 de mayo de 2010

Automatización copiado interno en FreeNAS

Aprovechando las capacidades que ofrece FreeNAS podemos definir un conjunto de automatismos para el servicio de servidor de contenido multimedia En este caso, un sistema de centralización de ficheros multimedia descargados mediante transmission y movidos automáticamente al destino de explotación de dicho contenido.

En lo que nos afecta a la configuración, los pasos a realizar son:
  1. Creación del script.
  2. Programación de la periodificación.
  3. Registro de actividad integrado en el sistema.

Definición del Script
Lo primero es crear un script que realice la tarea, al que llamamos move_cine.sh que tiene el contenido siguiente:

#!/bin/sh

# variables del programa
DIRORIGEN="/mnt/cfinterno/usr/transmission/TEMPORAL";
DIRDESTINO="/mnt/data/CINE/CINE13"

#inicio del programa
echo `date -j +"%d/%m/%Y %H:%M:%S"` move_cine.sh Inicio del proceso. >> /var/log/mediautils.log
for file in $DIRORIGEN/*.avi
do
if [ "$file" != "$DIRORIGEN/*.avi" ]; then
echo `date -j +"%d/%m/%Y %H:%M:%S"` move_cine.sh "$file" movido al destino. >> /var/log/mediautils.log
mv "$file" "$DIRDESTINO"
sleep 1
fi
done
echo `date -j +"%d/%m/%Y %H:%M:%S"` move_cine.sh Fin del proceso. >> /var/log/mediautils.log

Este script puede editarse posteriormente mediante la opción Avanzado|Editor de archivos siendo no necesario entrar por SSH/Telnet.


Automatización del script
En el menu del WebGUI podemos acceder a automatizar los procesos mediante la opción cron que ofrece FreeNAS, en el apartado Sistema|Avanzado|Cron.


Despues de asegurarnos que el script tiene los permisos de ejecución para el usuario que configuremos en el cron, ya podemos añadir la ruta del script creado y periodificar la ejecución.


Registro de actividad
Para acceder a los logs del script que hemos creado, debemos modificar el fichero de diag_loc.inc localizado en /usr/local/www/ la entrada en el menu del WebGUI para el nuevo log, tal que este integrado en el entorno. Para dicho fin, es necesario añadir el código siguiente:

$mediautils_logfile = rc_getenv_ex("mediautils_logfile", "{$g['varlog_path']}/mediautils.log");

[...]

array(
"visible" => TRUE,
"desc" => "MediaUtils",
"logfile" => $mediautils_logfile,
"filename" => "mediautils.log",
"type" => "plain",
"pattern" => "/^(\S+\s+\S+)\s+(\S+)\s+(.*)$/",
"columns" => array(
array(
"title" => gettext("Date & Time"),
"class" => "listlr", "param" => "nowrap=\"nowrap\"", "pmid" => 1),

array(
"title" => gettext("Service"),
"class" => "listr", "param" => "nowrap=\"nowrap\"", "pmid" => 2),

array(
"title" => gettext("Event"),
"class" => "listr", "param" => "", "pmid" => 3)

)
),


El resultado de las ejecuciones se puede ver accediendo por la opción del menu del WebGUI -> Diagnostico|Registro, en el apartado MediaUtils


Espero que sirva de referencia para futuros shell-scripts y potenciamiento del S.O. FreeBSD sobre el cual esta montado FreeNAS.

domingo, 25 de abril de 2010

Extender el S.O. FreeNAS embedded

Un conjunto de trucos para extender el tamaño de una instalación FreeNAS embedded.

En mi caso, FreeNAS (0.7.1 Shere, revision 5127) esta en una Compact Flash de 64Mb, y en el mismo bus IDE hay otra tarjeta Compact Flash de 8Gb para el uso temporal de Transmission (torrent), pues bien, en dicha tarjeta he añadido la capacidad de extender las capacidades del NAS con nuevos paquetes con los pasos siguientes.

Un ejemplo de como hacerlo:

[Discos|Punto de Montaje|Administración]
Nombre del punto de montaje: cfinterno

[Avanzado|Ejecutar comando]
mkdir /mnt/cfinterno/extensions
mkdir /mnt/cfinterno/extensions/usr
mkdir /mnt/cfinterno/extensions/var
mkdir /mnt/cfinterno/extensions/tmp

mount_unionfs -o w /mnt/cfinterno/extensions/usr/ /usr/
umount /var
mount_unionfs -o w /mnt/cfinterno/extensions/var/ /var/

setenv PKG_TMPDIR /mnt/cfinterno/extensions/tmp/

[Sistema|Avanzado|Scripts de comando]
Comando:
/sbin/mount_unionfs -o w /mnt/cfinterno/extensions/usr/ /usr/

Escriba:
PostInit


Ejemplo de descarga de paquetes, el cual de conecta a Internet y descarga los paquetes que seleccionemos en la nueva estructura.

[Avanzado|Ejecutar comando]
pkg_add -ir wget -P /usr/
pkg_add -ir unrar -P /usr/

Y aqui sólo es el principio...

domingo, 11 de abril de 2010

FreeNAS Upgrade to 0.7.1

La actualización a la nueva versión 0.7.1 de FreeNAS realizada en menos de 5 minutos aporta nuevas funcionales, subida de versiones como la del Transmission (BitTorrent) y corrección de bugs diversos sobre todo en el servicio SMB.

Operativo mi server con dicha versión, y un ejemplo del estado actual en la imagen siguiente:

sábado, 27 de febrero de 2010

Servidor multimedia de +4Tb

Por fin todo centralizado en un servidor Celeron 430 con sus discos SATA para almacenamiento multimedia y las tarjetas CF (Compact Flash) para el Sistema Operativo FreeNAS (64Mb) y el cliente Transmission (Espacio de 8Gb) que consumen en su totalidad sólo 60W.

De momento, dada su utilización como servidor NAS, sólo se han activado los siguientes servicios:
  • NAS (CIFS/Samba)
  • SSH
  • UPnP A/V Media Server
  • Transmission (Torrent)