Server VPN dietro NAT con port forwarding UDP

Un paio di settimane fa vi ho parlato di come installare WireGuard su un raspberry, a distanza di pochi giorni la situazione è cambiata e non è più stato possibile raggiungere direttamente il raspberry con un port-forward dal router, dato che il router stesso aveva un IP privato di una rete Ho.

Fortunatamente ho una serie di VPS onLine e mi sono appoggiato ad uno di questi per pubblicare la porta di WireGuard tramite SSH Port Forwarding, ma in questo caso la cosa non è stata immediata, perché WireGuard funziona in UDP mentre SSH fa il Port Forwarding di connessioni TCP.

Beh, allora l’unica cosa da fare era veicolare i pacchetti UDP sulla connessione TCP che SSH, tramite Port Forwarding, metteva a disposizione. Passiamo al dunque.

Intanto ho bisogno di autossh sul raspberry che installiamo con:

apt install autossh

e socat sia sul raspberry che sul VPS:

apt install socat

Sul raspberry (Wireguard Server) ho inserito queste due righe nel file /etc/rc.local (in modo da avviare automaticamente al reboot):

autossh -2 -fN -M 20001 -R 51821:localhost:51821 user@ip_del_vps
socat tcp4-listen:51821,reuseaddr,fork udp:localhost:51820

Sul VPS (con IP pubblico) ho inserito questa riga nel file /etc/rc.local:

socat -T15 udp4-recvfrom:51820,reuseaddr,fork tcp:localhost:51821

ecco fatto… Ora, effettuando la connessione dal client Wireguard verso l’IP del server VPS su porta 51820/UDP, i pacchetti vengono inoltrati da socat verso la porta 51821/TCP dove in ascolto c’è la connessione SSH, per il Port-Forwarding, avviata dal Raspberry sul quale abbiamo nuovamente socat che rigira i pacchetti dalla porta 51821/TCP verso la porta 51820/UCP dove è in ascolto il servizio VPN WireGuard.

Nota:

Sui sistemi Debian Based recenti (con systemd) è necessario riattivare l’esecuzione di rc.local al riavvio. C’è già il file systemd in /lib/systemd/system/rc-local.service dove aggiungeremo la sezione [Install] alla fine:

[Install]
WantedBy=multi-user.target

Poi creiamo il file rc.local:

>/etc/rc.local
chmod +x /etc/rc.local

in cui scriviamo

#!/bin/sh -e
#
# rc.local
#
#inserire di seguito le istruzioni


exit 0

infine attiviamo il servizio:

systemctl enable rc-local.service
systemctl start rc-local.service

enjoy!

Ti interessa acquistare un dominio a prezzi ultraconvenienti? clicca qui

Se hai trovato utili le informazioni su questo blog,
Fai una donazione!
Clicca sul bottone qui sotto o almeno clicca sul banner pubblicitario 🙂



Commenta