Da WireGuard den fremtidige Linux 5.6 kerne, har jeg besluttet at undersøge, hvordan jeg bedst integrerer denne VPN med min .
Udstyr
- Raspberry Pi 3 med LTE-modul og en offentlig IP-adresse. Her vil der være en VPN-server (herefter kaldet edgewalker)
- En Android-telefon, der skal bruge VPN til al kommunikation
- En Linux-bærbar, der kun skal bruge VPN internt i netværket
Hver enhed, der tilsluttes til VPN, skal kunne oprette forbindelse til alle andre enheder. For eksempel skal telefonen kunne oprette forbindelse til webserveren på bærbaren, hvis begge enheder er en del af VPN-netværket. Hvis opsætningen bliver enkel nok, kan man overveje at forbinde stationære computere (via Ethernet) til VPN.
I betragtning af, at lednings- og trådløse forbindelser over tid bliver mindre sikre (, og ), overvejer jeg seriøst at bruge WireGuard på alle mine enheder, uanset hvilket miljø de kører i.
Installation af software
WireGuard tilbyder til de fleste Linux, Windows og macOS distributioner. Apps til Android og iOS findes gennem app-kataloger.
Jeg har den seneste Fedora Linux 31, og før installationen gad jeg ikke læse guiden. Jeg fandt bare pakkerne wireguard-tools, installerede dem, og kunne så ikke forstå, hvorfor intet fungerede. Yderligere undersøgelse viste, at jeg ikke havde installeret pakken wireguard-dkms (med netværksdriver), og den fandtes ikke i mit distributions repository.
Hvis jeg havde læst instruktionen, ville jeg have gjort de rigtige skridt:
$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools På Raspberry Pi har jeg installeret Raspbian Buster distributionen, hvor pakken wireguard, er allerede tilgængelig, så lad os installere den:
$ sudo apt install wireguardPå Android-telefonen har jeg installeret appen fra den officielle Google App Store.
Installation af nøgler
For autentificering af noder bruger Wireguard en simpel offentlig/private nøgle-scheme til autentifikation af 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.keyDette giver os tre par nøgler (seks filer). Lad os ikke henvise til filerne i konfigurationerne, men i stedet kopiere indholdet her: hver nøgle er en linje i base64.
Oprettelse af konfigurationsfil til VPN-server (Raspberry Pi)
Konfigurationen er ret simpel, jeg har oprettet følgende fil /etc/wireguard/wg0.conf:
[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey =
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 =
AllowedIPs = 10.200.200.2/32
[Peer]
# mobiltelefon
PublicKey =
AllowedIPs = 10.200.200.3/32Et par bemærkninger:
- I de relevante steder skal der indsættes linjer fra nøglefilerne
- Mit VPN-netværk bruger et internt interval
10.200.200.0/24 - For kommandoerne
PostUp/PostDownhar jeg angivet den eksterne netværksgrænseflade wwan0, du kan have en anden (for eksempel eth0)
VPN-netværket kan nemt startes med følgende kommando:
$ sudo wg-quick up wg0 En lille detalje: som DNS-server har jeg brugt dnsmasq med binding til netværksgrænsefladen br0, jeg har også tilføjet enheder wg0 til listen over tilladte enheder. I dnsmasq gøres dette ved at tilføje en ny linje med netværksgrænsefladen i konfigurationsfilen /etc/dnsmasq.conf, for eksempel:
interface=br0
interface=wg0Desuden har jeg tilføjet en iptable-regel for at tillade trafik til lytte-UDP-porten (51280):
$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPTNu, hvor alt fungerer, kan vi opsætte automatisk opstart af VPN-tunnelen:
$ sudo systemctl enable wg-quick@wg0.serviceKlientkonfiguration på bærbar computer
På den bærbare computer opretter vi en konfigurationsfil /etc/wireguard/wg0.conf med de samme indstillinger:
[Interface]
Address = 10.200.200.2/24
PrivateKey =
[Peer]
PublicKey =
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820Bemærkninger:
- I stedet for edgewalker skal du angive den offentlige IP eller vært for VPN-serveren
- Når vi har installeret
AllowedIPsog få en fungerende kommando.10.200.200.0/24, bruger vi VPN udelukkende til at få adgang til det interne netværk. Trafik til alle andre IP-adresser/servere vil stadig gå via «almindelige» åbne kanaler. En forudindstillet DNS-server på den bærbare computer vil også blive brugt.
Til test og automatisk opstart bruger vi de samme kommandoer wg-quick og systemd:
$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.serviceKlientopsætning på Android-telefon
For Android-telefonen opretter vi en meget lignende konfigurationsfil (lad os kalde den mobile.conf):
[Interface]
Address = 10.200.200.3/24
PrivateKey =
DNS = 10.200.200.1
[Peer]
PublicKey =
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820 I modsætning til konfigurationen på bærbaren skal telefonen bruge vores VPN-server som DNS-server (linje DNS), samt sende al trafik gennem VPN-tunnelen (AllowedIPs = 0.0.0.0/0).
I stedet for at kopiere filen til den mobile enhed, kan den konverteres til en QR-kode:
$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.confQR-koden vises i konsollen som ASCII. Den kan scannes fra Android VPN-appen og automatisk konfigurere VPN-tunnelen.
Output
Opsætningen af WireGuard er simpelthen magisk sammenlignet med OpenVPN.
Kilde: habr.com
