Configureu una VPN senzilla amb WireGuard i Raspberry Pi com a servidor

Des de WireGuard formar part de del futur nucli Linux 5.6, vaig decidir veure com integrar millor aquesta VPN amb la meva Encaminador/punt d'accés LTE a Raspberry Pi.

Оборудование

  • Raspberry Pi 3 amb mòdul LTE i IP pública. Hi haurà un servidor VPN (d'ara endavant anomenat caminador de vora)
  • Un telèfon Android que ha d'utilitzar una VPN per a totes les comunicacions
  • Portàtil Linux que només necessita utilitzar VPN dins de la xarxa

Tots els dispositius que es connecten a una VPN han de poder connectar-se a tots els altres dispositius. Per exemple, un telèfon hauria de poder connectar-se a un servidor web en un ordinador portàtil si tots dos dispositius formen part d'una xarxa VPN. Si la configuració és prou senzilla, podeu pensar en connectar-vos a una VPN i un escriptori (mitjançant Ethernet).

Tenint en compte que les connexions per cable i sense fil són cada cop menys segures amb el temps (atacs dirigits, Atac de pirateria KRACK WPA2 и Atac Dragonblood contra WPA3), estic considerant seriosament utilitzar WireGuard per a tots els meus dispositius, independentment de l'entorn en què es trobin.

Instal·lació de programari

WireGuard ofereix paquets precompilats per a la majoria de distribucions de Linux, Windows i macOS. Les aplicacions per a Android i iOS es lliuren mitjançant catàlegs d'aplicacions.

Tinc l'últim Fedora Linux 31 i em feia mandra llegir el manual abans d'instal·lar-lo. Acabo de trobar els paquets wireguard-tools, els va instal·lar i després no va poder esbrinar per què no funcionava res. Una investigació posterior va revelar que no tenia el paquet instal·lat wireguard-dkms (amb un controlador de xarxa), i no estava al repositori de la meva distribució.

Si hagués llegit les instruccions, hauria fet els passos correctes:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

Tinc la distribució Raspbian Buster instal·lada al meu Raspberry Pi, ja hi ha un paquet wireguard, instal·leu-lo:

$ sudo apt install wireguard

He instal·lat l'aplicació al meu telèfon Android WireGuard VPN del catàleg oficial de Google App Store.

Instal·lació de claus

Per autenticar nodes, Wireguard utilitza un esquema de clau privada/pública senzill per autenticar nodes VPN. Podeu crear fàcilment claus VPN amb l'ordre següent:

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

Això ens dóna tres parells de claus (sis fitxers). No farem referència als fitxers de les configuracions, però copiarem el contingut aquí: cada clau és una línia en base64.

Creació d'un fitxer de configuració per a un servidor VPN (Raspberry Pi)

La configuració és bastant senzilla, he creat el següent fitxer /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

Un parell de notes:

  • Als llocs adequats cal inserir les línies dels fitxers amb les tecles
  • La meva VPN utilitza el rang intern 10.200.200.0/24
  • Per equips PostUp/PostDown Tinc una interfície de xarxa externa wwan0, és possible que en tingueu una de diferent (per exemple, eth0)

La xarxa VPN s'obre fàcilment amb l'ordre següent:

$ sudo wg-quick up wg0

Un petit detall: com a servidor DNS, vaig utilitzar dnsmasq connectat a la interfície de xarxa br0, també he afegit dispositius wg0 a la llista de dispositius permesos. A dnsmasq, això es fa afegint una nova línia amb la interfície de xarxa al fitxer de configuració /etc/dnsmasq.conf, per exemple:

interface=br0
interface=wg0

A més, he afegit una regla iptable per permetre el trànsit al port UDP que escolta (51280):

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

Ara que tot funciona, podem registrar l'inici automàtic del túnel VPN:

$ sudo systemctl enable [email protected]

Configuració del client portàtil

A l'ordinador portàtil, creeu un fitxer de configuració /etc/wireguard/wg0.conf amb la mateixa configuració:

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Notes:

  • En lloc d'edgewalker, heu d'especificar una IP pública o un host de servidor VPN
  • Configurant AllowedIPs en 10.200.200.0/24, només fem servir la VPN per accedir a la xarxa interna. El trànsit a totes les altres adreces IP/servidors continuarà passant per canals oberts "normals". També s'utilitzarà el servidor DNS preconfigurat de l'ordinador portàtil.

Per fer proves i llançament automàtic, utilitzem les mateixes ordres wg-quick и systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

Configuració d'un client en un telèfon Android

Per a un telèfon Android, creem un fitxer de configuració molt semblant (anomenarem-lo mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

A diferència de la configuració del portàtil, el telèfon hauria d'utilitzar el nostre servidor VPN com a servidor DNS (cadena DNS), així com passar tot el trànsit pel túnel VPN (AllowedIPs = 0.0.0.0/0).

En lloc de copiar el fitxer al dispositiu mòbil, podeu convertir-lo en un codi QR:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

El codi QR s'enviarà a la consola com a ASCII. Es pot escanejar des de l'aplicació VPN d'Android i configurar un túnel VPN automàticament.

Sortida

La configuració de WireGuard és màgica en comparació amb OpenVPN.

Font: www.habr.com

Afegeix comentari