Paprasto VPN nustatymas naudojant WireGuard ir „Raspberry Pi“ kaip serveris

Nuo WireGuard taps dalimi būsimas branduolys Linux 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)
  • Telefonas įjungtas Android, kuris privalo naudoti VPN visiems ryšiams
  • Laptop Linux, kuris turėtų naudoti VPN tik tinkle

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 visiems mano įrenginiams, nesvarbu, kokioje aplinkoje jie veikia.

Programinės įrangos diegimas

WireGuard teikia iš anksto sudarytus paketus daugumai paskirstymų Linux, Windows и macOSParaiškos Android ir „iOS“ teikiamos per programėlių parduotuves.

Turiu naujausią „Fedora“ Linux 31, ir prieš diegdamas buvau per tingus skaityti vadovą. Radau tik paketus. 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

Telefonu Android Įdiegiau programą WireGuard VPT iš oficialaus Google App Store katalogo.

Raktų montavimas

Mazgų autentifikavimui Wireguard Naudoja paprastą privačiojo/viešojo rakto schemą VPN mazgų autentifikavimui. VPN raktus galite lengvai sugeneruoti 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 wg-quick@wg0.service

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 wg-quick@wg0.service

Kliento nustatymas Android-telefonas

Telefonui Android Sukuriame labai panašų konfigūracijos failą (pavadinkime jį 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 rodomas konsolėje ASCII formatu. Jį galima nuskaityti iš programėlės. Android VPN ir automatiškai sukonfigūruos VPN tunelį.

Produkcija

reguliavimas WireGuard tiesiog magiška, palyginti su OpenVPN.

Šaltinis: www.habr.com

Pirkite patikimą prieglobą svetainėms su DDoS apsauga, VPS VDS serveriais 🔥 Įsigykite patikimą svetainių talpinimą su DDoS apsauga, VPS VDS serveriais | ProHoster