Skip to main content

rsync

VM con NAT en Virtualbox

El modo RED NAT en VirtualBox es muy interesante porque nos permite acceder a Internet desde cada máquina virtual y además nos permite tener una red interna entre ellas. Con direcciones IP por defecto de la red 10.0.2.0/24 y dadas automáticamente por el propio VirtualBox.

Redireccionamiento VirtualBox.png

Hemos añadido dos máquinas con NAT, para poder iniciar una comunicación con el equipo anfitrión por SSH debemos especificar un puerto: Vamos a la configuración de nuestra tarjeta de red -> opciones avanzadas -> y pulsar el botón de reenvió de puertos.

Una vez en la ventana correspondiente creamos los redireccionamientos:

Nombre VM TCP / UDP Ip anfitrión Puerto Ip invitado puerto
HostB TCP 127.0.0.1 2222 10.0.2.15 22
HostA TCP 127.0.0.1 2223 10.0.2.15 22

Una vez creados comprobamos que los puertos están a la escucha y conectamos con las dos máquinas por ssh:

nc -nap | grep 2222
ssh -p 2222 usuario@127.0.0.1
ssh -p 2223 usuario@127.0.0.1

Servidor Rsync

En la máquina A vamos a instalar el servicio Rsync.

*apt update && apt install rsync
*Crear fichero de configuración en: /etc/rsyncd.conf

Contenido del fichero rsyncd.conf

port = 1200 #No es necesario si no queremos cambiar el puerto por defecto 873 TCP
max_connections = 2 #Nº máximo de conexiones
timeout = 300 #Todas las operaciones en las que no haya ningún tipo de operación de I/O durante 300 segundos serán desconetadas
[casa] 
path = /home/usuario #Especifícamos el directorio donde permitos las conexiones. Interesante opción ya que podemos usar las variables de entorno de Linux con ella.
read_only = false
list = true

Reiniciamos el servicio

systemctl restart rsync

Opción host_allow

Nos permite establecer una patrones para las conexiones, ip, mac, nombre host, etc. Si la conexión no cumple algunos de las marcas establecidas esta es rechazada.

hosts_allow = 192.168.0.0/24

Formas de ejecucción rsync

Para saber que módulos comparte el servidor, siempre que tenga la opción list=true.

rsync rsync://ip_server:port

Para ver el contenido de un módulo compartido llamado "casa".

rsync rsync://ip_server:port/casa

Para descargar todo el contenido de casa en la carpeta /web/prueba

rsync -a rsync://ip_server:port/casa /web/prueba

Para descargar únicamente un fichero

rsync -vP rsync://ip_server:port/casa/fichero /web/prueba

Para subir la carpeta web ella includa

rsync -a /web rsync://ipserver:port/casa

Para subir solo el contenido de la carpeta web

rsync -a /web/ rsync://ipserver:port/casa



El parámetro -a equivale a un conjunto de otros parámetros más específicos:

  • -r Copia recursiva
  • -l Copia los enlaces como enlaces, no los ficheros reales a los que apuntan
  • -p Mantiene los permisos de los ficheros originales
  • -t Mantiene la fecha de la última modificación de los ficheros originales en los ficheros copia, si no se específica esta fecha será la fecha de copia.
  • -o i -g. Mantiene el propietario y el grupo del propietario, si no se específica el propietario y el grupo seran los usuarios que crean la copia.

Otros parámetros

  • -v Verbose mode.
  • -n Modo simulación.
  • -z Comprimos los ficheros durante la transferencia. Ahorra ancho de banda pero fuerza la CPU.
  • -P Combinación de dos parámetros.
    • --progress muestra una barra de progreso.
    • --partial Para poder continuar una transferencia interrumpida.
  • --bwlimit=no Establecer un ancho de banda.
  • --delete Si al copiar el contenido de origen se detecta que el destino hay algún elemento(fichero o directorio) que no esta presente en el origen, LO BORRA DE DESTINO.
    • -b Si no se quiere ser tan radical con --delete y borrar los ficheros que sobran en el destino, con la opción -b le decimos que estos ficheros que nos sobran no los borre, sino que los guarde en la carpeta que le indicamos.
  • --exclude="patron" No realiza la transferencia de los ficheros que coincidan con el patrón.
rsync --exclude="*.bak" o rsync --exclude="fichero_exclusiones.txt"

Seguridad

Podemos obligar a los usuarios a conectarse con usuario y contraseña, esta le añade un nivel extra de seguridad al servicio Rsync. Estos usuarios y contraseñas son propios de Rsync, para crealos los hemos de añadir al fichero /etc/rsync.secrets, el nombre del fichero no es obligatorio pero su contenido tiene que ser como este:

usuario1:pass1
usuario2:pass2
usuario3:pass3
El propietario de este fichero debe ser root y tener permisos 600 para que nadie pueda ver lo que contiene. Una vez creado vamos a la configuración de rsync /etc/rsyncd.conf y añadimos la siguiente línea:
secrets file = /etc/rsyncd.secrets
auth users=usuario1,usuario2

Para conectarnos desde el cliente con un usuario específico:

rsync rsync://usuario1@ipserver:port
rsync rsync://usuario2@ipsercer:port/modulo