PDA

View Full Version : [Guida] [Wireguard] Come ottenere un IP pubblico con qualsiasi connessione 3G/4G


OUTATIME
08-02-2023, 12:55
Il contenuto di questo post è rilasciato con licenza Creative Commons Attribution-Noncommercial-Share Alike 2.5
http://creativecommons.org/licenses/by-nc-sa/2.5/it/

Changelog:
1.0.0 Release Iniziale

Come tutti sappiamo, già da tempo gli operatori hanno smesso di fornire IP pubblici sulle sim dei telefoni cellulari. Questa guida ha il duplice scopo di ottenere un IP pubblico su linee 3G/4G da utilizzare per i dispositivi interni e/o accedere dall'esterno alla propria rete LAN. A differenza della mia precedente guida, mi è stato più volte chiesto di sviluppare una guida specifica per Wireguard, più performante rispetto a OpenVPN.

Cosa serve:
- Connessione 3G/4G correttamente configurata e funzionante.
- Dispositivo Linux (Raspberry o PC) correttamente installato con un'interfaccia avente IP statico e come default gateway la connessione 3G/4G.
- Dispositivo Linux correttamente installato con un'interfaccia avente IP pubblico (VPS o altra connessione con IP pubblico di cui si è legittimi fruitori. Ricordo che la condivisione di connessioni internet è illegale).

NOTE
- Ho saltato la parte di configurazione dei dispositivi Linux: partiamo dal presupposto che siano correttamente funzionanti. Se avete bisogno, in rete c'è ampia documentazione o potete chiedere a me, ma in ogni caso esula dallo scopo di questa guida.
- Per gestire il traffico uscente, nel caso si voglia tunnelizzare il traffico attrverso la VPN, serve implementare il routing sul Raspberry/PC in modo che faccia da gateway per tutta la propria rete. Ad oggi questa parte di configurazione non l'ho ancora implementata, quindi sulla release attuale non la troverete. Non escludo di inserirla, tempo permettendo, in futuro. L'alternativa per il momento è installare un client VPN su ogni dispositivo che necessiti di utilizzare l'IP pubblico.

Capitolo 1: Installazione Server

A differenza di OpenVPN ove esiste il concetto client/server, con Wireguard ci sono solo peer, quindi la configurazione è praticamente analoga su client e su server. Faremo comunque la distinzione, poi capirete perchè.

1) Installate Wireguard:
apt install wireguard

2) Generate le chiavi:
wg genkey > private

3) A questo punto leggete la chiave privata e la copio:
cat private

4) Fate la stessa cosa con la chiave pubblica:
wg pubkey < private

5) Editate il file di configurazione:
nano /etc/wireguard/wg0.conf
Come segue:
[Interface]
Address = 10.6.0.1/24
ListenPort = 40115
PrivateKey = ************************************

[Peer]
PublicKey = ***********************************
AllowedIPs = 10.6.0.10/32

Spiegazione: la sezione Interface è relativa all'interfaccia wg0 del server, l'indirizzo e la porta di connessione possono ovviamente essere cambiati a piacimento, la stringa PrivateKey va compliata con la chiave privata generata in precedenza. La sezione peer va compliata con la chiave pubblica e l'IP del client (una volta generati).


Capitolo 2: Installazione Client

Il client dev'essere installato come il server, a differenza della configurazione, quindi seguo gli stessi passi dall'1 al 4 del precedente capitolo, per il client procedo a configurarlo come segue:


[Interface]
Address = 10.6.0.10/24
PrivateKey = *************************************
DNS = 8.8.8.8, 8.8.4.4

[Peer]
PublicKey = *************************************
AllowedIPs = 10.6.0.1/0
Endpoint = ***.***.***.***:40115
PersistentKeepalive = 60


Avete notato che il client si differenzia dal server per la stringa Endpoint e Keepalive? Ma come? Non avevamo detto che Wireguard segue il concetto di peer e non di client/server? Vero, ma mettere la stringa Endpoint sul server è impossibile, perchè il client è dietro il NAT dell'operatore telefonico, quindi la connessione dovrà sempre e comunque essere iniziata dal client, e di conseguenza gli serve avere un keepalive (espresso in secondi) per mantenere attiva la connessione.

A questo punto potete andare (se non l'avete già fatto) a completare la configurazione del server con la chiave pubblica del client.

Avviate il servizio sul server:
systemctl start wg-quick@wg0
Abilitate l'avvio automatico:
systemctl enable wg-quick@wg0.service

E infine fate la stessa cosa sul client.

Se tutto è stato eseguito correttamente, lanciando il seguente comando:

wg show


Dovreste vedere il seguente risultato
interface: wg0
public key: ******************************
private key: (hidden)
listening port: 40115

peer: *************************
endpoint: ***.***.***.***:64014
allowed ips: 10.6.0.10/32
latest handshake: Now
transfer: 2.16 MiB received, 5.78 MiB sent

A questo punto la configurazione di Wireguard è completa. Integrerò ulteriormente la guida con iptables, ma è la stessa che ho pubblicato per OpenVPN, cambia solo il nome dell'interfaccia, quindi se non volete aspettare, vi rimando a quella già completata:
https://hwupgrade.it/forum/showthread.php?t=2880131

OUTATIME
08-02-2023, 12:55
1 *** Riservato ***

OUTATIME
08-02-2023, 12:56
2 *** Riservato ***

misterbat
19-02-2023, 10:19
Guida molto interessante...
Mi domando...qualora sul PC Win (configurato come client e unico della rete a necessitare dell' accesso da remoto trovandosi sotto cgnat dell'ISP Vodafone) vi fosse la necessità di risvegliarlo da sospensione o ibernazione con WOL, esiste il modo?
E' sufficiente il timing del keepalive, a causa del quale non andrà in sospensione?

Ultima domanda...
Sul PC client è possibile mantenere il traffico in uscita diretto su web (fornito dall'ISP, Vodafone in questo caso) e utilizzare l'ip pubblico ottenuto da propria VPS (Ubuntu) solo per le connessioni in entrata (ovvero, da remoto)?
:ave: :ave:

OUTATIME
19-02-2023, 16:39
Guida molto interessante...
Mi domando...qualora sul PC Win (configurato come client e unico della rete a necessitare dell' accesso da remoto trovandosi sotto cgnat dell'ISP Vodafone) vi fosse la necessità di risvegliarlo da sospensione o ibernazione con WOL, esiste il modo?
E' sufficiente il timing del keepalive, a causa del quale non andrà in sospensione?
Allora, faccio due premesse:
- Il wake on LAN vero funziona inviando il magic packet in broadcast su tutta la rete, il funzionamento "monco" del fidarsi della tabella ARP del router non lo prendo neppure in considerazione, di conseguenza la prima è l'unica configurazione che ritengo veramente funzionante.
- Non ho capito se per "client da risvegliare" intendi un client su cui è installato wireguard, in questo caso la risposta è no: wireguard è un'applicazione a livello di sistema operativo. Spento il PC, spenta la connessione Wireguard. Quello che chiedi è possibile solamente se sulla rete è presente un client tipo Raspberry sempre acceso con la connessione Wireguard attiva.

Ultima domanda...
Sul PC client è possibile mantenere il traffico in uscita diretto su web (fornito dall'ISP, Vodafone in questo caso) e utilizzare l'ip pubblico ottenuto da propria VPS (Ubuntu) solo per le connessioni in entrata (ovvero, da remoto)?
:ave: :ave:
Come sopra: certamente, SE la connessione Wireguard è creata da un dispositivo terzo come un Raspberry.

misterbat
19-02-2023, 17:50
Come immaginavo…
E che ne dici di collegare in cascata (solo al pc di cui ho bisogno di connettermi da remoto, trovandomi sotto cgnat) un router gl.inet?
Riuscirebbe a svolgere, una volta impostato come client wireguard, la funzione da mini-server?
Sarebbe in grado di far lanciare i magic packet per risvegliare i pc in lan?

OUTATIME
20-02-2023, 08:51
Come immaginavo…
E che ne dici di collegare in cascata (solo al pc di cui ho bisogno di connettermi da remoto, trovandomi sotto cgnat) un router gl.inet?
Riuscirebbe a svolgere, una volta impostato come client wireguard, la funzione da mini-server?
Sarebbe in grado di far lanciare i magic packet per risvegliare i pc in lan?

Non li conosco direttamente come prodotti, ma da quello che leggo hanno installato openwrt, quindi direi di si senza problemi, installando il software etherwake sul router, ma dovrebbe essere possibile anche installandolo sul vps.
In alternativa, se non hai già l'hardware, posso fare le prove su un Edgerouter x di Ubiquiti, e su quello posso darti una mano in tempo reale.

misterbat
20-02-2023, 10:04
Ho già un gl.inet 300N, ancora inscatolato.
Preso qualche tempo fa per dei test, ma mai usato.
Vorrei fare il modo di raggiungere un pc e un mac della lan (connessa a router con Vodafone) da remoto, risvegliandoli all’occorrenza (per evitare di lasciarli accesi h24). Ho VPS Ubuntu…
Il progetto sarebbe questo…

OUTATIME
20-02-2023, 10:06
Ok, inizia con il configurare la connessione wireguard funzionante, poi vediamo le configurazioni iptables.

misterbat
20-02-2023, 10:22
Ok, inizia con il configurare la connessione wireguard funzionante, poi vediamo le configurazioni iptables.

Perfetto

misterbat
20-02-2023, 22:55
Ok, inizia con il configurare la connessione wireguard funzionante, poi vediamo le configurazioni iptables.

Parli di configurare wireguard server sulla VPS?

OUTATIME
21-02-2023, 10:49
Parli di configurare wireguard server sulla VPS?
Su entrambi i dispositivi. Sul VPS Ubuntu essendo una derivata Debian vanno bene i comandi che ti ho scritto sopra.
Per quanto riguarda OpenWRT ha dei comandi differenti, quindi su quello non so aiutarti.
Quello che dobbiamo arrivare ad ottenere è che dal VPS pinghi l'IP dell'interfaccia wg0 del router e viceversa.

misterbat
21-02-2023, 10:52
Su entrambi i dispositivi. Sul VPS Ubuntu essendo una derivata Debian vanno bene i comandi che ti ho scritto sopra.
Per quanto riguarda OpenWRT ha dei comandi differenti, quindi su quello non so aiutarti.
Quello che dobbiamo arrivare ad ottenere è che dal VPS pinghi l'IP dell'interfaccia wg0 del router e viceversa.

Ok. In serata dovrei essere in grado di procedere e ti aggiorno.

misterbat
22-02-2023, 17:07
Niente da fare....
A parte che ho problemi a collegare gl.inet al mio router fritzbox (con porta wan), ma anche settandolo come repeater (e con accesso alla rete) non riesco a connettermi con wireguard.
Sbaglio cnte qualcosa.
Ad esempio, non capisco nella tua guida, se le chiavi (private e pubbliche) tra server e peer siano le stesse...
EDIT: Sono riuscito. Su VPS Oracle le IPtable non bastano, bisogna aprire le porte dal pannello amministratore.
Ok. Ora ho il gl.net configurato correttamente per l'accesso alla VPS attraverso wireguard.

OUTATIME
24-02-2023, 08:53
Niente da fare....
A parte che ho problemi a collegare gl.inet al mio router fritzbox (con porta wan), ma anche settandolo come repeater (e con accesso alla rete) non riesco a connettermi con wireguard.
Sbaglio cnte qualcosa.
Ad esempio, non capisco nella tua guida, se le chiavi (private e pubbliche) tra server e peer siano le stesse...
EDIT: Sono riuscito. Su VPS Oracle le IPtable non bastano, bisogna aprire le porte dal pannello amministratore.
Ok. Ora ho il gl.net configurato correttamente per l'accesso alla VPS attraverso wireguard.
Ok, a questo punto verifica se è possibile installare etherwake sul gl.inet.
Se non lo fosse, installalo sul VPS e poi bisogna sperare che il gl.inet consenta il forward dei pacchetti all'indirizzo di broadcast.

misterbat
26-02-2023, 21:36
Prima devo risolvere un problema.
Wireguard tunnel funziona correttamente, ma non riesco a pingare la LAN del peer (per la VPS non mi interessa).
Credo sia un problema di iptables sul gl.inet...

OUTATIME
27-02-2023, 11:35
Prima devo risolvere un problema.
Wireguard tunnel funziona correttamente, ma non riesco a pingare la LAN del peer (per la VPS non mi interessa).
Credo sia un problema di iptables sul gl.inet...

Certamente.
Per questo ti avevo chiesto se era possibile installare etherwake sul router, in modo da evitare di mettere mano all'iptables ;)

Romariolele
26-09-2023, 10:29
Ciao cerco di configurare wireguard (VPS server ubuntu 22.04) e windows 11
Dove sbaglio?
questa la vps


https://ibb.co/Q8yhCDN

e questo il client


https://ibb.co/KGgXWSf

e dal client continuo ad uscire con IP internet della connessione e non con quello della vps

OUTATIME
26-09-2023, 17:26
Ciao cerco di configurare wireguard (VPS server ubuntu 22.04) e windows 11
Dove sbaglio?
questa la vps


https://ibb.co/Q8yhCDN

e questo il client


https://ibb.co/KGgXWSf

e dal client continuo ad uscire con IP internet della connessione e non con quello della vps
Non sta andando la VPN, lo vedi dai zero byte ricevuti sul PC. Hai fatto anche la parte di iptables?