Questa vuole essere una guida veloce per una configurazione di un router basato su VyOS, Vyatta e le sue varianti come EdgeOS.
Avevo già scritto una guida su come configurare una VPN con OpenVPN e ProtonVPN,ma questo setup è molto più semplice. Riguarda il vecchio articolo se ne vuoi sapere di più.

VPN PROVIDER

Mullvad VPn provider wireguard

ProtonVPN ha annunciato il supporto a Wireguard ma i suoi files di configurazione non sono disponibili - ad oggi - e si può usare questo protocollo solamente con la loro applicazione.

Ho deciso di provare Mullvad, un servizio situato in Svezia e con server in tutto il Mondo. Utilizza Wireguard nel modo classico, è facile da aggiungere la configurazione ad un router e la sua velocità è molto buona.

Configurazione VyOS

VyOS Open Source router Firewall

Questa guida dà per scontato una familiarità con la configurazione di VyOS. Io ho scelto come provider Mullvad, ma la stesso risultato si può ottenere con qualsiasi altro provider. I comandi sono stati eseguiti sulla version 1.3 LTS di VyOS creando il file iso in locale.

Connessione con Wireguard

Come primo passaggio è necessario creare le chiavi private per la connessione (in questo esempio la connessione avverrà verso un server italiano):

$ generate wireguard named-keypairs it4-wireguard
$ show wireguard keypairs privkey it4-wireguard
xxxxxxxxxxnascostoxxxxxxxxxxxxx

Ottenere la chiave pubblica dal sito mullvad registrando la chiave privata appena creata nella pagina di configurazione. Poi, sempre nella stessa pagina, generare una configurazione wg-wquick utilizzando la stessa chiave per la nazione scelta (in questo caso l’Italia).

A questo punto può essere configurata la VPN su VyOS:

set interfaces wireguard wg01 address '1.2.3.4/32' # Address
set interfaces wireguard wg01 description 'Mullvad it4-wireguard'
set interfaces wireguard wg01 firewall in name 'wg80-in'
set interfaces wireguard wg01 firewall local name 'wg80-local'
set interfaces wireguard wg01 peer mullvad address '1.2.3.4' # Endpoint
set interfaces wireguard wg01 peer mullvad allowed-ips '0.0.0.0/0'
set interfaces wireguard wg01 peer mullvad persistent-keepalive '10'
set interfaces wireguard wg01 peer mullvad port '51820'
set interfaces wireguard wg01 peer mullvad pubkey 'xxxxxxxxxxxxxxxxxxxxxxxx' #PublicKey
set interfaces wireguard wg01 private-key 'it4-wireguard'

Firewall group

Attraverso il firewall impostiamo un metodo per controllare quali devices utilizzeranno la VPN.

Ad esempio, i devices con IP finale dal 10 al 253 andranno ad instradarsi nella route della VPN:

set firewall group address-group WG-MULLVAD-IT address '192.168.1.10-192.168.1.253'

Ovviamente la destinazione RFC1918 sarà esclusa dalla route verso l’interfaccia wg:

set firewall group network-group RFC1918 network '192.168.0.0/16'
set firewall group network-group RFC1918 network '10.0.0.0/8'
set firewall group network-group RFC1918 network '172.16.0.0/12'

Policy

VyOS ha bisogno anche di sapere come instradare il traffico in base a chi all’host sorgente e di destinazione, applicando la route principale o quella alternativa.

set policy route VPN description 'ROUTE per Destinazione LAN locale e a MullVAD IT4 VPN'
set policy route VPN rule 9 destination group network-group 'RFC1918'
set policy route VPN rule 9 set table 'main'
set policy route VPN rule 10 destination address '0.0.0.0/0'
set policy route VPN rule 10 set table '01'
set policy route VPN rule 10 source group address-group 'WG-MULLVAD-IT'

E applicato all’interfaccia LAN:

set interface ethernet eth1 policy route 'VPN'

Routes

Fino ad ora è stato impostato come il traffico assegnato all’interfaccia viene suddiviso tra VPn e LAN, ora è il momento delle routes:

set protocols static table 01 interface-route 0.0.0.0/0 next-hop-interface wg01
set protocols static table 01 route 0.0.0.0/0 blackhole distance '255'

NAT

È importante non dimenticarsi di nattare la connessione che attraversa la VPn altrimenti ai clients non potranno navigare correttamente:

set nat source rule 01 outbound-interface 'wg01'
set nat source rule 01 translation address 'masquerade'

Killswitch

Per ultimo, è buona idea impostare il blocco della navigazione internet ai client designati a utilizzare il tunnel VPN nel caso in cui la connessione al server wireguard venga meno:

set firewall name WAN_OUT default-action 'accept'
set firewall name WAN_OUT description 'Blocca navigazione se VPN è offline'
set firewall name WAN_OUT rule 9 action 'accept'
set firewall name WAN_OUT rule 9 state established 'enable'
set firewall name WAN_OUT rule 9 state related 'enable'
set firewall name WAN_OUT rule 97 action 'accept'
set firewall name WAN_OUT rule 97 description 'Permetti sempre la navigazione in LOCALE'
set firewall name WAN_OUT rule 97 destination group network-group 'RFC1918'
set firewall name WAN_OUT rule 101 action 'reject'
set firewall name WAN_OUT rule 101 description 'Blocca connessione a internet se VPN offline solo a WG-MULLVAD-IT grouppo'
set firewall name WAN_OUT rule 101 protocol 'tcp_udp'
set firewall name WAN_OUT rule 101 source group address-group 'WG-MULLVAD-IT'