Konfigurer en simpel VPN med WireGuard og Raspberry Pi som server

Siden WireGuard blive en del af af den fremtidige Linux 5.6-kerne besluttede jeg at se, hvordan man bedst kunne integrere denne VPN med min LTE-router/adgangspunkt på Raspberry Pi.

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

  • Raspberry Pi 3 med LTE-modul og offentlig IP. Der vil være en VPN-server (i det følgende benævnt edgewalker)
  • En Android-telefon, der skal bruge en VPN til al kommunikation
  • Linux bærbar, der kun skal bruge VPN inde på netværket

Hver enhed, der opretter forbindelse til en VPN, skal være i stand til at oprette forbindelse til alle andre enheder. For eksempel skal en telefon være i stand til at oprette forbindelse til en webserver på en bærbar computer, hvis begge enheder er en del af et VPN-netværk. Hvis opsætningen er enkel nok, så kan du overveje at oprette forbindelse til en VPN og en desktop (via Ethernet).

I betragtning af at kablede og trådløse forbindelser bliver mindre sikre over tid (målrettede angreb, KRACK WPA2 hacking angreb и Dragonblood angreb mod WPA3), Jeg overvejer seriøst at bruge WireGuard til alle mine enheder, uanset hvilket miljø de kører i.

Softwareinstallation

WireGuard leverer prækompilerede pakker til de fleste Linux-, Windows- og macOS-distributioner. Apps til Android og iOS leveres gennem app-kataloger.

Jeg har den seneste Fedora Linux 31, og jeg var for doven til at læse manualen før installationen. Har lige fundet pakkerne wireguard-tools, installerede dem og kunne så ikke finde ud af, hvorfor intet virkede. Yderligere undersøgelser viste, at jeg ikke havde pakken installeret wireguard-dkms (med en netværksdriver), og den var ikke i min distributions lager.

Hvis jeg havde læst instruktionerne, ville jeg have taget de rigtige skridt:

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

Jeg har Raspbian Buster-distributionen installeret på min Raspberry Pi, der er allerede en pakke wireguard, installer det:

$ sudo apt install wireguard

Jeg installerede appen på min Android-telefon WireGuardVPN fra det officielle katalog i Google App Store.

Installation af nøgler

For at autentificere noder bruger Wireguard et simpelt privat/offentlig nøgleskema til at autentificere VPN-noder. Du kan nemt oprette VPN-nøgler med følgende kommando:

$ 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

Dette giver os tre nøglepar (seks filer). Vi vil ikke referere til filer i configs, men kopiere indholdet her: hver nøgle er en linje i base64.

Oprettelse af en konfigurationsfil til en VPN-server (Raspberry Pi)

Konfigurationen er ret enkel, jeg oprettede følgende fil /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

Et par noter:

  • På de relevante steder skal du indsætte linjerne fra filerne med tasterne
  • Min VPN bruger intern rækkevidde 10.200.200.0/24
  • For hold PostUp/PostDown Jeg har en ekstern netværksgrænseflade wwan0, du kan have en anden (for eksempel eth0)

VPN-netværket opdrages nemt med følgende kommando:

$ sudo wg-quick up wg0

En lille detalje: som DNS-server brugte jeg dnsmasq tilsluttet netværksgrænsefladen br0, Jeg tilføjede også enheder wg0 til listen over tilladte enheder. I dnsmasq gøres dette ved at tilføje en ny linje med netværksgrænsefladen til konfigurationsfilen /etc/dnsmasq.conf, for eksempel:

interface=br0
interface=wg0

Jeg tilføjede også en iptable-regel for at tillade trafik til den lyttende UDP-port (51280):

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

Nu hvor alt fungerer, kan vi registrere den automatiske lancering af VPN-tunnelen:

$ sudo systemctl enable [email protected]

Laptop klient konfiguration

Opret en konfigurationsfil på den bærbare computer /etc/wireguard/wg0.conf med samme indstillinger:

[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

Bemærkninger:

  • I stedet for edgewalker skal du angive en offentlig IP- eller VPN-servervært
  • Efter at have installeret AllowedIPs10.200.200.0/24, bruger vi kun VPN til at få adgang til det interne netværk. Trafik til alle andre IP-adresser/servere vil fortsat gå gennem "almindelige" åbne kanaler. Den forudkonfigurerede DNS-server på den bærbare computer vil også blive brugt.

Til test og automatisk lancering bruger vi de samme kommandoer wg-quick и systemd:

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

Opsætning af en klient på en Android-telefon

For en Android-telefon opretter vi en meget lignende konfigurationsfil (lad os kalde det 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

I modsætning til den bærbare computer-konfiguration skal telefonen bruge vores VPN-server som sin DNS-server (streng DNS), samt passere al trafik gennem VPN-tunnelen (AllowedIPs = 0.0.0.0/0).

I stedet for at kopiere filen til din mobilenhed, kan du konvertere den til en QR-kode:

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

QR-koden udsendes til konsollen som ASCII. Den kan scannes fra Android VPN-appen og konfigurere en VPN-tunnel automatisk.

Output

Opsætning af WireGuard er bare magisk sammenlignet med OpenVPN.

Kilde: www.habr.com

Tilføj en kommentar