Paprasto VPN nustatymas naudojant „WireGuard“ ir „Raspberry Pi“ kaip serverį

Nes WireGuard taps dalimi būsimo Linux branduolio 5.6, nusprendžiau išsiaiškinti, kaip geriausiai integruoti šį VPN su savo LTE maršrutizatorius / prieigos taškas „Raspberry Pi“..

įranga

  • Raspberry Pi 3 su LTE moduliu ir viešuoju IP adresu. Čia bus VPN serveris (toliau tekste jis vadinamas krašto vaikščiotojas)
  • „Android“ telefonas, kuris visoms komunikacijoms turi naudoti VPN
  • „Linux“ nešiojamas kompiuteris, kuris tinkle turėtų naudoti tik VPN

Kiekvienas įrenginys, jungiantis prie VPN, turi turėti galimybę prisijungti prie visų kitų įrenginių. Pavyzdžiui, telefonas turėtų galėti prisijungti prie žiniatinklio serverio nešiojamajame kompiuteryje, jei abu įrenginiai yra VPN tinklo dalis. Jei sąranka pasirodo gana paprasta, galite pagalvoti apie darbalaukio prijungimą prie VPN (per Ethernet).

Atsižvelgiant į tai, kad laidinis ir belaidis ryšys laikui bėgant tampa vis mažiau saugus (tikslinių išpuolių, KRACK WPA2 krekingo ataka и Dragonblood ataka prieš WPA3), rimtai svarstau naudoti „WireGuard“ visuose savo įrenginiuose, nesvarbu, kokioje aplinkoje jie yra.

Programinės įrangos diegimas

„WireGuard“ teikia iš anksto sudarytus paketus daugumai Linux, Windows ir MacOS platinimų. „Android“ ir „iOS“ programos pristatomos per programų katalogus.

Turiu naujausią „Fedora Linux 31“ ir tingėjau perskaityti vadovą prieš diegdamas. Ką tik radau pakuotes wireguard-tools, juos įdiegė ir tada negalėjo suprasti, kodėl niekas neveikia. Tolesnis tyrimas atskleidė, kad paketo neįdiegiau wireguard-dkms (su tinklo tvarkykle), bet jos nebuvo mano platinimo saugykloje.

Jei būčiau perskaitęs instrukcijas, būčiau atlikęs teisingus veiksmus:

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

Mano Raspberry Pi įdiegtas Raspbian Buster paskirstymas, ten jau yra paketas wireguard, įdiekite jį:

$ sudo apt install wireguard

„Android“ telefone įdiegiau programą „WireGuard“ VPN iš oficialaus Google App Store katalogo.

Raktų montavimas

Bendraamžių autentifikavimui „Wireguard“ naudoja paprastą privataus / viešojo rakto schemą VPN bendraamžių autentifikavimui. Galite lengvai sukurti VPN raktus naudodami šią komandą:

$ 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

Taip gaunamos trys raktų poros (šešios bylos). Konfigūracijose nenurodysime failų, o nukopijuosime turinį čia: kiekvienas raktas yra viena base64 eilutė.

Konfigūracijos failo kūrimas VPN serveriui (Raspberry Pi)

Konfigūracija gana paprasta, sukūriau šį failą /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

Pora pastabų:

  • Atitinkamose vietose reikia įterpti eilutes iš failų su klavišais
  • Mano VPN naudoja vidinę juostą 10.200.200.0/24
  • Komandoms PostUp/PostDown Aš turiu išorinę tinklo sąsają wwan0, jūs galite turėti kitą (pvz., eth0)

VPN tinklas lengvai pakeliamas naudojant šią komandą:

$ sudo wg-quick up wg0

Viena smulkmena: kaip DNS serveris, kurį naudoju dnsmasq susieta su tinklo sąsaja br0, taip pat pridėjau įrenginius wg0 į leidžiamų įrenginių sąrašą. Dnsmasq tai daroma pridedant naują tinklo sąsajos eilutę į konfigūracijos failą /etc/dnsmasq.conf, pavyzdžiui:

interface=br0
interface=wg0

Be to, pridėjau iptable taisyklę, leidžiančią srautą į UDP klausymosi prievadą (51280):

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

Dabar, kai viskas veikia, galime nustatyti automatinį VPN tunelio paleidimą:

$ sudo systemctl enable [email protected]

Kliento konfigūracija nešiojamajame kompiuteryje

Sukurkite konfigūracijos failą nešiojamajame kompiuteryje /etc/wireguard/wg0.conf su tais pačiais nustatymais:

[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

Pastabos:

  • Vietoj Edgewalker turite nurodyti viešąjį IP arba VPN serverio pagrindinį kompiuterį
  • Nustačius AllowedIPs apie 10.200.200.0/24, vidiniam tinklui pasiekti naudojame tik VPN. Srautas į visus kitus IP adresus / serverius ir toliau vyks „įprastais“ atvirais kanalais. Jis taip pat naudos iš anksto sukonfigūruotą DNS serverį nešiojamajame kompiuteryje.

Testavimui ir automatiniam paleidimui naudojame tas pačias komandas wg-quick и systemd:

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

Kliento nustatymas „Android“ telefone

Android telefonui sukuriame labai panašų konfigūracijos failą (vadinkime 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

Skirtingai nuo nešiojamojo kompiuterio konfigūracijos, telefonas turi naudoti mūsų VPN serverį kaip DNS serverį (eil DNS), taip pat praleisti visą srautą per VPN tunelį (AllowedIPs = 0.0.0.0/0).

Užuot nukopijavę failą į mobilųjį įrenginį, galite konvertuoti jį į QR kodą:

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

QR kodas bus išvestas į konsolę kaip ASCII. Jį galima nuskaityti iš „Android“ VPN programos ir automatiškai nustatys VPN tunelį.

Produkcija

„WireGuard“ nustatymas yra tiesiog stebuklingas, palyginti su „OpenVPN“.

Šaltinis: www.habr.com

Добавить комментарий