Acceso VPN

Introducción

Este VM se encarga de las conexiones Wireguard entrantes en la red local. Ya sea para la comunicación con boniato o como servicio para el móvil.

Generalidades

Router virtual en Brocoli

Máquina LXC "VPN" con SO Debian.

Dirección IP fija en red local 192.168.1.19/24
Dirección IP fija wireguard 10.0.0.1/32

NAT en router de fibra: 51821 a IP local 192.168.1.19 hostname: vpn.lechuga.eu

Configuración en /etc/wireguard/wg0

# Ver estado de la conexión
wg show

# Reiniciar la conexión
wg-quick down wg0 && wg-quick up wg0
 

Direcciones asignadas

(:sortable arrows=black headerrow=#000 headerrowbg=#efe :)

NOMBREIP ASIGNADA
router3 (Nodo local Lechuga)192.168.1.019:51821
router3 (interfaz VPN)10.0.0.1/32
boniato10.0.0.2/32
movil hugo10.0.0.3/32
vm-test-wireguard-00110.0.0.101/32
vm-test-wireguard-00210.0.0.102/32
vm-test-wg en guisante10.0.0.103/32

Reglas iptables


# Actualiza con tablas actules: sudo iptables-save | sudo tee /etc/iptables/rules.v4
# Restaurar desde este archivo: iptables-restore < /etc/iptables/rules.v4

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

# Para chibisafe **** INICIO
-A FORWARD -s 10.0.0.2/24 -d 192.168.1.156/24 -i wg0 -o eth0 -p tcp -m tcp --dport 24424 -j ACCEPT
-A FORWARD -s 192.168.1.156/24 -d 10.0.0.2/24 -i eth0 -o wg0 -p tcp -m tcp --sport 24424 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Para chibisafe **** FIN

# Para mealie **** INICIO
-A FORWARD -s 10.0.0.2/24 -d 192.168.1.156/24 -i wg0 -o eth0 -p tcp -m tcp --dport 9925 -j ACCEPT
-A FORWARD -s 192.168.1.156/24 -d 10.0.0.2/24 -i eth0 -o wg0 -p tcp -m tcp --sport 9925 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Para mealie **** FIN


# no se permite al VPS husmear otras partes de la red
-A FORWARD -s 10.0.0.2 -d 192.168.1.0/24 -j DROP

# Para conexiones propias a la red local
-A FORWARD -s 10.0.0.0/24 -d 192.168.1.0/24 -j ACCEPT
-A FORWARD -d 10.0.0.0/24 -s 192.168.1.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Para conexiones propias a internet
-A FORWARD -s 10.0.0.0/24 -j ACCEPT
-A FORWARD -d 10.0.0.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT

COMMIT
# Completed on Tue Nov  4 06:03:58 2025
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [1:60]

-A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE

# Para chibisafe *** INICIO
# -A POSTROUTING -d 192.168.1.156/24 -o eth0 -p tcp -m tcp --dport 24424 -j MASQUERADE
# Para chibisafe *** FIN

# Para mealie **** INICIO
# -A POSTROUTING -d 192.168.1.156/24 -o eth0 -p tcp -m tcp --dport 9925 -j MASQUERADE
# Para mealie **** FIN


COMMIT
# Completed on Tue Nov  4 06:03:58 2025


Setup inicial ejecutado

Cargar el módulo wireguard en el guest (en el host debe estar ya cargado)
lxc config set vpn linux.kernel_modules wireguard

Generar cliente nuevo

Decidir FQDN e IP fija

En cliente, generamos pareja público-privada

sudo apt-get install wireguard -y
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey

En cliente, añadir a /etc/wireguard/wg0.conf:

[Interface]
Address = 10.0.0.2/32
PrivateKey =  <<Clave privada del cliente>>
DNS = 1.1.1.1

[Peer]
PublicKey =  <<Clave pública del servidor>>
Endpoint = <server-public-ip>:51821
AllowedIPs = 0.0.0.0/0, ::/0

En servidor, añadir un nuevo peer a /etc/wireguard/wg0.conf:

[Peer]
# Peer de pruebas
PublicKey = <<Clave pública del cliente>>
AllowedIPs = 10.0.0.101/32
PersistentKeepalive = 25
Reiniciamos, tanto en cliente como en servidor, el interfaz wg0
wg-quick up wg0
wg syncconf wg0 <(wg-quick strip wg0)

https://upcloud.com/community/tutorials/get-started-wireguard-vpn/

https://serversideup.net/generating-wireguard-qr-codes-for-fast-mobile-deployments/