Seame üles lihtsa VPN-i WireGuardi ja Raspberry Pi-ga serverina

Kuna WireGuard saab osaks Linuxi 5.6 tuleviku kernelist, otsustasin uurida, kuidas seda VPN-i oma Raspberry Pi LTE-ruuteri/juurdepääsupunktiga kõige paremini integreerida.

Varustus

  • Raspberry Pi 3 LTE-modemiga ja avaliku IP-aadressiga. Siia tuleb VPN-server (edaspidi nimetatakse seda edgewalker)
  • Android telefon, mis peab kasutama VPN-i kõigi suhtluste jaoks
  • Linuxi sülearvuti, mis peab kasutama VPN-i vaid kohaliku võrguga

Igal seadmel, mis VPN-iga ühendust loob, peab olema võimalik suhelda kõigi teiste seadmetega. Näiteks telefon peab olema võimeline ühendust looma sülearvuti veebiserveriga, kui mõlemad seadmed kuuluvad VPN-i võrku. Kui seade osutub piisavalt lihtsaks, võiks mõelda ka lauaarvuti ühendamisele VPN-iga (Etherneti kaudu).

Arvestades, et traadita ja juhtmeühendused muutuvad aja jooksul üha vähem turvaliseks (sihtimise rünnakud, KRACK rünnak WPA2 murdmise vastu ja Dragonblood rünnak WPA3 vastu), kaalun tõsiselt WireGuard'i kasutamist kõigi oma seadmete jaoks, sõltumata sellest, millises keskkonnas need töötavad.

Tarkvara installimine

WireGuard pakub eelnevalt kompileeritud pakette enamikule Linuxi, Windowsi ja macOS-i distributiividele. Androidi ja iOS-i rakendused on saadaval rakenduste kataloogides.

Mul on uusim Fedora Linux 31, ja enne installimist olin laisk juhendit lugema. Lihtsalt leidsin paketid wireguard-tools, paigaldasin need, kuid seejärel ei suutnud aru saada, miks midagi ei tööta. Edasine uurimine näitas, et mul ei olnud paketti wireguard-dkms (võrgudraiver), ja seda ei olnud minu distributiivi hoidlas.

Kui oleksin juhiseid lugenud, oleksin teinud õigeid samme:

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

Raspberry Pi-l on mul Raspbian Buster distributiiv, seal on juba pakett wireguard, paigaldame selle:

$ sudo apt install wireguard

Android telefonil installisin rakenduse WireGuard VPN ametlikust Google App Store'i kataloogist.

Võtmete installimine

Node'ide autentimiseks kasutab Wireguard lihtsat privaat-/avaliku märgi skeemi VPN-i node'ide autentimiseks. VPN-i võtmete loomine on lihtne järgmise käsuga:

$ 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

See annab meile kolm paari võtmeid (kuus faili). Ärgem viidaku failidele konfiguratsioonides, vaid kopeerime siia sisu: iga võti on üks rida base64 formaadis.

VPN-serveri konfiguratsioonifaili loomine (Raspberry Pi)

Konfiguratsioon on üsna lihtne, lõin järgmise faili /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = 
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]
# sülearvuti
PublicKey = 
AllowedIPs = 10.200.200.2/32

[Peer]
# nutitelefon
PublicKey = 
AllowedIPs = 10.200.200.3/32

Mõned märkused:

  • Asjakohastesse kohtadesse tuleb sisestada rida võtmefailidest
  • Minu VPN-võrk kasutab sisevahemikku 10.200.200.0/24
  • Käskluste jaoks PostUp/PostDown mul on käsitletud välise võrguliidese wwan0, teil võib olla teine (näiteks eth0)

VPN-võrk tõuseb lihtsalt järgmise käsklusena:

$ sudo wg-quick up wg0

Üks väike detail: DNS-serverina kasutasin dnsmasq seotuna võrguliidesega br0, lisasin ka seadmed wg0 lubatud seadmete nimekirja. dnsmasq-s saab seda teha, lisades konfiguratsioonifaili nieuwe rea võrgu liidese kohta /etc/dnsmasq.conf, näiteks:

interface=br0
interface=wg0

Lisaks lisasin iptable'i reegli, et lubada liiklust kuulam UDP-porti (51280):

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

Nüüd, kui kõik töötab, saame seadistada automaatse VPN-tunneli käivitamise:

$ sudo systemctl enable wg-quick@wg0.service

Kliendi konfiguratsioon sülearvutis

Sülearvutis loome konfiguratsioonifaili /etc/wireguard/wg0.conf sama seadistustega:

[Interface]
Address = 10.200.200.2/24
PrivateKey = 

[Peer]
PublicKey = 
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Märkused:

  • edgewalker asemel tuleb sisestada VPN-serveri avalik IP või host
  • Seades AllowedIPs . Tundub, et 10.200.200.0/24, kasutame VPN-i ainult juurdepääsuks sisevõrgule. Kõik muu liiklus IP-aadressidele/serveritele läheb endiselt "tavalisel" avatud kanalil. Samuti kasutatakse sülearvutis eelnevalt seadistatud DNS-serverit.

Testimiseks ja automaatseks käivitamiseks kasutame samu käske wg-quick ja systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service

Kliendi seadistamine Android-telefonis

Android-telefonile loome väga sarnase konfiguratsioonifaili (nimetame selle mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = 
DNS = 10.200.200.1
        
[Peer]
PublicKey = 
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

Erinevalt sülearvuti konfiguratsioonist peab telefon kasutama meie VPN-serverit DNS-serverina (rida DNS), samuti peab kogu liiklus minema läbi VPN-tunneli (AllowedIPs = 0.0.0.0/0).

Faili kopeerimise asemel mobiilseadmesse saab selle muundada QR-koodiks:

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

QR-kood kuvatakse konsoolis ASCII-na. Selle saab skaneerida Androidi VPN-i rakendusest ja VPN-tunneli seadistamine toimub automaatselt.

Kokkuvõte

WireGuardi seadistamine on võrreldes OpenVPN-iga lihtsalt maagiline.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster