Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas

martes, 1 de marzo de 2016

Como Configurar Linux Bridge

 
Introducción

En este artículo explico cómo crear un bridge (puente por software, con el objetivo principal de usarlo para una máquina virtual en vez del uso clásico de un bridge. En la práctica la idea es crear un interfaz de red virtual y/o poder conectar a nuestro ordenador con más de una dirección IP y una única tarjeta de red.

Uso tradicional de un bridge

La función tradicional de un bridge es unir dos redes (la diferencia con un router es que éste interconecta dos redes y regula el paso de información entre ellas, un bridge, por contra, simplemente une las dos redes como si fueran una sola).

Para conseguir esta función lo único que se necesita es copiar los datos que pasen por cada tarjeta de red que forme parte del bridge al resto de tarjetas.

Existen dispositivos de hardware para cumplir esa función pero también se puede hacer con un ordenador y el software adecuado. En Linux ese software son las bridge-utils.
Otros usos: dispositivos virtuales

Ya he dicho que en Linux podemos crear un bridge y por lo explicado hasta ahora necesitaremos al menos dos tarjetas de red conectadas a redes diferentes para que cumpla su función, pero también hay una opción alternativa que sólo requiere de una tarjeta de red: crear dispositivos de red virtuales y añadirlos al bridge.

Estos dispositivos en realidad se comunicarán con la red por la única tarjeta física existente pero permitirán, por un lado, acceder al ordenador mediante varias IPs, cada una correspondiendo a uno de los dispositivos virtuales, y por otro asignar tareas específicas a cada uno de esos dispositivos.

Por poner un ejemplo simple, podríamos correr un servidor de correo en una IP y un servidor web en otra, correspondiendo ambas en realidad al mismo equipo, y pudiendo correr dentro un emulador para estar totalmente aislados (o para usar un sistema operativo diferente para cada servidor).

Kernel

La mayoría de distribuciones actuales deberían estar preparadas a nivel de kernel para lo que necesitamos, pero para máxima seguidad mejor comprobarlo.

Necesitamos tener compilado el los módulo bridge. Busquémoslo en la configuración del kernel:

$ egrep '^CONFIG_BRIDGE=.$' /boot/config-`uname -r`
CONFIG_BRIDGE=m

Si la salida es CONFIG_BRIDGE=m o CONFIG_BRIDGE=y tenemos el módulo bridge disponible.

No está de mas comprobar que el módulo carga (si el resultado era =yno hace falta), se puede comprobar con:

# modprobe -vvv bridge
# modprobe -vvv tun

Paquetes necesarios

Necesitamos el paquete de utilidades del bridge, en debian bridge-utils.

Para otras distribuciones busca el paquete que provea el ejecutable brctl, normalmente en /usr/sbin.

Instalación en debian: # apt-get install bridge-utils.

Configuración del dispositvo de bridge

Nota: Ésta parte es bastante más específica de Debian y derivadas, las redes se configuran de manera diferente en algunas distribuciones.

En condiciones normales estarás usando un dispositivo de red llamado algo así como eth1, wlan0 o similar, lo que vamos a hacer es crear un nuevo dispositivo de bridge, br0 y hacer que el viejo dispositivo forme parte de éste.

Identificación del dispositivo actual

Echemos un vistazo al archivo /etc/network/interfaces, que describe las tarjetas de red del sistema, en mi caso:
$ cat /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

En este caso eth0 es el interfaz que corresponde a mi tarjeta de red. Da igual si está configurado por DHCP (iface eth0 inet dhcp) o si tiene una IP fija asignada (iface eth0 inet static).

Creación manual

Ahora crearemos un bridge temporal, que desaparecerá al reiniciar el sistema.

# brctl addbr br1
Esto crea el bridge br1, sin configurar, podemos comprobar sus detalles:
$ /sbin/ifconfig br1

br1       Link encap:Ethernet  HWaddr 00:00:00:00:00:00 
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

# ifconfig eth0 down
# brctl addif br1 eth0

Esto, primero desactiva eth0 y luego añade eth0 como un puerto de br1, ahora br1 ha adquirido características de eth0, en concreto su dirección MAC, es decir, el bridge aparenta ser el interfaz real:

$ /sbin/ifconfig br1

br1       Link encap:Ethernet  HWaddr 02:16:F7:7B:7F:C7
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

# ifconfig eth0 0.0.0.0 up
# ifconfig br1 192.168.1.12 up
# route add -net default gw 192.168.1.1 dev br1

Por último activamos eth0 sin IP, activamos el bridge dándole una IP (podríamos asignársela por DHCP pero ya que solo estamos de prubas no hace falta), y añadimos la puerta de enlace predeterminada, en este caso 192.168.1.1

Cabe decir que el bridge tarda un tiempo (unos 30 segundos por ahora) en empezar a funcionar, antes de ese tiempo parecerá que no podemos conectar. Pasada ese espacio de tiempo hacemos la prueba:

$ ping 64.233.167.99

ping 64.233.167.99
PING 64.233.167.99 (64.233.167.99) 56(84) bytes of data.
64 bytes from 64.233.167.99: icmp_seq=1 ttl=242 time=160 ms
64 bytes from 64.233.167.99: icmp_seq=2 ttl=242 time=157 ms
64 bytes from 64.233.167.99: icmp_seq=3 ttl=242 time=217 ms

--- 64.233.167.99 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 157.607/178.632/217.364/27.425 ms

Funciona :)

Ahora podemos volver a la normalidad, primero desactivando el bridge:

# ifconfig eth0 down
# ifconfig br1 down
# brctl delif br1 eth0
# brctl delbr br1

Y luego reactivamos la red con la configuración anterior: # /etc/init.d/networking restart.

Si por casualidad no funcionase un reinicio debería ser suficiente :P

Configuración persistente

Ahora pasaremos a editar la configuración de red para crear el bridge en el arranque, gracias al archivo que hemos visto antes (/etc/network/interfaces) todo el proceso anterior será automático :)

Éste es mi /etc/network/interfaces después de hacer los cambios pertinentes:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# auto eth0
iface eth0 inet dhcp

# Bridge
auto br0
iface br0 inet dhcp
    bridge_ports    eth0
    bridge_fd    9
    bridge_hello    2
    bridge_maxage    12
    bridge_stp    off

He mantenido eth0 de manera que si br0 no funcionase bastaría con cambiar de interfaz activo (# ifdown br0 seguido de # ifup eth0).

Aquí estamos declarando a eth0 como el puerto físico (tarjeta de red) (bridge_ports eth0), el resto de opciones son las opciones recomendables en la mayoría de situaciones.
Leer más...

domingo, 7 de febrero de 2016

Como particionar Discos en Windows y Linux


En muchas ocasiones, nos vemos en la necesidad de particionar nuestro disco duro tanto en Sistemas Windows como en Sistemas Linux. Por eso os voy a enseñar en este post dos herramientas en cada sistema para particionar nuestro disco duro.

Empezamos con el particionado de un disco duro en Linux. Para ello vamos a utilizar dos herramientas: el comando fdisk y el comando gparted. Ambos comandos nos sirven para particionar nuestros discos y tanto uno como otro son muy buenos. La única manera es que fdisk se utiliza por línea de comandos y gparted es gráfico.

Después de aclarar cuales serán nuestras herramientas para particionar, pasamos a la práctica. En mi caso la situación para particionar mi disco es de la siguiente manera:
  • Disco Virtual (por VirutalBox) de 1GB.
  • Vamos a crear una partición para instalar WXP. Debe ocupar el 25% del total aproximádamente. Debe ser primaria, y activa. Debes formatearla.
  • El resto del espacio lo vamos a crear como partición extendida.
  • Dentro de esa partición extendida vamos a crear dos particiones lógicas. Una con sistema de ficheros EXT3 para Linux con una capacidad del 25 % de la extendida. (Formatearla y montarla en el directorio /mnt) Otra para la memoria SWAP con una capacidad del doble de la memoria RAM.
  • Del espacio restante dentro de la extendida vamos a usar el 25% para una partición para Datos que pueda ser visualizada y escrita desde Windows como desde Linux, también debe estar formateada y montarla en el directorio "compartido" de tu home.

Utilizando Fdisk:

Primero abrimos una terminal y nos metemos como superusuario y luego hacemos un fdisk -l para ver todos los discos de nuestro ordenador:

Luego introducimos el comando fdisk +el nombre del dispositivo, en mi caso fdisk /dev/sdb. Entraremos en el menú de fdisk, introduciremos la orden n para crear una nueva partición. Definiremos que es una partición primaria, introduciendo el valor p. Luego nos pedirá el primer sector, nosotros pondremos el default y luego nos pedirá el último, nosotros pondremos +256M que es el 25% de un 1GB.

Una vez creada está primera partición, vamos a darle formato y montarla. Para ello vamos a hacer lo siguiente: 

Para darle formato vamos a introducir el siguiente comando mkfs -t ntfs -L "WXP" /dev/sdb1 -> Con este comando estamos dándole un formato ntfs con un Label que es WXP. De esta manera ya tenemos nuestra partición con formato.

Luego para montarla utilizaremos el comando mount /dev/sdb1 /mnt/WXP -> Con este comando estamos montado nuestro disco en el directorio /mnt/WXP. También podríamos añadir información al fichero /etc/fstab para que cuando arrancará nuestra máquina, utilizando previamente el comando mount -a, se montará automáticamente este disco en el directorio que hemos especificado.


Ya tenemos la primera parte hecha, ahora tenemos que hacer la partición extendida para ello, vamos a volver a teclear fdisk /dev/sdb en la terminal, en el menú de fdisk, tecleamos la orden n para crear una partición, esta vez introducimos el valor e para crear una partición extendida y todo lo demás será default para coger el resto del disco. Una vez estamos seguros de la partición introducimos w para guardar y salir.

Luego dentro de la partición extendida, vamos a crear dos particiones lógicas, para ello introducimos el comando fdisk /dev/sdb, en el menú de fdisk tecleamos la orden n y luego el valor l para crear una partición lógica en la extendida de tamaño 192M y una vez creada introducimos w para guardar y salir.

Después tenemos que darle un sistema de archivos a nuestra partición lógica para ello haremos un mkfs -t ext3 -L "Log1" /dev/sdb4. De esta manera le daremos formato y ya solo quedaría montarla, en mi caso montaré esta partición en /mnt/log1 para ello introduciremos el comando mount /dev/sdb4 /mnt/log1 o podremos introducir una línea en fstab con la información del montaje.

Luego vamos a crear una partición lógica para SWAP, para ello hacemos lo mismo que con la partición lógica anterior, la única diferencia es que cuando tengamos nuestra partición creada, introduciremos la orden t para darle un código de tipo nº83 para que la partición sea de SWAP.

Una vez creada la partición, introduciremos el comando mkswap -L "SWAP" /dev/sdb5 para poder darle el formato para SWAP y luego introduciremos unas líneas en el fichero /etc/fstab para poder luego introducir el comando swapon -a y se monté la SWAP automáticamente.


Finalmente vamos a crear una partición dentro de la partición extendida para compartir Datos entre distintos sistemas. Para ello creamos la partición con fdisk con las ordenes y valores de las dos anteriores, con la diferencia de que después de que la tengamos creada, le daremos un formato ntfs con el siguiente comando mkfs -t ntfs -L "Datos" /dev/sdb6 (Para poder darle este formato necesitamos instalar el paquete ntfs-3g).

Cuando ya tengamos la partición creada y con formato, solo falta montarla para ello utilizamos el comando mount /dev/sdb6 /home/compartida para que esta partición del disco pueda ser utilizada tanto en Linux como en Windows.


Utilizando Gparted:


Como he dicho previamente Gparted es una herramienta visual, no voy a detallar paso a paso como se hace cada partición ya que es tan sencillo como darle a partición nuevo y detallar la información de la partición. En mi caso, estoy creando 5 particiones: una partición primaria, una extendida y dentro de la extendida estoy creando 3 lógicas con el mismo formato que en el ejemplo anterior utilizando fdisk.

Cuando ya tenemos las particiones creadas, tenemos que hacer un mkfs -t (formato) (partición) y para la swap un mkswap (dispositivo), los mismos comandos que la práctica anterior. Luego las tenemos que montar, si hemos seguido el ejemplo anterior, tendremos la información en el fichero /etc/fstab por lo que con un mount -a montaremos las particiones y con un swapon -a montaremos la swap automáticamente.

Con estas dos herramientas ya tenemos nuestros discos duros en Linux particionados, activas y en uso. Ahora vamos a ver como particionar un disco duro en Windows, con la herramientas diskpart y el administrador de disco.
El enunciado para particionar mi disco duro en Windows es el siguiente:

  • Crea una única partición con todo el espacio del disco duro para instalar WXP. Tendrá como etiqueta WXP. Debe tener un sistema de ficheros NTFS. Debe ser primaria y estar activa. Asignale la letra Z.
  • Un amigo nuestro nos ha aconsejado que tengamos una partición para datos. Redimensiona la partición anterior aproximadamente a la mitad del espacio que ocupa
  • ¿Qué operación es aconsejable realizar antes de hacer el redimensionamiento?
  • Del espacio que queda libre, vamos asignar el 50% a una partición para Datos que tendrá un sistema de ficheros FAT32 será también primaria, tendrá como etiqueta datos y se colocará al final del espacio disponible. Debes asignarle la letra D.
  • El espacio que tenemos libre lo vamos a utilizar para instalar un segundo sistema operativo. En este caso Win7. Debes crear una partición primaria, el sistema de ficheros será NTFS y debe ser la nueva partición activa y debe tener la letra F.

Utilizando diskpart:

Lo primero que hacemos es abrir una cmd y introducir diskpart para meternos en su menú. Luego tecleamos el comando list disk para listar todos los discos. Señalamos el disco que vamos a usar y particionar para ello introducimos select +nombredeldisco. Una vez hayamos introducido todos estos comandos, tecleamos el comando create partition primary  Label="WXP" luego introducimos list partition para asegurarnos de que nuesstra partición ha sido creada.

Teniendo nuestra partición creada, nos falta darle formato y asignarle una letra. Para ello introducimos el comando format fs=ntfs quick para formatear la partición y de manera rápida. Luego queda asignarle una letra por lo que introducimos el comando assign letter=Z. Finalmente introducimos list vol, y veremos que nuestra partición esta lista.


Ahora mismo tenemos una partición pero nos haría falta una partición para datos para ellos haremos un redimensión de nuestra partición a la mitad pero antes haremos una copia de seguridad de nuestra partición para ello podemos utilizar el comando robocopy +letra de nuestra partición.

Luego para redimensionar la partición utilizamos el comando shrink desired=512, en mi caso quiero ponerle la mitad.


Teniendo esta partición ya redimensionada. vamos a crear una partición para datos. Para ello utilizamos el comando create partition primary size=256 offset=767. Una vez creada teclamos el comando format fs=fat32 label="datos" quick para darle formato y después el comando assign letter=D para asignarle una letra y "montarla".

Después creamos la partición que nos queda haciendo un create partition. Luego un format fs=ntfs label="win7" y por último le asignamos la letra con assign letter=F

Con esto ya tenemos nuestras particiones con diskpart en nuestro Windows hechas. Ahora os voy a enseñar como hacerlo con el administrador de discos:


En esa imagen podéis ver claramente como se harían las particiones de mi disco duro según mi enunciado. Lo único que tenéis que hacer es darle a nueva partición, que todas sean primarias, formatearlas con el formato deseado y luego en propiedades podéis darle la etiqueta (nombre) que queremos y finalmente lo que tendríamos que hacer es asignarle una letra para montarla.

Conclusión:

Como podéis ver es bastante sencillo crear particiones en Windows y Linux utilizando la herramientas visuales "Administrador de Discos" y "Gparted", y para aquellos que le guste esa cosa rara y espartana que es la terminal o la consola podéis utilizar las ordenes y comandos de diskpart y fdisk.

Bueno eso ha sido todo, cualquier cosa me lo podéis dejar en los comentarios, nos vemos el próximo post. Chau ;D
Leer más...

lunes, 1 de febrero de 2016

Como usar el Comando Rsync en Linux Debian 8


Estos días hemos estado aprendiendo algunos comandos para hacer copias de seguridad de sistemas de archivos y ficheros de datos, esos comandos son el comando Dump y Restore. Hoy veremos un comando que nos ayuda con el tema de hacer copias de seguridad además es más novedoso que los comandos anteriores y se suele utilizar más para hacer transferencia de datos entre equipos remotos utilizando un canal SSH.

Pero antes de poner todo esto en practica, vamos a conocer un poco más este comando y como instalarlo en nuestro sistema.

¿Qué es Rsync?

Es un binario de código abierto de transferencia de archivos y directorios entre una ubicación y otra. La ventaja de este comando es que permite que la transferencia se mande mediante un canal SSH y que transfiere los archivos o trozos de archivos que han sido modificados en lugar de transferir el archivo completo, es decir que es muy parecido a Dump, pero como ya he dicho se suele utilizar más este comando para la transferencia mediante un canal SSH.

Usos de Rsync:
  • Respaldos automáticos a discos o servidores remotos.
  • Sincronización de archivos y directorios remotos. 
  • Transferencia de archivos comunes.

¿Cómo instalar el comando?

Antes de instalar el comando, es probable que nuestro sistema ya venga con esta herramienta instalada, así que probaremos verificar si el comando ya está instalado o no, para ello utilizamos los siguientes comandos rsync --version o which rsync:


Si vemos que no lo tenemos instalado, hacemos un apt-get update, luego un apt-get upgrade y finalmente un apt-get install rsync.

Transferencia de datos dentro del mismo equipo:

Para demostrar lo básico de este comando, vamos a transferir el contenido de un directorio a otro dentro del mismo equipo.

1.Creamos algunos directorios y en uno de ellos metemos contenido:

$ mkdir origen
$ mkdir destino
$ cd origen
~/origen$ touch prueba{1..9}
~/origen$ ls
prueba1  prueba2  prueba3  prueba4  prueba5  prueba6  prueba7  prueba8  prueba9


2.Luego haremos que rsync pase todo el contenido del directorio origen al directorio destino:

~/origen$ cd
~$ rsync -a origen/ destino


La opción -a lo que hace es copiar recursivamente el contenido del directorio origen al directorio destino.

3.Verificamos que verdaderamente se haya pasado al directorio destino:

 ~$ cd destino/
~/destino$ ls
prueba1  prueba2  prueba3  prueba4  prueba5  prueba6  prueba7  prueba8  prueba9


Esto mismo también lo podríamos haber hecho con el comando cp, por eso voy a enseñaros una ventaja de utilizar rsync:

Para ello agregamos al directorio destino un fichero prueba10 y hacemos lo siguiente:

~/destino$ touch prueba10
~/destino$ cd
~$ rsync -anv destino/ origen
sending incremental file list
./
prueba10

sent 220 bytes  received 22 bytes  484.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

La opción -v permite una ver una salida del proceso de transferencia.

La opción -n lo que hace es simular que el archivo prueba10 se haya pasado al directorio origen, de esta manera sabremos si verdaderamente se ha pasado el contenido que ha sido modificado.

* Si no utilizamos la opción -n el archivo prueba10, se pasaría al directorio origen.

Transferencia de datos entre equipos remotos:

Lo primero que haremos será crear una llave SSH a nuestro equipo origen con el comando ssh-keygen -t rsa.

Luego copiaremos nuestra llave SSH en el equipo destino con el comando ssh-copy-id diegokobein@172.22.204.172. En mi caso estoy copiando la llave SSH en una instancia en el cloud que tiene una ip 172.22.204.172 y con el usuario diegokobein.

Cuando vayamos a copiar la llave, nos pedirá la clave de nuestro usuario del equipo destino, una vez hayamos introducido la clave no nos lo volverá a pedir de nuevo.

Ahora vamos con la transferencia remota para ello utilizaremos el siguiente comando: rsync -azP origen/ diegokobein@172.22.204.172:/home/diegokobein/destino

Lo que hacemos con este comando es hace una copia de el directorio origen de nuestra maquina origen al directorio destino de la maquina remota.

La opción -z lo que indica es que los archivos serán comprimidos antes de ser transferidos a la maquina remota y además la transferencia se hará más rápida.

La opción -P nos da la posibilidad de mostrar el progreso y además si hay algún archivo que se haya transferido incorrectamente se volverá a reanudar la copia de ese archivo.

Comprobamos que se haya pasado correctamente en nuestra maquina remota:

~$ ssh diegokobein@172.22.204.172

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jan 29 10:10:25 2016 from 172.22.8.146
diegokobein@oracle:~$ ls /home/diegokobein/destino
prueba1  prueba2  prueba3  prueba4  prueba5  prueba6  prueba7  prueba8  prueba9

Vemos que efectivamente se ha completado la sincronización, como podemos ver este comando da mucho juego y podemos hacer muchísimas cosas con él, en mi opinión me gusta muchísimo más este comando que los que vimos en el post anterior empleando Dump o Restore.

Bueno eso ha sido todo, si tienes cualquier pregunta o sugerencia me lo puedes dejar por los comentarios.
Hasta el próximo post, chau ;D
Leer más...