Solo quería dejar aquí anotado la parte esencial de Wireguard para poder entenderlo.
Servidor
Como todo servicio consta de dos partes el cliente y el servidor.
En el servidor, y posteriormente en el cliente también, hay que crear un par de claves al estilo ssh.
mkdir ~/.wg
chmod 700 ~/.wg && cd ~/.wg
wg genkey | tee wg-private.key | wg pubkey > wg-public.key
chmod 600 *
En el servidor creamos un archivo /etc/wireguard/wg0.conf
Primero definimos la configuración del propio servicio:
[Interface]
Address = 192.168.0.1/24
ListenPort = 44312
PrivateKey = w00/xxM000asdbDFa000008djXv0000VjEydgb00=
- El direccionamiento donde se va a establecer la nueva red que no debe coincidir con uno existente
- El puerto de escucha
- La clave privada que hemos creado previamente
Esta regla de IPTables recomiendan en caso de no estar detrás de un NAT.
# if the server is behind a router and receive traffic via NAT, this iptables rules are not needed
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
En el cliente 1 donde tenemos instalado Wireguard también creamos un par de claves
mkdir ~/.wg
chmod 700 ~/.wg && cd ~/.wg
wg genkey | tee wg-private.key | wg pubkey > wg-public.key
chmod 600 *
Y con lo que sale de la pública creamos un nuevo apartado de cliente “Peer” en el mismo archivo wg0.conf
del servidor
[Peer] #cliente 1
PublicKey = mPcnwYR2JB+RljnV6ZelVFcZCqSQb+jp11et5ZRYZWo=
AllowedIPs = 0.0.0.0/0
[Peer] #cliente 2
PublicKey = eFknVBuw2uqZ6vRF9fZuvDY7Hq3F3fXMXl6dcru6m3Q=
AllowedIPs = 192.168.0.1/32, 192.168.1.1/32
En el apartado AllowedIPs
incluímos las IPs a las que podrá saltar el cliente pueda acceder una vez conectado a la VPN.
Si ponemos 0.0.0.0/0 podrá acceder a cualquier red accesible desde el servidor y obviamente, si ponemos una red concreta sólo podrá acceder a esa. Siempre redes accesibles y conocidas para el servidor.
Todo junto, el archivo con dos clientes quedaría así de simple:
[Interface]
Address = 192.168.0.1/24
ListenPort = 55312
PrivateKey = w00/xxM000asdbDFa000008djXv0000VjEydgb00=
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer] #cliente 1
PublicKey = mPcnwYR2JB+RljnV6ZelVFcZCqSQb+jp11et5ZRYZWo=
AllowedIPs = 0.0.0.0/0
[Peer] #cliente 2
PublicKey = eFknVBuw2uqZ6vRF9fZuvDY7Hq3F3fXMXl6dcru6m3Q=
AllowedIPs = 192.168.0.1/32, 192.168.1.1/32
Cliente
Mientras que en el cliente tendríamos esto:
[Interface]
Address = 192.168.0.10
PrivateKey = 2FurTgPHkZWabpZzMeyKCAw1+D3GmvfNALkTt+dqRlg=
ListenPort = 44312
[Peer]
PublicKey = eB6/r+GEnWYJ+Pony6Ofxm6S2KB/LBWv3WdBFPB0y18=
Endpoint = xuacu.es:55312
AllowedIPs = 192.168.1.1/24, 192.168.0.0/24
# This is for if you're behind a NAT and
# want the connection to be kept alive.
PersistentKeepalive = 25
Servicio
Para que manejar el servicio en SystemD usamos el siguiente comando:
systemctl [enable|start|stop] wg-quick@wg0
Rutas en red local
Si además queremos que se pueda acceder a un cliente que está conectado a nuestra red desde otra parte de la propia red podemos añadir una ruta local en un cliente linux.
route add -net 192.168.0.0/24 gw 192.168.1.225 dev eth0
Con esto le decimos a nuestro sistema por donde tiene que pasar para llegar a la red 192.168.0.0 desde la red en la que estamos que será la 192.168.1.1.
Comandos
Un par de comandos de utilidad:
* wg
sin modificadores muestra una foto del estado de la conexión en tiempo real
* wg-quick [up|down]
levanta o para la red
+INFO
Como siempre esto son notas personales para tener a mano, aconsejo revisar estas webs en caso de necesitar ayuda de verdad para configurar esto: