Vediamo come configurare una VPN site-to-site usando Wireguard tra Mikrotik e Pfsense.
Nello scenario che andremo a vedere entrambe le sedi, che chiameremo SEDE A e SEDE B, hanno IP Pubblico dinamico.
Premessa
- Sul router Mikrotik deve esserci un servizio DDNS configurato e funzionante(scopri come fare by foisfabio.it)
- Sul firewall Pfsense deve esserci un servizio DDNS configurato e funzionante(leggi questo articolo per configurarlo)
- Il router Mikrotik deve avere RouterOS versione 7
Contenuti
Dispositivi utilizzati
- Mikrotik CHR
- Pfsense
Diagramma di rete Wireguard site-to-site Mikrotik Pfsense
Sede A – Configurazione Wireguard Mikrotik
Creazione interfaccia
- Entriamo nel nostro Mikrotik tramite Winbox e rechiamoci nella sezione Wireguard
- Clicchiamo su +(Add) per aggiungere una nuova interfaccia Wireguard
- Configuriamo l’interfaccia:
- Name – wg-pfsense
- Listen Port – 42323
- Clicchiamo su Apply e salviamoci la Public Key che verrà generata, ci servirà nella configurazione del Pfsense
- Clicchiamo su OK
Assegnazione indirizzo IP interfaccia Wireguard
- Andiamo nel menù IP –> Addresses
- Clicchiamo su +(Add)
- Configuriamo l’indirizzo IP dell’interfaccia:
- Address – 172.16.16.1/30
- Interface – wg-pfsense
- Clicchiamo su Apply e poi su OK
Sede B- Configurazione Wireguard Pfsense
Installazione package
Se sul Pfsense non hai già installato il package Wireguard, puoi seguire la parte iniziale di questo articolo.
Creazione tunnel
Andiamo nel menù VPN e clicchiamo su WireGuard
Ci troveremo nella pagina dei tunnel Wireguard e procediamo a creare un nuovo tunnel cliccando sulla voce +Add Tunnel.
Procediamo alla configurazione del tunnel:
- Abilita – Verifichiamo che il tunnel sia abilitato
- Descrizione – Inseriamo una descrizione, es. wg-mikrotik
- Listen port – Inseriamo una porta sulla quale sarà di ascolto il tunnel, es. 42323
- Clicchiamo su Generate per generare una coppia di chiavi pubblica/privata. Annotiamoci la chiave pubblica da qualche parte, ci servirà successivamente.
- Interface Addresses – Assegniamo un indirizzo all’interfaccia di Wireguard, es. 172.16.16.2/30
- Clicchiamo su Save Tunnel
Abilitazione servizio
Andiamo sulla voce Impostazioni e procediamo con:
- Abilitare il servizio Wireguard
- Interface Group Membership – Only unassigned Tunnels
- Deseleziona le voci Hide Secrets e Hide Peers
- Clicchiamo su Salva
- Clicchiamo su Applica le modifiche
Assegnazione interfaccia Pfsense
Andiamo nel menù Interfacce –> Assegnazioni
Ci troveremo nelle porte di rete disponibili una situazione simile con un’interfaccia da assegnare. Nel mio caso viene chiamata tun_wg0
Clicchiamo su +Aggiungi
Una volta aggiunta clicchiamo sul nome dell’interfaccia che nel mio caso si chiama OPT1 e procediamo a configurarla come da esempio sotto.
Abilitiamo l’interfaccia ed assegniamo lo stesso indirizzo IP che abbiamo dichiarato prima nella creazione del Tunnel Wireguard
Rinominiamo anche l’interfaccia OPT1 con un nome che ci permette di identificarla più facilmente
Infine clicchiamo su Salva e poi su Applica le modifiche
Sede A – Aggiunta peer Mikrotik
Aggiungiamo ora il peer(client) sul Mikrotik andando nella sezione Wireguard –> Peers
Clicchiamo su +(Add) e procediamo alla configurazione del peer:
- Interface – scegliamo l’interfaccia creata prima wg-pfsense
- Public key – inseriamo la public key che abbiamo salvato prima, relativa all’interfaccia Wireguard di Pfsense
- Endpoint – inseriamo il DDNS della SEDE B, pfsense.duckdns.org
- Endpoint port – inseriamo la porta di ascolto che abbiamo impostato su Pfsense, 42323
- Allowed Address – inseriamo l’IP dell’interfaccia remota del tunnel Wireguard 172.16.16.2 ed inseriamo la network della LAN remota che si trova dietro Pfsense, 192.168.140.0/24
- Preshared Key – impostiamo su Auto
- Persistent Keepalive – impostiamo 25sec, 00:00:25
- Clicchiamo su Apply
- Dopo aver cliccato su Apply, nel campo Preshared Key verrà generata le chiave pre-condivisa. Salviamoci da qualche parte la preshared key perchè ci servirà quando configureremo il peer su Pfsense
- Clicchiamo su OK
Sede B – Aggiunta peer Pfsense
Rechiamoci su Pfsense nella sezione VPN –> Wireguard ed poi clicchiamo su Peers
Clicchiamo su +Add Peer e configuriamolo come segue:
- Abilita – Spuntiamo la casella Enable Peer
- Tunnel – selezioniamo il tunnel creato precedentemente, tun_wg0 (wg-mikrotik)
- Dynamic Endpoint – Deselezioniamo la checkbox
- Endpoint – inseriamo il DDNS della SEDE A, mikrotik.duckdns.org e la porta di ascolto 42323
- Keep Alive – impostiamolo a 25 secondi
- Public Key – inseriamo la public key che abbiamo salvato prima, relativa all’interfaccia Wireguard del Mikrotik
- Pre-shared Key – inseriamo la preshared key che abbiamo generato precedentemente sul Mikrotik
- Allowed IPs – inseriamo l’IP dell’interfaccia remota del tunnel Wireguard 172.16.16.1
- Clicchiamo su +Add Allowed IP
- Aggiungiamo la network della LAN remota che si trova dietro il Mikrotik, 192.168.150.0/24
- Clicchiamo su Save Peer
- Clicchiamo su Applica le modifiche
Regole Firewall Mikrotik
Configuriamo ora la regola firewall per accettare le connessioni in ingresso per il tunnel Wireguard.
- Andiamo in IP –> Firewall
- Filter Rules
- Clicchiamo su + (Add)
- Configuriamo una rule nella chain di input che accetti il traffico in ingresso proveniente dall’interfaccia WAN(nell’esempio sotto è la pppoe-out1):
- Chain – input
- Protocol – UDP
- Dst. port – 42323
- In.interface – pppoe-out1
- Action – Accept
- Inseriamo un commento per una più facile identificazione della regola cliccando su Comment ed inseriamo un commento tipo: Accetta connessioni Wireguard
- Cliccare su OK
- Cliccare su Apply e poi su OK
Una volta creata la regola assicuriamoci che non sia preceduta da un eventuale regola di DROP come nell’esempio sotto
Selezioniamo la nostra regola di Accept e trasciniamola sopra a quella di DOP
Regole Firewall Pfsense
Andiamo in Firewall –> Regole e selezioniamo l’interfaccia del tunnel Wireguard WG_MIKROTIK
Clicchiamo su Aggiungi(freccia verso l’alto) e creiamo una regola come sotto:
- Azione – Consenti
- Interfaccia – WG_MIKROTIK
- Protocollo – Qualsiasi
- Origine – Qualsiasi
- Destinazione – Qualsiasi
Clicchiamo su Salva e poi su Applica le modifiche
Aggiunta Gateway Pfsense
Per permettere alla LAN 192.168.140.0/24 di raggiungere la network remota 192.168.150.0/24 dobbiamo creare un Gateway per l’interfaccia Wireguard e successivamente creare una rotta statica
Andiamo in Sistema –> Routing –> Gateways e clicchiamo su Aggiungi
Configuriamo il nuovo gateway in questo modo:
- Disabilitato – Eliminiamo eventuale spunta
- Interfaccia – WG_MIKROTIK
- Nome – WG_Gateway
- Gateway – 172.16.16.1
- Clicchiamo su Salva e poi su Applica le modifiche
Aggiunta Rotta statica Pfsense
Sistema –> Routing –> Percorsi statici e clicchiamo su Aggiungi
Configuriamo la rotta statica come segue:
- Rete di destinazione – 192.168.150.0/24
- Gateway – WG_Gateway – 172.16.16.1
- Clicchiamo su Salva e poi su Applica le modifiche
Aggiunta Rotta statica Mikrotik
Nel Mikrotik andiamo in IP –> Routes e clicchiamo su +(Add)
Configuriamo la rotta statica così:
- Dst. Address – 192.168.140.0/24
- Gateway – 172.16.16.2
- Clicchiamo su Apply e poi su OK
Test di raggiungibilità tra le due sedi
Verifichiamo ora la raggiungibilità dal Mikrotik verso la SEDE B
Dal terminale del Mikrotik eseguiamo i comandi come da immagini sotto:
Verifichiamo ora la raggiungibilità dal Pfsense verso la SEDE A
Sul Pfsense andiamo in Diagnostica –> Ping ed eseguiamo i comandi come da immagini sotto:
Per ultimo verifichiamo la raggiungibilità tra due host delle due sedi: