Una VPN site-to-site è una connessione sicura che collega due o più subnet geograficamente separate attraverso una rete pubblica, come Internet. A differenza di una VPN remote access, che consente a un singolo utente di accedere a una rete privata, una VPN site-to-site mette in comunicazione intere reti, permettendo ai dispositivi presenti in ciascuna sede di raggiungere le risorse dell’altra come se appartenessero alla stessa infrastruttura di rete.

vpn-site-to-site

Dal punto di vista del routing, ciascun gateway VPN conosce le sottoreti raggiungibili attraverso il tunnel e instrada esclusivamente il traffico destinato a tali reti. Tutto il restante traffico continua a utilizzare il gateway predefinito, salvo configurazioni specifiche di tipo full tunnel.

Nel caso illustrato in questa guida, l’obiettivo consiste nel realizzare una VPN site-to-site tra un server VPS e l’infrastruttura del proprio homelab, così da consentire al VPS di comunicare direttamente con Proxmox Backup Server (PBS) attraverso il tunnel WireGuard. In questo modo, le operazioni di backup avvengono su un canale privato e cifrato, senza esporre il servizio PBS su Internet.

Prerequisiti

Prima di intervenire su OPNsense, assicurarsi di disporre dei seguenti elementi:

  • Un VPS con server WireGuard già configurato e testato, come descritto nell’articolo specifico
  • L’IP pubblico del VPS e la porta WireGuard (solitamente 51820/UDP)
  • La chiave pubblica WireGuard del VPS
  • La subnet del tunnel VPN, ad esempio 10.8.0.0/24
  • Gli indirizzi IP del tunnel scelti: 10.8.0.1 per il VPS, 10.8.10.2 per OPNsense

Si raccomanda di eseguire un backup della configurazione di OPNsense prima di apportare modifiche.

Nelle versioni 25.x e successive di OPNsense, WireGuard è integrato nativamente in OPNsense e non richiede l’installazione di componenti aggiuntivi. Nelle versioni precedenti, il supporto a WireGuard è fornito tramite il plugin os-wireguard, che deve essere installato da System > Firmware > Plugin, prima di poter configurare il servizio.

OPNsense

Abilitare WireGuard

Dal percorso VPN > WireGuard > Instances, abilitare WireGuard.

enabled-wg

Creazione dell’istanza WireGuard

Da VPN > WireGuard > Instance > Add configurare i seguenti parametri:

  • Enabled: Yes
  • Name: VPS-WG
  • Generare una nuova coppia di chiavi utilizzando l’icona dell’ingranaggio
  • Tunnel Address: 10.8.0.2/24 (indica l’indirizzo IP di OPNsense nel tunnel)
  • MTU:1420 per installazioni bare metal, 1380 se OPNsense è eseguito in ambiente virtualizzato (QEMU/KVM), 1412 se la connessione WAN utilizza PPPoE
  • Disable Routes: lasciare l’opzione disabilitata

edit-instance

Configurazione del peer WireGuard

Spostarsi al percorso VPN > WireGuard > Peer > Add:

  • Enabled: Yes
  • Name: VPS
  • Public Key: chiave pubblica del server VPS
  • Tunnel Address (AllowedIPs): 10.8.0.0/24, 10.0.10.0/24, 10.0.5.0/24
  • Endpoint Address: indirizzo IP pubblico del VPS
  • Endpoint Port: 51820
  • Instances: VPS-WG
  • Persistent Keepalive (in secondi): 25

edit-peer

Dopo aver salvato il peer, tornare nella configurazione dell’istanza VPS-WG e, nella sezione Peers, selezionare il peer VPS appena creato. Salvare la configurazione e applicare le modifiche.

L’obiettivo di questa configurazione non è instradare il traffico Internet della LAN attraverso il VPS, ma esclusivamente consentire a OPNsense di raggiungere il VPS attraverso il tunnel WireGuard. Il parametro AllowedIPs definisce infatti le subnet consentite attraverso il tunnel WireGuard.

Con questa configurazione:

  • Il traffico destinato alla rete 10.8.0.0/24 viene instradato attraverso l’interfaccia WireGuard
  • All’interno del tunnel, é consentito anche il traffico proveniente dalle reti 10.0.10.0/24 (LAN) e 10.0.5.0/24 (MNG)
  • Tutto il restante traffico continua a utilizzare l’interfaccia WAN secondo la normale tabella di routing

L’utilizzo di 0.0.0.0/0 è invece previsto per configurazioni full tunnel, nelle quali tutto il traffico della LAN viene instradato attraverso il VPS, che diventa il gateway di uscita per il traffico proveniente dalla rete locale. Tale configurazione richiede ulteriori impostazioni e presenta una complessità significativamente maggiore.

wg-status

Assegnazione dell’interfaccia WireGuard

Una volta completata la configurazione del tunnel, la comunicazione tra OPNsense e il VPS risulta già funzionante. Tuttavia, senza l’assegnazione di un’interfaccia dedicata, non è possibile applicare regole di firewall al traffico proveniente dal tunnel: in assenza di tale assegnazione, qualsiasi traffico inviato dal VPS verso la LAN viene bloccato automaticamente.

Da Interfaces > Assignments selezionare e assegnare l’interfaccia wg0.

Successivamente, abilitare la nuova interfaccia:

  • Enable: Yes
  • Description: VPS_WG
  • IPv4 Configuration Type: None

interface-wg0

Salvare la configurazione e applicare le modifiche.

L’indirizzo IP del tunnel (10.8.0.2/24) è già configurato all’interno dell’istanza. Configurare nuovamente lo stesso indirizzo come Static IPv4 sull’interfaccia può generare conflitti o comportamenti anomali. L’assegnazione dell’interfaccia ha il solo scopo di consentire l’applicazione di regole firewall dedicate al traffico WireGuard.

Regole di firewall

Per consentire al VPS di accedere a un servizio presente nella LAN è necessario creare una regola dedicata. Nel nostro caso, l’obiettivo è consentire al VPS di raggiungere Proxmox Backup Server (10.0.5.5), così da permettere l’esecuzione dei backup mediante Proxmox Backup Client, secondo la procedura illustrata nel precedente articolo.

Da Firewall > Rules > VPS_WG

Creare una nuova regola con i seguenti parametri:

  • Enabled: Yes
  • Description: Allow to PBS01 for BACKUP
  • Action: Pass
  • Direction: In
  • Protocol: TCP
  • Sources: wg0_VPS oppure 10.8.0.1
  • Destination: PBS01 oppure 10.0.5.5

Salvare la configurazione e applicare le modifiche. Questa regola consente esclusivamente l’accesso a PBS. Qualsiasi altro dispositivo, rimane inaccessibile dal tunnel WireGuard.

allow-vps-pbs

Di seguito alcune utili regole:

fw-rules

VPS

Una volta completata la configurazione di OPNsense, il VPS deve essere configurato affinché possa raggiungere PBS attraverso il tunnel WireGuard.

Il server VPS deve conoscere la posizione della subnet 10.0.5.0/24: la modalità più semplice consiste nell’aggiungere la rete tra gli AllowedIPs del peer OPNsense all’interno del file /etc/wireguard/wg0.conf.

1
2
3
4
5
6
7
8
9
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <VPS_PRIVATE_KEY>

[Peer]
#opnsense
PublicKey = <OPNSENSE_PUBLIC_KEY>
AllowedIPs = 10.8.0.2/32, 10.0.5.5/32

L’inclusione dell’host 10.0.5.5/32 negli AllowedIPs indica a WireGuard che PBS è raggiungibile attraverso il peer OPNsense. In assenza di questa configurazione, il VPS non inoltrerà il traffico destinato al PBS nel tunnel.

Dopo aver modificato il file, riavviare WireGuard col comando systemctl restart wg-quick@wg0. Riavviare Wireguard anche da OPNsense:

restart-wg

Semplicemente, disabilitare l’istanza, applicare, riattivare l’istanza e riapplicare nuovamente le modifiche.

Verificare quindi la correttezza delle rotte:

1
2
3
4
5
ip route | grep wg0

default via 173.212.234.1 dev eth0 proto static
10.0.5.5 dev wg0 scope link
10.0.10.50 dev wg0 scope link

Dal VPS eseguire:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
ping 10.8.0.2 -c 4

PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data.
64 bytes from 10.8.0.2: icmp_seq=1 ttl=64 time=72.3 ms
64 bytes from 10.8.0.2: icmp_seq=2 ttl=64 time=50.8 ms
64 bytes from 10.8.0.2: icmp_seq=3 ttl=64 time=55.2 ms
64 bytes from 10.8.0.2: icmp_seq=4 ttl=64 time=68.8 ms

--- 10.8.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 50.807/61.780/72.289/8.978 ms

per verificare la raggiungibilità di OPNsense. E quindi:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
ping 10.0.5.5 -c 4
PING 10.0.5.5 (10.0.5.5) 56(84) bytes of data.
64 bytes from 10.0.5.5: icmp_seq=1 ttl=63 time=67.0 ms
64 bytes from 10.0.5.5: icmp_seq=2 ttl=63 time=61.5 ms
64 bytes from 10.0.5.5: icmp_seq=3 ttl=63 time=59.2 ms
64 bytes from 10.0.5.5: icmp_seq=4 ttl=63 time=52.8 ms

--- 10.0.5.5 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 52.755/60.115/67.000/5.110 ms

per assicurasi che PBS sia correttamente raggiungibile. Una volta rimosse da PBS le vecchie configurazioni, disinstallato il pacchetto wireguard-tools e rimosso l’interfaccia wg0 (tramite il comando ip link delete wg0), il backup del VPS dovrebbe avviarsi correttamente.

Per completezza, nel file /etc/default/proxmox-backup , l’indirizzo di PBS deve essere corretto:

1
2
3
4
cat /etc/default/proxmox-backup

# PBS
PBS_REPOSITORY="vps-backup@pbs@10.0.5.5:pbs-usb-pool"

Riferimenti