1 de marzo de 2025

Docker: comandos básicos

Gestión de Imágenes:

  • docker pull <nombre_de_la_imagen>[:<etiqueta>]:
    • Descarga una imagen desde un registro (como Docker Hub).
    • Ejemplo: docker pull ubuntu:latest
  • docker images:
    • Lista todas las imágenes de Docker almacenadas localmente.
  • docker rmi <ID_de_la_imagen>:
    • Elimina una imagen de Docker.
    • Precaución: esta acción no se puede deshacer.

Gestión de Contenedores:

  • docker run [opciones] <nombre_de_la_imagen>[:<etiqueta>] [comando]:
    • Crea e inicia un contenedor a partir de una imagen.
    • Opciones clave:
      • docker run -d: Ejecuta el contenedor en modo "detached" (en segundo plano).
      • docker run -p <puerto_del_host>:<puerto_del_contenedor>: Asigna puertos entre el host y el contenedor.
      • docker run -v <ruta_del_host>:<ruta_del_contenedor>: Monta un volumen.
      • docker run --name <nombre_del_contenedor>: Asigna un nombre al contenedor.
    • Ejemplo: docker run -d -p 8080:80 nginx
  • docker ps:
    • Lista los contenedores en ejecución.
    • docker ps -a: lista todos los contenedores.
  • docker stop <ID_del_contenedor> o <nombre_del_contenedor>:
    • Detiene un contenedor en ejecución.
  • docker start <ID_del_contenedor> o <nombre_del_contenedor>:
    • Inicia un contenedor detenido.
  • docker restart <ID_del_contenedor> o <nombre_del_contenedor>:
    • reinicia un contenedor.
  • docker rm <ID_del_contenedor> o <nombre_del_contenedor>:
    • Elimina un contenedor detenido.
  • docker exec -it <ID_del_contenedor> o <nombre_del_contenedor> [comando]:
    • Ejecuta un comando dentro de un contenedor en ejecución.
    • -it proporciona una terminal interactiva.
    • Ejemplo: docker exec -it mi_contenedor bash
  • docker logs <ID_del_contenedor> o <nombre_del_contenedor>:
    • Muestra los registros de un contenedor.

Otros Comandos Útiles:

  • docker search <término>:
    • Busca imágenes en Docker Hub.
  • docker version:
    • Muestra la información de la versión de Docker.
  • docker info:
    • Muestra información general sobre la instalación de docker.

Conceptos Clave:

  • Imágenes: Plantillas de solo lectura utilizadas para crear contenedores.
  • Contenedores: Instancias en ejecución de imágenes.
  • Docker Hub: Un registro público de imágenes de Docker.

Con estos comandos básicos, podrás empezar a utilizar Docker de manera efectiva.

Instalar WireGuard con Docker en Raspberry Pi

  1.  Instalar Docker en tu máquina:

    • Si utilizas un sistema operativo basado en Linux, puedes utilizar el siguiente comando en la terminal:
    curl -sSL https://get.docker.com | sh
    
  2. Añadir tu usuario actual al grupo "docker":

    • Esto te permitirá detener e iniciar el contenedor Docker de WireGuard sin necesidad de utilizar el superusuario.
    sudo usermod -aG docker $USER
    
  3. Cerrar sesión y volver a iniciarla o reiniciar tu máquina:

    • Los cambios en los usuarios de Linux requieren que cierres sesión y vuelvas a iniciarla. Si utilizas SSH para conectarte a tu máquina, puedes cerrar sesión fácilmente con el siguiente comando:
    logout
    
    • Alternativamente, puedes reiniciar tu máquina ejecutando el siguiente comando:
    sudo reboot
    
  4. Preparar WireGuard:

    • Debes tener tu dispositivo accesible desde fuera de tu red. Esto significa que debes reenviar el puerto en una red doméstica y asegurarte de que tu dispositivo tenga una dirección IP estática. Para acceder a tu VPN de WireGuard desde fuera de tu red, debes abrir el puerto "51820". Si necesitas especificar el protocolo, utiliza "UDP".
  5. Crear un directorio para almacenar el archivo Compose:

    • También es la misma ubicación donde almacenaremos todos los archivos de configuración de Wireguard. Puedes crear un directorio en "/opt/stacks/wireguard" utilizando el comando mkdir.
    sudo mkdir -p /opt/stacks/wireguard
    
    • Al utilizar la opción "-p", nos aseguramos de que este comando cree toda la ruta, en lugar de simplemente intentar crear la ruta final.
  6. Cambiar al directorio:

    cd /opt/stacks/wireguard
    
  7. Generar un hash de contraseña:

    • Antes de configurar el archivo Compose para WireGuard, necesitaremos generar un hash rápido para la contraseña que pretendes utilizar. Afortunadamente, el contenedor Docker tiene un script fácil que podemos ejecutar. Dentro de la terminal, ejecuta el siguiente comando. Al escribir este comando, asegúrate de reemplazar "<PASSWORD>" con la contraseña que pretendes utilizar para acceder a la interfaz web de WG-Easy.
     docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw '<PASSWORD>'
    
    • Por ejemplo, para generar un hash para la contraseña "pimylifeup", ejecutaríamos el siguiente comando.
    docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw 'pimylifeup'
    
  8. Modificar el hash de la contraseña:

    • Antes de utilizar esta línea en el archivo Docker Compose, requiere algunas modificaciones.
    PASSWORD_HASH='$2b$12$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW'
    
    • Antes de escribir este valor de hash de contraseña, elimina las dos comillas simples (') y añade un signo de dólar ($) adicional después de cada signo de dólar. Por ejemplo, nuestra línea anterior se convertiría en la siguiente
    PASSWORD_HASH=$$2b$$12$$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW
    
  9. Escribir un archivo Docker Compose para Wireguard:

    • Ejecuta el siguiente comando para comenzar a escribir este archivo utilizando el editor de texto nano.
    sudo nano compose.yaml
    
    • Dentro de este archivo, querrás escribir las siguientes líneas.
    <PASSWORD_HASH> : Reemplaza este marcador de posición con el valor que obtuviste anteriormente en esta guía. La contraseña que se generó para este hash es la que utilizarás para iniciar sesión en la interfaz web de WG-Easy. Esta interfaz web es la que utilizarás para crear y gestionar clientes para tu VPN de WireGuard fácilmente.
    
    Esta línea terminará pareciéndose un poco a lo que hemos mostrado a continuación. El hash debería diferir ya que tu contraseña y "sal" serán diferentes.
    
    - PASSWORD_HASH=$$2b$$12$$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW
    
    <IPADDRESS> : A continuación, especifica la dirección IP o el nombre de dominio donde se puede acceder a tu VPN. La dirección IP debe ser tu dirección IP externa y no local. Además, si utilizas un nombre de dominio, querrás asegurarte de que esté apuntando a donde está alojada tu VPN de WireGuard.
    services:
      wg-easy:
        container_name: wg-easy
        image: ghcr.io/wg-easy/wg-easy
        environment:
          - <PASSWORD_HASH>
          - WG_HOST=<IPADDRESS>
        volumes:
          - ./config:/etc/wireguard
          - /lib/modules:/lib/modules
        ports:
          - "51820:51820/udp"
          - "51821:51821/tcp"
        restart: unless-stopped
        cap_add:
          - NET_ADMIN
          - SYS_MODULE
        sysctls:
          - net.ipv4.ip_forward=1
          - net.ipv4.conf.all.src_valid_mark=1
    
  10. Guardar y salir del archivo:

    • Después de escribir las líneas anteriores, puedes guardar y salir presionando CTRL + X, Y y, finalmente, la tecla ENTER.
  11. Iniciar el stack de Docker de Wireguard:

    • Con el archivo Compose escrito, iniciar WireGuard utilizando Docker es increíblemente sencillo. Para poner en marcha nuestra VPN, necesitamos utilizar el siguiente comando.
    docker compose up -d
    
    • Al utilizar la opción "-d", le estamos diciendo a Docker que se desconecte de la terminal una vez que haya iniciado nuestro contenedor WireGuard.
  12. Acceder a la interfaz web del contenedor Docker de Wireguard:

    • Antes de que puedas empezar a utilizar tu nueva VPN, necesitarás crear un nuevo cliente. Normalmente, esto puede ser un poco complicado, pero el contenedor que estamos utilizando viene con una interfaz web súper fácil de usar. Para acceder a esta interfaz web, necesitarás conocer la dirección IP local de tu dispositivo. Puedes obtener esta IP fácilmente utilizando el comando hostname.
    hostname -I
    
  13. Ir a la siguiente dirección para acceder a la interfaz web de WG-Easy:

    http://<IPADDRESS>:51821
    
  14. Utilizar WG-Easy para gestionar tu contenedor Docker de Wireguard:

    • Ahora deberías ver la siguiente pantalla pidiéndote que inicies sesión en la interfaz web de WG-Easy. Primero, debes escribir la contraseña que estableciste anteriormente en esta guía (1.). Después de escribir tu contraseña, simplemente haz clic en el botón "Sign In" (2.) para acceder a la interfaz web.
  15. Crear tu primer cliente:

    • Una vez que hayas iniciado sesión, puedes crear tu primer cliente para tu contenedor Docker de VPN de WireGuard. Para comenzar este proceso, haz clic en el botón "+ NEW" o "+ New Client".
  16. Nombrar tu nuevo cliente:

    • En esta pantalla, ahora querrás dar un nombre a tu nuevo cliente (1.). Nombra esto algo para que sepas dónde se está utilizando este cliente. Después de escribir un nombre, haz clic en el botón "Create" (2.).
  17. Descargar los detalles de tu cliente:

    • En este punto, finalmente tienes WireGuard en funcionamiento utilizando un contenedor Docker. Ahora puedes descargar los detalles de tu cliente y conectarte a tu VPN. La interfaz web de WG-Easy que estamos utilizando te permite generar un código QR (2.) para añadir fácilmente tu cliente. También puedes descargar los archivos de configuración si tu cliente no admite el escaneo de códigos QR (3.). Si quieres evitar que un cliente acceda a tu VPN de WireGuard, puedes hacer clic en el interruptor (1.).

Siguiendo estos pasos, deberías poder instalar y configurar WireGuard en tu Raspberry Pi utilizando Docker.

Ref:
https://pimylifeup.com/wireguard-docker/
https://gemini.google.com

23 de febrero de 2025

Protocol for Setting Up OpenVPN on Raspberry Pi Using PiVPN

This guide will walk you through installing and configuring OpenVPN on a Raspberry Pi using PiVPN.


1. Prerequisites

  • Raspberry Pi (Raspberry Pi 3, 4, or 5 recommended)
  • Raspberry Pi OS (Lite or Full version)
  • Internet connection
  • SSH access or direct terminal access
  • Static IP or Dynamic DNS (DDNS) for external access

2. Update and Upgrade System

Before installing OpenVPN, update the system:

sudo apt update && sudo apt upgrade -y

3. Install PiVPN

Run the PiVPN installation script:

curl -L https://install.pivpn.io | bash

This launches an interactive installer.


4. Configure OpenVPN

During installation, follow these steps:

  1. Select OpenVPN when prompted.

  2. Set Static IP Address
    • The installer will ask if you want to set a static IP.
    • Accept the default or manually configure one.

  3. Select UDP or TCP
    • UDP (default, recommended) for better performance.
    • TCP for firewall bypassing but slower speed.

  4. Choose Port (Default: 1194)
    • You can change it if needed.

  5. Choose Encryption Settings
    • Select RSA key size (default: 2048-bit or 4096-bit for stronger security).

  6. Select DNS Provider
    • Choose from OpenDNS, Google, Cloudflare, or a custom DNS.

  7. Confirm Installation
    • The script will install and configure OpenVPN.

5. Create a VPN User Profile

After installation, create a VPN user profile:

pivpn add

Follow the prompts to:

  • Enter a username.
  • Set a password (if required).

This will generate a .ovpn configuration file stored in /home/pi/configs/.


6. Configure Port Forwarding

To access the VPN from outside your network:

  1. Log in to your router’s admin panel.
  2. Locate Port Forwarding settings.
  3. Forward UDP Port 1194 to your Raspberry Pi’s local IP address.
  4. Save and restart your router.

7. Transfer the VPN Configuration File

To connect to your VPN, transfer the .ovpn file to your client device:

  • Use SCP, SFTP, or a USB drive to move the file.
  • Example command for SCP:
    scp pi@your_rpi_ip:/home/pi/configs/client.ovpn ~/Downloads/
    
  • Alternatively, use an SFTP client like WinSCP or FileZilla.

8. Connect to OpenVPN

  • PC (Windows/macOS/Linux):

    1. Install the OpenVPN client from openvpn.net.
    2. Import the .ovpn file.
    3. Click Connect.
  • Android/iOS:

    1. Install OpenVPN Connect from the App Store or Google Play.
    2. Import the .ovpn file.
    3. Connect to your VPN.

9. (Optional) Set Up Dynamic DNS (DDNS)

If your public IP changes frequently, use DDNS:

  • Sign up for a free No-IP or DuckDNS account.
  • Configure DDNS on your router or install a DDNS client on the Raspberry Pi.

Example (for No-IP):

sudo apt install ddclient
sudo nano /etc/ddclient.conf

Add your No-IP credentials and domain.


10. Test the VPN

  • Connect from an external network (e.g., mobile data).
  • Visit whatismyipaddress.com to check if your public IP matches your VPN server.

That's it! 🎉 Your OpenVPN server on Raspberry Pi is now set up.

Let me know if you need further assistance! 🚀

 

References:

ChatGPT. (2025, February 23). How to set up OpenVPN with a dynamic IP using DDNS on Raspberry Pi. OpenAI. Retrieved from https://chat.openai.com

ChatGPT. (2025, February 23). A conceptual digital illustration representing VPN, Linux, Raspberry Pi OS, Raspberry Pi, and travel [AI-generated image]. OpenAI.