WireGuard da zero: guida completa per configurare il tuo router (OpenWrt, road-warrior e site-to-site)

WireGuard da zero: guida completa per configurare il tuo router (OpenWrt, road-warrior e site-to-site)

Questa guida ti porta da zero a VPN funzionante anche se è la prima volta che ci provi. Faremo prima lo scenario road-warrior (telefono/PC → casa) e poi site-to-site (due reti collegate tra loro). Alla fine trovi troubleshooting e ottimizzazioni.

Cos’è WireGuard (in breve)

  • VPN moderna, veloce e semplice.
  • Ogni peer ha una coppia chiave privata/pubblica.
  • Gli accessi si definiscono con AllowedIPs (gli IP/route permessi).

Prerequisiti

  • Router con OpenWrt o firmware che supporta WireGuard.
  • Port-forward UDP 51820 dal modem verso il router.
  • IP pubblico o DDNS configurato.

Se ti serve hardware economico pronto alla VPN: 🛒
cerca “router wireguard wifi 6”.


1) Installazione su OpenWrt

Da LuCI: Sistema → Software → aggiorna elenco → installa luci-app-wireguard e wireguard-tools.

opkg update
opkg install luci-app-wireguard wireguard-tools

2) Genera le chiavi del server

umask 077
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key

3) Road-warrior (telefono/PC → casa)

3.1 Interfaccia wg0 (server)

uci set network.wg0="interface"
uci set network.wg0.proto="wireguard"
uci set network.wg0.private_key="$(cat /etc/wireguard/server_private.key)"
uci set network.wg0.listen_port="51820"
uci add_list network.wg0.addresses="10.8.0.1/24"
uci commit network && /etc/init.d/network restart

3.2 Firewall

uci add firewall zone
uci set firewall.@zone[-1].name="wgzone"
uci set firewall.@zone[-1].input="ACCEPT"
uci set firewall.@zone[-1].output="ACCEPT"
uci set firewall.@zone[-1].forward="ACCEPT"
uci add_list firewall.@zone[-1].network="wg0"

uci add firewall forwarding; uci set firewall.@forwarding[-1].src="lan";    uci set firewall.@forwarding[-1].dest="wgzone"
uci add firewall forwarding; uci set firewall.@forwarding[-1].src="wgzone"; uci set firewall.@forwarding[-1].dest="lan"

uci add firewall rule
uci set firewall.@rule[-1].name="Allow-WireGuard"
uci set firewall.@rule[-1].src="wan"
uci set firewall.@rule[-1].dest_port="51820"
uci set firewall.@rule[-1].proto="udp"
uci set firewall.@rule[-1].target="ACCEPT"

uci commit firewall && /etc/init.d/firewall restart

3.3 Peer telefono (IP 10.8.0.2)

  1. Nell’app WireGuard del telefono crea un profilo (ti dà chiave pubblica).
  2. Sul router aggiungi il peer:
uci add network wg0
uci set network.@wireguard_wg0[-1].public_key="<CHIAVE_PUBBLICA_TELEFONO>"
uci set network.@wireguard_wg0[-1].description="iphone-di-mario"
uci add_list network.@wireguard_wg0[-1].allowed_ips="10.8.0.2/32"
uci commit network && /etc/init.d/network restart

Config lato telefono (esempio):

[Interface]
PrivateKey = <PRIVATA_TELEFONO>
Address    = 10.8.0.2/32
DNS        = 10.8.0.1

[Peer]
PublicKey  = <PUBBLICA_ROUTER>
Endpoint   = tuo-ddns.esempio.it:51820
AllowedIPs = 192.168.1.0/24
PersistentKeepalive = 25

Per instradare tutto il traffico nella VPN usa: AllowedIPs = 0.0.0.0/0, ::/0.

3.4 Test e debug

  • Con app attiva raggiungi http://192.168.1.1?
  • Su router wg show: i bytes RX/TX del peer crescono?
  • Problemi tipici: DDNS errato, porta non inoltrata, MTU alta (prova 1420).

4) Site-to-site (A ↔ B)

Esempio: A=LAN 192.168.1.0/24 (wg0=10.9.0.1/24) – B=LAN 192.168.2.0/24 (wg0=10.9.0.2/24).

A:

uci set network.wg0="interface"
uci set network.wg0.proto="wireguard"
uci set network.wg0.private_key="$(cat /etc/wireguard/server_private.key)"
uci set network.wg0.listen_port="51820"
uci add_list network.wg0.addresses="10.9.0.1/24"

uci add network wg0
uci set network.@wireguard_wg0[-1].public_key="<PUBBLICA_B>"
uci add_list network.@wireguard_wg0[-1].allowed_ips="10.9.0.2/32"
uci add_list network.@wireguard_wg0[-1].allowed_ips="192.168.2.0/24"
uci commit network && /etc/init.d/network restart

B:

uci set network.wg0="interface"
uci set network.wg0.proto="wireguard"
uci set network.wg0.private_key="<PRIVATA_B>"
uci add_list network.wg0.addresses="10.9.0.2/24"

uci add network wg0
uci set network.@wireguard_wg0[-1].public_key="<PUBBLICA_A>"
uci set network.@wireguard_wg0[-1].endpoint_host="ddns-a.esempio.it"
uci set network.@wireguard_wg0[-1].endpoint_port="51820"
uci add_list network.@wireguard_wg0[-1].allowed_ips="10.9.0.1/32"
uci add_list network.@wireguard_wg0[-1].allowed_ips="192.168.1.0/24"
uci set network.@wireguard_wg0[-1].persistent_keepalive="25"
uci commit network && /etc/init.d/network restart

5) Ottimizzazioni

  • MTU 1420 se NAT multipli o roaming mobile.
  • PBR (policy based routing) con luci-app-pbr per dev/host selettivi.
  • DNS locale via 10.8.0.1.
Torna in alto