Nastavitev preprostega VPN-ja z WireGuardom in Raspberry Pi kot strežnikom

Ker WireGuard bo postal del prihajajočega jedra Linuxa 5.6, sem se odločil, da vidim, kako najbolje integrirati ta VPN s svojim LTE usmerjevalnik/dostopna točka na Raspberry Pi.

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

  • Raspberry Pi 3 z LTE modulom in javnim naslovom IP. Tukaj bo strežnik VPN (v nadaljevanju v besedilu se imenuje robnik)
  • Telefon Android, ki mora za vse komunikacije uporabljati VPN
  • Prenosnik Linux, ki bi moral uporabljati samo VPN v omrežju

Vsaka naprava, ki se poveže z VPN, mora biti sposobna vzpostaviti povezavo z vsemi drugimi napravami. Na primer, telefon bi moral imeti možnost povezave s spletnim strežnikom na prenosnem računalniku, če sta obe napravi del omrežja VPN. Če se izkaže, da je nastavitev precej preprosta, lahko razmislite o povezavi namizja z VPN (prek Etherneta).

Glede na to, da žične in brezžične povezave sčasoma postajajo vse manj varne (ciljno usmerjeni napadi, KRACK WPA2 vdor napad и Dragonblood napad na WPA3), resno razmišljam o uporabi WireGuard za vse svoje naprave, ne glede na okolje, v katerem so.

Namestitev programske opreme

WireGuard zagotavlja vnaprej prevedeni paketi za večino distribucij Linuxa, Windows in macOS. Aplikacije za Android in iOS so dostavljene prek imenikov aplikacij.

Imam najnovejši Fedora Linux 31 in bil sem prelen, da bi pred namestitvijo prebral priročnik. Pravkar sem našel pakete wireguard-tools, jih namestil in potem nisem mogel ugotoviti, zakaj nič ne deluje. Nadaljnja preiskava je pokazala, da paketa nimam nameščenega wireguard-dkms (z omrežnim gonilnikom), vendar ga ni bilo v repozitoriju moje distribucije.

Če bi prebral navodila, bi naredil pravilne korake:

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

Na Raspberry Pi imam nameščeno distribucijo Raspbian Buster, tam že obstaja paket wireguard, namestite:

$ sudo apt install wireguard

Na svoj Android telefon sem namestil aplikacijo VPN WireGuard iz uradnega kataloga Google App Store.

Namestitev ključev

Za avtentikacijo vrstnikov Wireguard uporablja preprosto shemo zasebnih/javnih ključev za avtentikacijo vrstnikov VPN. Ključe VPN lahko preprosto ustvarite z naslednjim ukazom:

$ 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

Tako dobimo tri pare ključev (šest datotek). Ne bomo se sklicevali na datoteke v konfiguracijah, temveč kopirali vsebino sem: vsak ključ je ena vrstica v base64.

Ustvarjanje konfiguracijske datoteke za strežnik VPN (Raspberry Pi)

Konfiguracija je precej preprosta, ustvaril sem naslednjo datoteko /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

Nekaj ​​opomb:

  • Na ustrezna mesta morate vstaviti vrstice iz datotek s ključi
  • Moj VPN uporablja notranji pas 10.200.200.0/24
  • Za ekipe PostUp/PostDown Jaz imam zunanji omrežni vmesnik wwan0, ti imaš lahko drugega (na primer eth0)

Omrežje VPN je enostavno dvigniti z naslednjim ukazom:

$ sudo wg-quick up wg0

Ena majhna podrobnost: kot strežnik DNS sem uporabil dnsmasq vezan na omrežni vmesnik br0, dodal sem tudi naprave wg0 na seznam dovoljenih naprav. V dnsmasq se to izvede z dodajanjem nove vrstice omrežnega vmesnika v konfiguracijsko datoteko /etc/dnsmasq.conf, na primer:

interface=br0
interface=wg0

Poleg tega sem dodal pravilo iptable za dovoljenje prometa do vrat za poslušanje UDP (51280):

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

Zdaj, ko vse deluje, lahko nastavimo samodejni zagon tunela VPN:

$ sudo systemctl enable [email protected]

Konfiguracija odjemalca na prenosniku

Ustvarite konfiguracijsko datoteko na prenosnem računalniku /etc/wireguard/wg0.conf z enakimi nastavitvami:

[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

Opombe:

  • Namesto edgewalkerja morate določiti javnega gostitelja strežnika IP ali VPN
  • Z nastavitvijo AllowedIPs o 10.200.200.0/24, uporabljamo samo VPN za dostop do notranjega omrežja. Promet do vseh drugih naslovov/strežnikov IP bo še naprej potekal po »normalnih« odprtih kanalih. Uporabil bo tudi vnaprej konfiguriran strežnik DNS na prenosniku.

Za testiranje in samodejni zagon uporabljamo iste ukaze wg-quick и systemd:

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

Nastavitev odjemalca na telefonu Android

Za telefon Android ustvarimo zelo podobno konfiguracijsko datoteko (recimo ji 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

Za razliko od konfiguracije na prenosniku mora telefon kot strežnik DNS uporabljati naš strežnik VPN (linija DNS), prav tako pa ves promet prenesejo skozi tunel VPN (AllowedIPs = 0.0.0.0/0).

Namesto kopiranja datoteke v mobilno napravo jo lahko pretvorite v kodo QR:

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

Koda QR bo prikazana na konzoli kot ASCII. Lahko ga skenirate iz aplikacije Android VPN in samodejno vzpostavi tunel VPN.

Izhod

Nastavitev WireGuarda je preprosto čarobna v primerjavi z OpenVPN.

Vir: www.habr.com

Dodaj komentar