Debian Wireguard Server – Mikrotik Full-Tunnel

debian wg server
5
(2)

In questo articolo affronteremo la configurazione di Wireguard Server su un VPS Debian 11 e la configurazione full-tunnel di un peer Mikrotik.

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 wg-quick@wg0.service

Avviamo ora il servzio

systemctl start wg-quick@wg0.service

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

  1. raggiungere il server Wireguard sull’IP 172.18.18.1
  2. raggiungere il server Wireguard sull’IP 172.18.18.1 da sorgente la LAN del Mikrotik 192.168.150.1
  3. navigare su Internet facendo passare il traffico tramite il nostro VPS e quindi presentarci su Internet con l’IP Pubblico del nostro Server Wireguard

Se l’articolo Debian Wireguard Server – Mikrotik full-tunnel è stato di tuo gradimento esprimi il tuo voto

Per non perderti i nuovi post entra nel canale Telegram e WhatsApp

Se riscontri errori nell’articolo segnalalo tramite il modulo Contatti

Ti è stato utile questo post?

Clicca sulla stella per votare!

Voto medio 5 / 5. Numero voti: 2

Nessun voto finora! Sii il primo a valutare questo post.

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

10 commenti su “Debian Wireguard Server – Mikrotik Full-Tunnel

  1. emil Rispondi

    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

      • Emil Rispondi

        /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

        • Andrea Caracciolo Autore articoloRispondi

          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 ?

          • Emil

            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

          • Andrea Caracciolo Autore articolo

            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?

  2. emil Rispondi

    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 ?

        • Emil Rispondi

          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?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *