In questo articolo affronteremo la configurazione di Wireguard Server su un VPS Debian 11 e la configurazione full-tunnel di un peer Mikrotik.
Contenuti
Obbiettivo
Tutto il traffico verso Internet generato dai client attestati dietro la LAN del Mikrotik verrà reindirizzato verso il VPS, pertanto l’IP di navigazione risulterà quello del server Debian e non quello della WAN del Mikrotik.
Requisiti
- Un VPS con Debian 11 ed IP Pubblico statico (ti consiglio il provider Synthohosting)
- Un router Mikrotik con RouterOS v.7
Diagramma di rete
Installare Wireguard Server su Debian 11
Colleghiamoci al nostro VPS tramite terminale e con utente root diamo i comandi
apt update
apt install wireguard
Generazione chiavi Server Wireguard
Generiamo una coppia di chiavi pubblica e privata per il nostro server Wireguard.
Il comando sotto genererà la chiave privata che salveremo nel file chiamato server_private.key e la chiave pubblica nel file chiamato server_public.key
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey | tee /etc/wireguard/server_public.key
Generazione chiavi peer (Mikrotik)
Generiamo ora una coppia di chiavi pubblica e privata per il nostro peer Mikrotik.
La chiave privata sarà salvata nel file chiamato mikrotik_private.key e la chiave pubblica nel file chiamato mikrotik_public.key
wg genkey | tee /etc/wireguard/mikrotik_private.key | wg pubkey | tee /etc/wireguard/mikrotik_public.key
Configurazione Debian Wireguard Server
Configuriamo ora l’interfaccia Wireguard sul server Debian.
Copiamoci la chiave privata del server(server_private.key ), consultabile con in comando:
cat /etc/wireguard/server_private.key
Ripetiamo l’operazione per la Public Key del peer(mikrotik_public.key):
cat /etc/wireguard/mikrotik_public.key
Tramite il comando sotto creiamo il file wg0.conf. wg0 sarà anche il nome dell’interfaccia Wireguard che verrà creata sul server Debian
nano /etc/wireguard/wg0.conf
Copiamo il seguente testo nel file sostituendo il testo “MY_server_private.key” e “MY_mikrotik_public.key” con le chiavi che abbiamo recuperato al passaggio precedente
[Interface]
Address = 172.18.18.1/24
ListenPort = 51828
PrivateKey = MY_server_private.key
[Peer]
PublicKey = MY_mikrotik_public.key
AllowedIPs = 172.18.18.2/32
Spiegazione:
- Address: Indirizzo IP dell’interfaccia Wireguard del Server. Tale classe di rete non deve essere già utilizzata
- PrivateKey: Chiave privata del server, che si trova nel file /etc/wireguard/server_private.key
- ListenPort: Porta (UDP) sulla quale il Server Wireguard sarà in ascolto
- PublicKey: Chiave pubblica del peer(Mikrotik), che si trova nel file /etc/wireguard/mikrotik_public.key
- AllowedIPs: è l’indirizzo IP del client all’interno della rete VPN
Cambiamo i permessi dei file in modo tale da concedere solamente all’utente root la lettura del contenuto
chmod 600 /etc/wireguard/ -R
Abilitiamo l’IP Forwarding nel Server Wireguard
Apriamo il file /etc/default/ufw e impostiamo la policy di default relativa al Forward in ACCEPT.
nano /etc/default/ufw
Trovare la voce DEFAULT_FORWARD_POLICY="DROP"
e modificarla in DEFAULT_FORWARD_POLICY="ACCEPT"
Salviamo e chiudiamo il file
Modifichiamo il file /etc/sysctl.conf
nano /etc/sysctl.conf
Alla fine del file inseriamo
net.ipv4.ip_forward = 1
Salviamo il file e diamo il comando sotto per rendere effettive le modifiche
sysctl -p
Configuriamo il NAT sul Server
Abbiamo ora bisogno di impostare il NAT sul firewall del nostro Server per effettuare il masquerade del traffico proveniente dalla subnet assegnata all’interfaccia Wireguard.
Useremo UFW, un front end di iptables firewall. (se vuoi approfondire iptables, leggi questa guida by foisfabio.it)
Installiamo UFW con il comando
apt install ufw
permettiamo il traffico SSH
sudo ufw allow 22/tcp
Verifichiamo ora il nome della nostra scheda di rete
ip addr

Nel mio caso la scheda di rete si chiama eth0.
Per configurare il masquerade del traffico proveniente dai peer Wireguard, dobbiamo aggiungere delle regole iptables nel file di configurazione di UFW.
Apriamo il file con
nano /etc/ufw/before.rules
dentro ci saranno già delle regole di default, rechiamoci alla fine del file dopo la voce COMMIT, ed aggiungiamo le righe sotto sostituendo eth0 con in nome della propria interfaccia di rete
# # NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT
Di default, UFW blocca il forward dei pacchetti, occorre quindi abilitarlo per il traffico proveniente dalla subnet 172.18.18.0/24 che abbiamo assegnato al tunnel Wireguard.
Cerca la catena ufw-before-forward ed aggiungi le tre linee sotto
# allow forwarding for trusted network
-A ufw-before-forward -s 172.18.18.0/24 -j ACCEPT
-A ufw-before-forward -d 172.18.18.0/24 -j ACCEPT

Salviamo e chiudiamo il file.
Abilitiamo UFW
Attenzione
Prima di abilitare UFW, inserite le eccezioni per i servizi che devono essere raggiunti sul server, es. Webserver(porta 443), OpenVPN(1194), Telnet(23)
ufw enable
Apriamo la porta di WireGuard Server sul Firewall
Diamo il comando sotto per per aprire la porta di Wireguard Server 51828 sul Firewall
ufw allow 51828/udp
Avviamo WireGuard
Abilitiamo l’avvio automatico del server Wireguard all’avvio del sistema
systemctl enable [email protected]
Avviamo ora il servzio
systemctl start [email protected]
Comandi utili
Per fermare il server usare il comando
wg-quick down /etc/wireguard/wg0.conf
Per avviare il server
wg-quick up /etc/wireguard/wg0.conf
Configurazione peer Mikrotik in full-tunnel
Configurazione interfaccia Wireguard
Configuriamo ora il router Mikrotik come peer Wireguard. Creiamo per prima l’interfaccia Wireguard.
Andiamo sul menù Wireguard –> Wireguard e poi clicchiamo su “+”
Configuriamo l’interfaccia in questo modo:
- Name: wg-debian
- Listen Port: 51828 (la porta di ascolto può essere diversa da quella impostata sul server)
- Private Key: Chiave privata del peer Mikrotik, generata precedentemente sul server. Per vedere la chiave, digitare nel terminale del server Wireguard cat /etc/wireguard/mikrotik_private.key
- cliccare su Apply e poi su OK

Aggiunta peer Wireguard Mikrotik
Andiamo sul menù Wireguard –> Peers e poi clicchiamo su “+”
Configuriamo il peer in questo modo:
- Interface: wg-debian
- Public Key: Chiave pubblica del server Wireguard, generata precedentemente. Per vedere la chiave digitare nel terminale del server Wireguard cat /etc/wireguard/server_public.key
- Endpoint: IP Pubblico del nostro VPS
- Endpoint Port: 51828 (la porta di ascolto del servzio Wireguard sul server Debian)
- Allowed Address: 0.0.0.0/0 per consentire di far passare tutto il traffico dal tunnel Wireguard
- Persistent Keepalive: 00:00:25
- cliccare su Apply e poi su OK

Assegnazione IP all’interfaccia Wireguard
Andiamo in IP –> Addresses e clicchiamo su “+”
Compiliamo come segue:
- Address: 172.18.18.2/24
- Network: 172.18.18.0
- Interface: wg-debian
- cliccare su Apply e poi su OK

Creazione tabella di routing
Creiamo ora una tabella di routing. Andiamo in Routing –> Tables e clicchiamo su “+”
Popoliamo i campi come segue:
- Name: to_wg_debian
- spuntare la check box FIB
- cliccare su Apply e poi su OK

Regola di routing
Creiamo ora una routing rule per instradare tutto il traffico sorgente della LAN del Mikrotik sulla tabella di routing apposita
Andiamo in Routing–>Rules e clicchiamo su “+”
Inseriamo i paramentri:
- Src. Address: 192.168.150.0/24
- Dst. Address: 0.0.0.0/0
- Action: lookup only in table
- Table: to_wg_debian
- cliccare su Apply e poi su OK

Creazione rotta statica
Aggiungiamo ora una rotta statica per instradare il traffico verso la nuova tabella di routing .
Andiamo in IP –> Routes e clicchiamo su “+”
Impostiamo la nuova rotta come segue:
- General
- Dst. Address: 0.0.0.0/0
- Gateway: 172.18.18.1
- Routing Table: to_wg_debian
- cliccare su Apply e poi su OK

Creazione regola di NAT
Dobbiamo adesso creare una regola di NAT per permettere al traffico generato dalla LAN di uscire tramite l’interfaccia Wireguard.
Andiamo in IP –> Firewall –> NAT e clicchiamo su “+”
Aggiungiamo una regola con questi paramentri:
- General
- Chain: srcnat
- Out.Interface: wg-debian
- Action
- Action: masquerade
- cliccare su Apply e poi su OK
Una volta creata la regola di masquerade, assicurarsi che questa sia posizionata in cima, sopra ad altre eventuali regole di NAT



Verifica tunnel Wireguard Server
Se la configurazione è stata eseguita correttamente dovremmo riuscire a
- raggiungere il server Wireguard sull’IP 172.18.18.1
- raggiungere il server Wireguard sull’IP 172.18.18.1 da sorgente la LAN del Mikrotik 192.168.150.1
- navigare su Internet facendo passare il traffico tramite il nostro VPS e quindi presentarci su Internet con l’IP Pubblico del nostro Server Wireguard



Ciao Anrea,
thank you for the this informative post.
I need to do almost the same, but provide WG connection to only one host inside my network.
I have followed your steps, and only modified Routing rule. Setting my Src Address to the host’s IP.
But after everything is enabled, i loose access to my mikrotik router and no internet.
What should i check?
thank you
Hi,
thanks to you for the comment.
Could you post the routing configuration part, including routing tables and rules?
Thanks
/routing table
add disabled=yes fib name=to_wg_dallas
/routing rule
add action=lookup-only-in-table disabled=yes dst-address=0.0.0.0/0 \
src-address=10.0.10.22/24 table=to_wg
10.0.10.22/24 – ip of the internal host that want to use wg
Hi,
I see that the routing table and the routing rule are disabled.
Try to enable them and in the routing rule use as src-add 10.0.10.22/32
Also, have you created in IP –> Routes the route 0.0.0.0/0 with Gateway the VPS VPN IP and as routing table to_wg_dallas ?
I forgot to mention, that i disabled them, as it would block my access to router. I made correction to src-address, as you suggested.
This is updated config. Now i see it connecting to WG, but host cannot connect to internet. Still, a big progress 🙂
/routing table
add disabled=no fib name=to_wg_dallas
/routing rule
add action=lookup-only-in-table disabled=no dst-address=0.0.0.0/0 \
src-address=10.0.10.22/32 table=to_wg_dallas
/ip route
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.0.0.1 \
routing-table=to_wg_dallas scope=30 suppress-hw-offload=no target-scope=\
10
If you connect to the VPS with a wireguard linux or Windows client, can you navigate with the VPS IP?
Have you created the masquerade rule with src-add 10.0. 10.0/24 and out interface your Wireguard interface?
Config itself work, no problem. tested on Windows client.
I did add NAT masquerade, but did not enter Src-address.
Does it have to be whole subnet 10.0.10.0/24 or just my host 10.0.10.22/32 ?
Also, i can see on wg server, that connection is made. so, i guess problem in routing
You can use 10.0.10.22/32 in src-add for masquerading rule.
If the problem persist, send me full export config by email
i tried and same results.
I’ve exported whole config and cleaned it. I sent you a message using your Contact form. What is the best way to send you file?