Francesco Runci
PhD | Security Researcher | Cyber Observer | IT Security | Programmer | Drone Pilot

Wireguard & RaspBerry w 0 il connubio perfetto.

Mi tocca precisare prima di continuare che il dispositivo che sto andando ad esporvi per la creazione, è in una qualche forma già esistente col nome di gl.inet – troverete altre informazioni qui

Partiamo dal WireGuard (WikiPedia):

WireGuard è un programmaopen-source e un protocollo che implementa la tecnica della virtual private network (VPN) per creare connessioni sicure punto-punto in configurazione routed o bridged. Viene eseguito come modulo nel kernel linux e punta ad avere prestazioni migliori rispetto ad IPsec e OpenVPN.

Da test effettuati che vi riporto effettivamente il WireGuard è nettamente più veloce, sia in termini di latenza di linea che per quanto riguarda le linee di codice utilizzate per implementarlo. Vi mostro un esempio. Oltre che è facilmente controllabile per via di un codice molto snello.

Associazione punto punto alla rete:

Ma il bello qual’è? che questa nuova VPN veloce e riutilizzabile è usufruibile attraverso qualsiasi dispositivo: per me invece sarà un passettino un pò più complesso; verrà utilizzato su un dispositivo portatile così da avere una connessione protetta ovunque io voglia.

Siamo quasi pronti:

Entrati nella piccola RaspBerry aggiornamo il software.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get install wireguard-dkms wireguard-tools

Adesso dobbiamo creare le chiavi Privata e Pubblica per la connessione

Umask 077
wg genkey | tee server_private_key | wg pubkey > server_public_key
wg genkey | tee client_private_key | wg pubkey > client_public_key

Dopo aver ottenuto la nostra chiave modifichiamo sudo nano /etc/wireguard/wg0.confed aggiungiamo:

[Interface]
Address = 10.0.0.1/24
SaveConfig = true
PrivateKey = <insert server_private_key>
ListenPort = 51820

[Peer]
PublicKey = <insert client_public_key>
AllowedIPs = 10.0.0.2/32

Usciamo con ctrl+x e diamogli un yes. Avviamo il nostro servizio al boot:

wg-quick up wg0
systemctl enable wg-quick@wg0

Controlliamo se tutto è andato a buon fine:

wg show
ifconfig wg0

E dovrebbe apparire una cosa simile:

root@iron:~# sudo wg
interface: wg0
  public key: mia chiave pubblica
  private key: (hidden)
  listening port: 51820
root@iron:~# 

Facciamo le configurazioni del firewall necessarie su /etc/sysctl.conf:

Togliamo il cancelletto da:

net.ipv4.ip_forward=1

Poi…

sysctl -p
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT -p udp -m udp --dport 51820 -m conntrack --ctstate NEW -j ACCEPT

iptables -A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT

iptables -A FORWARD -i wg0 -o wg0 -m conntrack --ctstate NEW -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

apt-get install iptables-persistent
systemctl enable netfilter-persistent
netfilter-persistent save

Bene non ci resta che configurare la parte client:

Il tutto sta nel configurare un .conf con le informazioni necessarie per lo scambio di dati.

Esistono diversi tool per effettuare la connessione su tutti i sistemi operativi vi mostro qualche esempio:

Android: Wireguard | Windows – Apple – Linux: TunSafe |

Andiamo a modificare il file /etc/wireguard/wg0.conf dove all’interno inseriremo:

[Interface]
Address = 10.0.0.2/32
PrivateKey = <insert client_private_key>
DNS = 10.0.0.1

[Peer]
PublicKey = <insert server_public_key>
Endpoint = <insert vpn_server_address>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 21

Abilitiamo sul nostro client il wireguard con il conf appena creato.

wg-quick up wg0
systemctl enable wg-quick@wg0

Collegiamoci adesso alla nostra rete e testiamo la connessione e il relativo indirizzo IP.

Così facendo abbiamo ottenuto una bella VPN su wireguard, ma se questa non è installata su server remoto ben poco abbiamo concluso.

Pertanto vi consiglio di utilizzare questa VPN server su RaspBerry su una connessione pubblica tanto da avere una VPN (veloce e con IP stealth) sempre anonima.

Vi ricordo che per navigare completamente anonimi bisogna anche modificare il Webrct su Firefox seguendo questo piccolo accorgimento:

Apri una nuova finestra e digita:

about:config

nel browser cerca:

media.peerconnection.enabled 

e da true passa il valore in false con doppio click

Non dimenicate di fare un test per il leak.

http://dnsleak.com/.

Bene adesso abbiamo completamente terminato, se tutto è andato a buon fine sarete al sicuro dal disseminare i vostri dati online durante la navigazione.

Share

You may also like...

3 Responses

  1. Alessandro says:

    Ciao sai per caso come progettare un server VPN per poter connettere una rete di dispositivi IoT tramite Wireguard? Quello che mi preoccupa è il load balancing e high availability soprattutto.
    Grazie

    • admin says:

      Ciao ale, mai fatto ma non dovrebbe essere molto difficoltoso, per quanto riguarda il carico rispetto ad un openvpn è molto più veloce e performante, vai tranquillo. Fammi sapere se fai dei test cosa ne pensi..

Leave a Reply

Your email address will not be published. Required fields are marked *