3. Wireguard: Configuración

Configuración genérica de WireGuard

1. WireGuard no tiene realmente “servidores” y “clientes”

Desde el punto de vista del protocolo, todos los participantes son peers.

Cada peer posee:

  • una interfaz WireGuard;
  • una dirección IP dentro del túnel;
  • una clave privada propia;
  • una clave pública derivada de esa clave privada;
  • una lista de otros peers conocidos.

Se habla habitualmente de:

  • servidor, para el peer que tiene una dirección pública o un puerto accesible y recibe conexiones;
  • cliente, para el peer que inicia la comunicación desde Internet.

Pero esa diferencia es principalmente de topología y operación, no de naturaleza criptográfica. WireGuard se configura agregando a cada interfaz su clave privada y las claves públicas de los peers con los que debe comunicarse. El propio proyecto WireGuard indica que la distribución de claves y configuraciones queda fuera del protocolo.

2. Elementos que posee cada peer

Supongamos a modo de ejemplo dos equipos:

Peer A: servidor 
Peer B: celular
 

Cada uno genera su propio par:

Servidor:
  Clave privada SA
  Clave pública PA

Celular:
  Clave privada SB
  Clave pública PB
 

La regla fundamental es:

El servidor conserva SA y configura PB.
El celular conserva SB y configura PA.
 

Es decir:

Servidor conoce la clave pública del celular.
Celular conoce la clave pública del servidor.
 

Las claves privadas no deberían intercambiarse entre equipos cuando la configuración se realiza de manera manual.

SOLO SE INTERCAMBIAN LAS CLAVES PUBLICAS!!

Funcionamiento:

  • Cuando el servidor envía algo al celular , lo cifra con la clave publica del celular , y el celular lo descifra con su clave privada.
  • Cuando el celular envía algo al servidor , lo cifra con la clave publica del servidor , y el servidor lo descifra con su clave privada.

Por eso SOLO se deben compartir las claves Publicas!.

Gráficamente sería: 

3. Qué contiene una configuración WireGuard

EL archivo de cojnfiguración, ya sea del Servidor o del Peer son siminlares, tienen dos secciones.

Una configuración típica posee dos secciones:

[Interface]
PrivateKey = clave_privada_del_equipo_local
Address = direccion_IP_del_equipo_en_el_tunel
DNS = servidor_DNS_opcional

[Peer]
PublicKey = clave_publica_del_equipo_remoto
Endpoint = direccion_publica_del_remoto:puerto
AllowedIPs = redes_que_se_alcanzan_por_ese_peer
PersistentKeepalive = 25

La sección [Interface] describe al equipo local.

La sección [Peer] describe al equipo remoto.

Esto es muy importante para los alumnos porque el mismo archivo cambia de significado según en qué equipo se instale.

Ejemplo de Visualización de la configuración de VPN en Router TP-Link.

Métodos de Configuración Frecuentes.

Método 1: importación mediante archivo

El administrador entrega un archivo:

alumno01.conf
 

El usuario lo importa en:

  • Windows;
  • Linux;
  • Android;
  • iOS;
  • macOS;
  • ciertos routers.

Es equivalente a un código QR (método siguiente) , pero más cómodo para computadoras.


Método 2: importación mediante QR

Es especialmente cómodo para:

  • Android;
  • iPhone;
  • tabletas.

El QR representa normalmente el mismo contenido que el archivo .conf.

No depende de que el otro extremo sea:

  • Windows;
  • Linux;
  • otro celular;
  • un router;
  • un servidor Docker.

El sistema operativo no cambia el principio criptográfico.

NOTA IMPORTANTE:

En el caso del uso de un QR , el servidor crea:

  1. Privada_celular
  2. Pública_celular

Y luego 

Servidor conserva:
- Pública_celular

Medianete el QR entrega al celular:
- Privada_celular
- Pública_servidor
- IP del túnel
- Endpoint
- AllowedIPs
- DNS, si corresponde

1. IP del túnel

La IP del túnel es la dirección IP que se asigna a cada interfaz WireGuard dentro de la red virtual.

Por ejemplo:

 
Red WireGuard: 10.10.10.0/24
Servidor:      10.10.10.1
Celular:       10.10.10.2
Notebook:      10.10.10.3
 

Estas direcciones no son necesariamente las IP físicas de los equipos.

Un celular puede tener simultáneamente:

 
IP móvil o Wi-Fi: 192.168.0.50
IP pública:       asignada por el proveedor
IP WireGuard:     10.10.10.2
 

La IP WireGuard identifica al equipo dentro de la VPN.

En un archivo de configuración aparece en [Interface]:

 
[Interface]
Address = 10.10.10.2/32
PrivateKey = ...
 

Eso significa:

Esta interfaz WireGuard local tendrá la dirección 10.10.10.2.

En el servidor:

 
[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = ...
 
Ejemplo visual
Internet
   │
   │ tráfico UDP cifrado
   │
Servidor WireGuard
IP física LAN: 192.168.1.10
IP del túnel:  10.10.10.1
   │
   │ red virtual WireGuard
   │
Celular
IP móvil/Wi-Fi: variable
IP del túnel:   10.10.10.2
 

La IP del túnel sirve para:

  • identificar cada peer dentro de la VPN;
  • hacer ping entre peers;
  • enrutar tráfico;
  • asociar direcciones con claves públicas;
  • evitar que dos peers utilicen la misma identidad IP.

2. AllowedIPs

AllowedIPs indica qué direcciones o redes están asociadas a un determinado peer.

La dificultad es que se interpreta de manera distinta según desde qué lado se observe.

En un cliente

En el celular podría aparecer:

 
[Peer]
PublicKey = PUBLICA_SERVIDOR
Endpoint = vpn.ejemplo.com:51820
AllowedIPs = 192.168.1.0/24
 

Esto significa:

Todo tráfico dirigido a 192.168.1.0/24 debe enviarse por el túnel hacia ese peer.

Es decir, actúa como una ruta.

Si el celular intenta acceder a:

192.168.1.20
 

WireGuard ve que esa dirección pertenece a:

192.168.1.0/24
 

y envía el paquete cifrado al servidor.

En el servidor

En el servidor puede aparecer:

 
[Peer]
PublicKey = PUBLICA_CELULAR
AllowedIPs = 10.10.10.2/32
 

Aquí significa:

La dirección 10.10.10.2 pertenece a este peer identificado por esa clave pública.

Por lo tanto, cuando el servidor quiera enviar tráfico a 10.10.10.2, sabrá que debe cifrarlo para la clave pública del celular.

También impide que ese peer se presente como otra IP WireGuard distinta.


3. Relación entre IP del túnel y AllowedIPs

Supongamos:

 
Servidor: 10.10.10.1
Celular:  10.10.10.2
 

La configuración del celular contiene:

 
[Interface]
Address = 10.10.10.2/32
 

Eso indica la IP propia del celular.

La configuración del servidor contiene:

 
[Peer]
PublicKey = PUBLICA_CELULAR
AllowedIPs = 10.10.10.2/32
 

Eso indica que la IP 10.10.10.2 corresponde al celular.

Por lo tanto:

 
Address
 

indica:

Quién soy yo dentro del túnel.

Mientras que:

 
AllowedIPs
 

indica:

Qué direcciones se alcanzan mediante ese peer o qué direcciones le pertenecen.