22 - Conectividad en redes remotas (WireGuard)

Volver ó curso

2.2. WireGuard VPN

Instala WireGuard nas túas tres máquinas virtuais:

apt update ; apt install -y software-properties-common ; add-apt-repository ppa:wireguard/wireguard ; apt install -y wireguard

Agora vai á carpeta de configuración de WireGuard:

cd /etc/wireguard/

2.2.1. WireGuard en rede local con dous peers

Imos usar neste apartado as dúas primeiras máquinas (riosA e riosB no meu caso).

WireGuard funciona por parellas de claves. Un peer ten unha parella de claves (p.ex: meu (privada) e meu.pub (pública)) e o outro peer ten outra parella (seu (privada) e seu.pub (pública)). Cada usuario ten a súa parella. Só con poñer a clave privada, a pública xa vai implícita, pero non ó revés:

Así, un ficheiro de configuración válido para o peer “meu” consta de:

E, no outro lado:

Así que veña, a crear dúas parellas de claves:

wg genkey | sudo tee /etc/wireguard/meu | wg pubkey | sudo tee /etc/wireguard/meu.pub
wg genkey | sudo tee /etc/wireguard/seu | wg pubkey | sudo tee /etc/wireguard/seu.pub

Agora hai que pensar o direccionamento. Tes que pensar unha dirección de rede privada que non estea a utilizar ningún equipo no teu ámbito (nin casa, nin traballo, nin redes públicas…). Como esta rede só ten dous hosts, imos usar: 10.0.0.0/30

Por algún motivo é habitual usar clase A para redes VPN (10.X.Y.Z/8). Non é ningunha norma, senón un hábito estendido pola comunidade. Tampouco o é o feito de que se use a clase C en redes locais (192.168.X.Y/24). Realmente as da clase A son moito máis fáciles de teclear.

Agora imos configurar as dúas máquinas.

E xa estaría lista a configuración! Para “levantar” o túnel bastará con habilitar a interface de rede wg0 en ambos peer:

sudo wg-quick up wg0

E para facer que o túnel persista ós reinicios:

sudo systemctl enable wg-quick@wg0	# disable para efecto contrario

Podes validar que o túnel funciona con:

wg show wg0

Ou con ping:

ping -c 2 10.0.0.1 ; ping -c 2 10.0.0.2

Pódese utilizar o mesmo porto nas dúas máquinas? Si, xa que só son dúas. En topoloxías de acceso remoto (un servidor e múltiples clientes), só se debe fixar o porto do servidor (para que sexa “encontrable”). Os portos dos clientes deben permanecer dinámicos

Cada vez que fagas cambios no ficheiro /etc/wireguard/wg0.conf, debes aplicalos con systemctl restart wg-quick@wg0 ou cun reboot se che devolve erros. Lembra que os procesos de systemd se xestionan con start (acender por esta sesión), stop (apagar por esta sesión), status, restart, enable (acender en sucesivas sesións) e disable (apagar en sucesivas sesións).

2.2.2 WireGuard en acceso remoto con varios clientes

Agora que xa vimos como configurar un túnel básico site-to-site sen NAT, vamos ver como facer un túnel de acceso remoto pasando por NAT. Cada alumno deste curso ten un porto aberto para si.

WireGuard se considera peer to peer (P2P), pero se pode usar coma se fose cliente-servidor. Configuración do servidor:

No caso do cliente 1:

No caso do cliente 2:

Entramos en apelidoC e creamos polo menos dúas parellas de claves:

wg genkey | sudo tee /etc/wireguard/servidor | wg pubkey | sudo tee /etc/wireguard/servidor.pub
wg genkey | sudo tee /etc/wireguard/cliente1 | wg pubkey | sudo tee /etc/wireguard/cliente1.pub

Creamos o ficheiro de configuración do servidor.

nano /etc/wireguard/wg0.conf

Neste caso a rede VPN vai ser a 10.111.111.0/24:

[Interface]
PrivateKey = servidorservidorservidorservidorservidorservidor
Address = 10.111.111.1/32
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820

[Peer]
PublicKey = cliente1.pub.cliente1.pub.cliente1.pub.cliente1.pub
AllowedIPs = 10.111.111.2/32

[Peer]
PublicKey = cliente2.pub.cliente2.pub.cliente2.pub.cliente2.pub
AllowedIPs = 10.111.111.3/32

#...

Aclaracións:

Imos agora cos clientes! Usa un PC que teñas a man, ou incluso un teléfono móbil. Esta é a configuración:

[Interface]
PrivateKey = cliente1cliente1cliente1cliente1cliente1cliente1
Address = 10.111.111.2/32

[Peer]
PublicKey = servidor.pub.servidor.pub.servidor.pub.servidor.pub
AllowedIPs = 10.111.111.0/24, 172.20.0.0/24
Endpoint = homelabvoip.duckdns.org:51820

Activa túnel no lado do servidor:

sudo wg-quick up wg0

E para facer que o túnel persista ós reinicios:

sudo systemctl enable wg-quick@wg0	# disable para efecto contrario

Podes validar que o túnel funciona con:

wg show wg0

Ou con ping:

ping -c 2 10.111.111.1 ; ping -c 2 10.111.111.2

Para comprobar se o túnel está levantado (lado do cliente, previa configuración)

ping -c 2 10.111.111.1

Gracias ós campos PostUp e AllowedIPs, tamén podes conectar con calquera host da rede 172.20.0.0/24

Packet forwarder (enrutamento)

Agora o cliente pode acceder ó servidor, e o servidor ó cliente. Ademais ambos teñen rutas á rede do servidor, a 172.20.0.0/24… pero verás que non logras facer ping a ningún host desa rede.

Iso é porque para que o tráfico poda pasar da 10.111.111.0/24 á rede 172.20.0.0/24, o host apelidoC debe ter activado o packet forwarder, máis coñecido como enrutamento:

sysctl -w net.ipv4.ip_forward=1

Fai que o cambio sexa persistente:

nano /etc/sysctl.conf

Descomenta esta liña:

Comproba se está habilitado (1) ou deshabilitado (0) con:

cat /proc/sys/net/ipv4/ip_forward

Creado para G2101134 - “Centrais telefónicas VoIP con Asterisk” por Daniel Ríos Suárez. Este curso virtual elaborouse para ser impartido no plan anual de formación do profesorado de FP da Consellería de Cultura, Educación e Ordenación Universitaria, Xunta de Galicia.

Publícase baixo unha licenza Creative Commons Recoñecemento-NonComercial-Compartir igual 4.0 Internacional

Quedan fóra desta licenza os textos, imaxes, recursos... que manteñen a súa propia licenza, sinalada en cada caso.

Úsanse imaxes e recursos publicados no Dominio público ou con licenza CC BY ou CC BY-NC-SA OU CC BY-NC propios e/ou alleos, tomados preferentemente de bancos de recursos educativos abertos. Tamén se empregan ---acolléndose ao "Dereito de cita" --- imaxes e recursos diversos de diferentes páxinas web, indicando a súa licenza ao pé dos propios recursos ou na páxina coa atribución da propiedade intelectual dos ODE empregados, dereitos reservados que manteñen integramente. Se detecta algunha imaxe, recurso... con dereitos reservados non atribuído correctamente, agradecemos nos informe para retiralo ou corrixilo.