Nastavenie jednoduchej VPN s WireGuard a Raspberry Pi ako serverom

Pretože WireGuard sa stane súčasťou nadchádzajúceho jadra Linuxu 5.6 som sa rozhodol zistiť, ako najlepšie integrovať túto sieť VPN s mojou LTE router/prístupový bod na Raspberry Pi.

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

  • Raspberry Pi 3 s LTE modulom a verejnou IP adresou. Tu bude VPN server (ďalej v texte nazývaný edgewalker)
  • Telefón s Androidom, ktorý musí na všetku komunikáciu používať sieť VPN
  • Linux laptop, ktorý by mal používať iba VPN v rámci siete

Každé zariadenie, ktoré sa pripája k sieti VPN, musí byť schopné pripojiť sa ku všetkým ostatným zariadeniam. Napríklad telefón by mal byť schopný pripojiť sa k webovému serveru na prenosnom počítači, ak sú obe zariadenia súčasťou siete VPN. Ak sa nastavenie ukáže ako celkom jednoduché, môžete premýšľať o pripojení pracovnej plochy k sieti VPN (cez Ethernet).

Berúc do úvahy, že káblové a bezdrôtové pripojenia sú postupom času čoraz menej bezpečné (cielené útoky, KRACK WPA2 cracking útok и Útok Dragonblood proti WPA3), vážne uvažujem o použití WireGuard pre všetky moje zariadenia bez ohľadu na to, v akom prostredí sa nachádzajú.

Inštalácia softvéru

WireGuard poskytuje predkompilované balíčky pre väčšinu distribúcií Linux, Windows a macOS. Aplikácie pre Android a iOS sa dodávajú prostredníctvom adresárov aplikácií.

Mám najnovšiu Fedora Linux 31 a bol som príliš lenivý čítať manuál pred inštaláciou. Práve som našiel balíčky wireguard-tools, nainštalovali ich a potom nevedeli prísť na to, prečo nič nefunguje. Ďalšie vyšetrovanie odhalilo, že balík nemám nainštalovaný wireguard-dkms (so sieťovým ovládačom), ale nebol v úložisku mojej distribúcie.

Keby som si prečítal pokyny, urobil by som správne kroky:

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

Na svojom Raspberry Pi mám nainštalovanú distribúciu Raspbian Buster, je tam už balík wireguard, nainštalujte ho:

$ sudo apt install wireguard

Na telefóne s Androidom som si nainštaloval aplikáciu WireGuardVPN z oficiálneho katalógu Google App Store.

Inštalácia kľúčov

Pre peer autentifikáciu Wireguard používa jednoduchú schému súkromného/verejného kľúča na autentifikáciu VPN partnerov. Kľúče VPN môžete jednoducho vytvoriť pomocou nasledujúceho príkazu:

$ 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

Získame tak tri páry kľúčov (šesť súborov). Nebudeme odkazovať na súbory v konfiguráciách, ale skopírujeme obsah sem: každý kľúč je jeden riadok v base64.

Vytvorenie konfiguračného súboru pre server VPN (Raspberry Pi)

Konfigurácia je pomerne jednoduchá, vytvoril som nasledujúci súbor /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

Pár poznámok:

  • Na príslušné miesta je potrebné vložiť riadky zo súborov pomocou kľúčov
  • Moja sieť VPN používa interné pásmo 10.200.200.0/24
  • Pre tímy PostUp/PostDown Mám externé sieťové rozhranie wwan0, môžete mať iné (napríklad eth0)

Sieť VPN sa dá ľahko zvýšiť pomocou nasledujúceho príkazu:

$ sudo wg-quick up wg0

Jeden malý detail: ako server DNS som použil dnsmasq viazané na sieťové rozhranie br0, pridal som aj zariadenia wg0 do zoznamu povolených zariadení. V dnsmasq sa to robí pridaním nového riadku sieťového rozhrania do konfiguračného súboru /etc/dnsmasq.conf, napríklad:

interface=br0
interface=wg0

Okrem toho som pridal pravidlo iptable, ktoré povoľuje prenos do portu počúvania UDP (51280):

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

Teraz, keď všetko funguje, môžeme nastaviť automatické spustenie tunela VPN:

$ sudo systemctl enable [email protected]

Konfigurácia klienta na notebooku

Vytvorte konfiguračný súbor na prenosnom počítači /etc/wireguard/wg0.conf s rovnakými nastaveniami:

[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

Poznámky:

  • Namiesto edgewalker musíte zadať verejnú IP alebo hostiteľa servera VPN
  • Podľa nastavenia AllowedIPs na 10.200.200.0/24, VPN používame iba na prístup do internej siete. Prevádzka na všetky ostatné IP adresy/servery bude naďalej prechádzať cez „normálne“ otvorené kanály. Použije tiež vopred nakonfigurovaný server DNS na prenosnom počítači.

Na testovanie a automatické spustenie používame rovnaké príkazy wg-quick и systemd:

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

Nastavenie klienta na telefóne s Androidom

Pre telefón s Androidom vytvoríme veľmi podobný konfiguračný súbor (nazvime ho 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

Na rozdiel od konfigurácie na prenosnom počítači musí telefón používať náš server VPN ako server DNS (linka DNS) a tiež prejsť všetku komunikáciu cez tunel VPN (AllowedIPs = 0.0.0.0/0).

Namiesto kopírovania súboru do mobilného zariadenia ho môžete previesť na QR kód:

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

QR kód bude výstupom do konzoly ako ASCII. Dá sa naskenovať z aplikácie Android VPN a automaticky nastaví VPN tunel.

Výkon

Nastavenie WireGuard je v porovnaní s OpenVPN jednoducho magické.

Zdroj: hab.com

Pridať komentár