Mortuux

Diario de un estudiante geek. Informática, tecnología, programación, redes, sistemas operativos, bases de datos…

Archivos en la Categoría: Linux

Reducir el tiempo de espera para utilizar el DNS Secundario. Balanceo de carga

En el archivo /etc/resolv.conf se encuentran definidos los servidores dns, por ejemplo:

nameserver 192.168.1.10

nameserver 192.168.1.11

Éstos actuarían como dns primario y secundario respectivamente. En caso de que falle el primero, se utilizaría el segundo.

El problema se encuentra en que el tiempo de espera (timeout) es alto, alrededor de unos 5 segundos, por lo que la utilización del segundo dns no será instantánea.

Esto se puede solventar utilizando la directiva options y el parámetro timeout:

nameserver 192.168.1.10

nameserver 192.168.1.11

options timeout:1

Aquí lo que estamos indicando es que el tiempo de espera, sea de 1 segundo.

Si queremos distribuir la carga entre los dos servidores lo haremos de la siguiente manera:

nameserver 192.168.1.10

nameserver 192.168.1.11

options timeout:1 rotate attempts:1

Así, la carga se distribuirá entre los dos servidores evitando saturar siempre el primero.

Vía | rm-rf.es

Anuncios

Bash script que busca hosts en tu red, sincroniza carpetas y después apaga los hosts.

En clase nos pidieron hacer un script que buscase hosts en tu red para después apagarlos, o que incluso antes de apagarse sincronizasen unas carpetas.

He tratado de automatizarlo todo lo que he podido, en mi red funciona perfectamente, y el único requerimiento previo es que todos los hosts tengan instalado un servidor SSH. Este script esta pensado para hosts Linux, pero con algunos pequeños cambios se podría adaptar para Windows también.

El código es el siguiente:

#!/bin/bash

# Find online hosts on your network, backup a directory and halt them

# Copyright (C) <2011> <Adrian Espinosa>

#

# This program is free software: you can redistribute it and/or modify

# it under the terms of the GNU General Public License as published by

# the Free Software Foundation, either version 3 of the License, or

# (at your option) any later version.

#

# This program is distributed in the hope that it will be useful,

# but WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

# GNU General Public License for more details.

#

# You should have received a copy of the GNU General Public License

# along with this program. If not, see <http://www.gnu.org/licenses/&gt;.

# If you don’t want to write every password, you should add the hosts keys to your machine.

clear

f=`echo networkscanned_$(date +%Y%m%d)`

me=`echo $(whoami)`

DIR=”put_here_your_dir_to_sync”

DEST=”put_here_your_destination”

if [ $UID -ne 0 ]

then

echo “Sorry, you have to run this script as root”

else

net=`ip route show | grep / | cut -d ” ” -f1`

echo “Please, wait while your network is scanned”

completescan=`nmap -sP $net | grep “is up” | cut -d ” ” -f2`

clear

echo “$completescan” > $f

gateway=`ip route show | grep via | cut -d ” ” -f3`

cat $f | egrep -v `echo $gateway$` > /tmp/net

cat /tmp/net > $f

rm -rf /tmp/net

ownip=`ip route show | grep src | cut -d ” ” -f12`

cat $f | grep -v $ownip > /tmp/net

cat /tmp/net > $f

rm -rf /tmp/net

echo “Starting synchronization”

for host in $(cat $f)

do

echo “Syncing with $host”

rsync –progress -avhe ssh $me@$host:$DIR $DEST &> backup.log

ssh $me@$host “shutdown -h now” &> backup.log

done

echo “Done. You may check backup.log to see if there are any errors”

rm -rf $f

exit 0

fi # END

Hay que ser root para ejecutarlo y básicamente lo que hace es lo siguiente

  • Si NO eres root
    • Sale del programa
  • Si eres root
    • Detecta tu red y máscara
    • Escanea con nmap y recoge sólo la IP de los hosts y la guarda en fichero
    • Detecta cuál es tu ip y tu gateway y los elimina del fichero anterior
    • Recorre el fichero leyendo cada hosts y haciendo las correspondientes operaciones

.

Este script lo he probado en Debian, y como digo funciona correctamente. En ubuntu hay que hacer unos pequeños cambios que podéis encontrar en mi github, también está publicado este script.

Obteniendo información desde /proc con procinfo.

En  /proc podemos encontrar toda una fuente de información sobre nuestro sistema, y para facilitarnos la tarea, tenemos el comando procinfo, su instalación es muy sencilla:

# apt-get install procinfo

Luego lo ejecutamos con

# procinfo

Y nos mostrará la información del sistema.

Memory: Muestra el total de ram libre y ocupada. También muestra el swap

Bootup: Hora de inicio del sistema.

Load average: Media de ‘jobs’ corriendo, seguido por el número de procesos ejecutables y el número total de procesos, seguido por el PID de el último proceso ejecutado.

User: Cantidad de tiempo empleada en correr ‘jobs’ en el espacio del usuario

Nice: Cantidad de tiempo empleada en ejecutar ‘niced jobs’ en el espacio del usuario

System: Cantidad de tiempo empleada ejecutada en el espacio del kernel

Idle: Cantidad de tiempo sin hacer nada

Uptime: Tiempo que ha estado el sistema activo

Page in: Número de bloques del disco paginados en el núcleo del disco.

Page out: Número de bloques del disco paginados fuera del disco.

Swap in: Número de páginas de memoria paginadas a el swap

Swap out: Número de páginas de memoria paginadas fuera del swap

Interrupts: Número de interrupciones servidas desde que se inició el sistema.

La información completa la puedes encontrar en el respectivo manual del comando.

Sistemas de archivos en Linux

Los sistemas de archivos de GNU/Linux se organizan de forma jerárquica, empezando desde el raíz (/)hacia abajo por una estructura de directorios y subdirectorios.

Los sistemas de archivos no se organizan de igual forma en Linux que en Windows. En éste último se utilizan letras de unidad para cada “partición” en un disco local, en un sistema de archivos de red, cd-rom u otro medio de almacenamiento. En Linux se “encajan” dentro del sistema de archivos (son directorios) através de los “puntos de montaje”.

Para acceder a las particiones actualmente configuradas en nuestro sistema (discos duros exclusivamente) utilizamos el comando fdisk -l.Para saber que particiones se están utilizando en este momento en nuestro sistema utilizamos el comando mount . Este comando nos mostrará tanto las particiones disponibles “montadas” como el lugar donde están montadas (punto de montaje).

Punto de montaje: este término se refiere al directorio que se asocia con una partición de disco o concualquier otro dispositivo de almacenamiento secundario.

 

GNU/Linux trata todos los dispositivos como archivos y tiene archivos reales que representan cada dispositivo. En Linux estos “archivos de dispositivo” se localizan en el directorio /dev. En este directorio podemos encontrar los siguientes “archivos de dispositivo”:

/dev/hda Primera unidad IDE.

/dev/hdb Segunda unidad IDE.

/dev/sda Primera unidad SCSI (también utilizada para pendrive)

/dev/sdb Segunda unidad SCSI

/dev/fd0 Disquetera

/dev/cdrom Unidad de CD-ROM

Las “particiones” se nombran igual que el dispositivo pero seguidas del número de partición. Así si tuvieramos 3 particiones el el segundo disco IDE estas se nombrarían:

/dev/hdb1

/dev/hdb2

/dev/hdb3

 

Un sistema de archivos es una forma de escribir los datos en el disco físico.Los ficheros, en casi todos los sistemas de archivos Linux, son sensibles a mayúsculas, es decir, fichero.txt no es Fichero.txt.

En Linux, cuando el sistema operativo entra a operar en modo kernel para resolver un acceso a discotrabaja con una capa intermedia de abstracción de sistema de ficheros que se denomina VFS (Virtual FileSystem). Cada sistema de archivos conoce cómo convertir una orden para VFS en algo que sea implementable en él. Esto permite a Linux trabajar con una cantidad realmente alta de sistemas de ficheros distintos de forma consistente y homogénea.

fichero /etc/fstab

Nos permite definir las particiones que se “montan” en el inicio de sistema, o las que son posible su montaje por parte de usuarios que no sean root. Cualquier dispositivo que no se encuentre en este fichero sólo podrá ser montado por el usuario root. Es un fichero con formato texto (podemos modificarlo con el editor vi) y la siguiente estructura:

1ª columna: Nombre del dispositivo o partición a montar.

2ª columna: punto de montaje.

3ª columna: sistema de archivos

.4ª columna: opciones de montaje

:rw: lectura y escritura

ro: sólo lectura

sw: partición swap

noexec: impide la ejecución

auto: se montará al inicio del sistema

noauto: no se montará en el inicio del sistema

user: permitirá a un usuario normal montar o desmontar el dispositivo en el punto de montaje indicado en la columna 2.

uid o gid: el usuario o grupo que tendrán control sobre los archivos.

5ª columna: por defecto a 0, tiene relación con los errores producidos en el arranque del montaje.

6ª columna: el número de este campo indica si el sistema de archivos necesita ser comprobado.

 

 

Script para obtener la dirección ip de uno o varios websites.

Si por algún casual como pasó con Wikileaks, a nuestros websites favoritos les quitan el dominio, sólo podremos acceder mediante ip.

He escrito un sencillo script para obtener la ip de nuestros websites favoritos:

Tiene tres modos

1 – Obtener dirección ip de un sólo dominio

2 – Importar un archivo de texto con varios dominios

3 – Importar un archivo OPML de Google Reader.

Aquí os dejo el enlace para descargar el script: Descargar script

Para ejecutarlo:

chmod +x getip.sh

./getip.sh

Estadísticas del consumo de datos de una interfaz de red.

Debo admitir que soy un gran fan de las estadísticas, así que me gusta también tener controlado el tráfico web de mis descargas.

En Windows utilizo Jc Net Meter, y en linux vnstat

Para instalar vnstat hacemos lo siguiente:

# apt-get install vnstat

Y una vez tengamos datos suficientes, bastará con escribir ‘vnstat’ en la terminal para que nos muestre la cantidad de GB descargados y que nos haga una estimación.

Túnel para el tráfico web. Proxy socks

A través de un compañero de clase, descubrí esta forma de tunelizar nuestro tráfico web de una red insegura. Este túnel encripta cualquier dato, por lo que estaría fuera del alcance de cualquier sniffer también.

Necesitaremos dos máquinas: Una será el servidor SSH que hará el forwarding de puertos, y otro será la máquina que creará el túnel hacia el servidor

En el servidor debe estar instalado openssh.

# apt-get install openssh

En el servidor, editamos el archivo /etc/ssh/sshd_config y al final añadimos las siguientes líneas:

AllowTcpForwarding yes

GatewayPorts yes

Y guardamos el archivo.

Ahora tenemos activado el forwarding de puertos en el servidor.

Ahora en la máquina que creará el túnel y en la cuál queremos que el tráfico sea seguro, hacemos lo siguiente

 

ssh -N -p PORT user@sshserver -D 2080 -v

 

 

Donde:
  • – N -> Impide que se ejecuten comandos
  • -p -> Indica el puerto SSH a usar en caso que no sea el 22
  • -D -> Indica un puerto dinámico. He puesto 2080 sin ningún motivo en especial
  • -v -> Verbose mode.
Y ahora en Mozilla Firefox, establecemos el proxy socks v5 a “localhost” y el puerto “2080”
Y con eso tendríamos nuestro tráfico web protegido.

 

 

Optimizar el uso de la RAM y del Swap en Linux.

La mayoría de los sistemas operativos modernos poseen un mecanismo llamado memoria virtual, que permite hacer creer a los programas que tienen más memoria que la disponible realmente; por ejemplo, 4 Gb en un ordenador de 32 bits. Como en realidad no se tiene físicamente toda esa memoria, algunos procesos no podrán ser ubicados en la memoria RAM.
En este caso es cuando es útil el espacio de intercambio: el sistema operativo puede buscar un proceso poco activo, y moverlo al área de intercambio (el disco duro) y de esa forma liberar la memoria principal para cargar otros procesos. Mientras no haga falta, el proceso extraído de memoria puede quedarse en el disco, ya que ahí no gasta memoria física. Cuando sea necesario, el sistema vuelve a hacer un intercambio, pasándolo del disco a memoria RAM. Es un proceso lento (comparado con usar sólo la memoria RAM), pero permite dar la impresión de que hay más memoria disponible.

En Linux, existe un parámetro llamado ‘swappiness‘ cuyo valor estará situado entre 0 y 100. El valor 0 dará mucha más prioridad a la ram que al swap, y si el valor es 100 al revés.

Para poder ver el swappiness que tenemos en nuestro sistema, hacemos lo siguiente:

$ cat /proc/sys/vm/swappiness

60

El valor por defecto es 60.

Para cambiarlo tenemos que hacer lo siguiente:

# sysctl vm.swappiness=45

En el caso de que queramos un valor de 45.

Este cambio no es persistente, y al reiniciar perderemos el cambio. Para que el cambio se quede guardado hacemos lo siguiente:

# vim /etc/sysctl.conf

Buscamos la línea y cambiamos el valor (si no está la añadimos)

vm.swappiness=45

Guardamos y listo, ya tenemos cambiado el valor de nuestro swappiness.

 

Encontrar el proceso que consume más ram en Linux

Hay varias formas de hacerlo, la primera sería utilizando awk y sort

ps aux | awk '{print $2, $4, $11}' | sort -k2r | head -n 20

 

Esto nos mostraría algo así:

 

Otra forma sería utilizar el comando ‘top‘ y pulsar la tecla ‘>’, así directamente nos lo ordenará por consumo de RAM.

 

Y la última forma es utilizar el comando ‘htop‘ y de la misma forma pulsar la tecla ‘>’, pero aquí nos preguntará que es lo que queremos ordenar:

 

 

 

Via: Go2Linux

Utilizar las fonts de Ubuntu en Debian.

Las fonts que utiliza Ubuntu son bastante bonitas en mi opinión, instalarlas en Debian es bastante sencillo:

Nos descargamos las fonts de aquí: http://dl.dropbox.com/u/1301915/ubuntu-font-family.tar.gz

Ahora extraemos:

tar -xvzf ubuntu-font-family.tar.gz -C /usr/share/fonts/truetype

Ahora tenemos que ir a Sistema -> Preferencias -> Apariencia.

Y en tipografía ponemos esta configuración:

No se ve, pero antes del paso siguiente, debemos tener marcada la opción Suavizado subpixel (LCDs)

En el siguiente paso, hacemos click en detalles y ponemos la siguiente configuración:

Y eso es todo, ahora debería parecerse bastante al estilo de fonts que tiene Ubuntu.