Konfigurer en selv-hostet VPN ved hjælp af Wireguard
EN VPN (Virtual Private Network) giver brugeren mulighed for at oprette forbindelse til et privat netværk eksternt, som om brugerens computer var direkte forbundet til det private netværk. Teknologien blev oprindeligt udviklet for at tillade fjernadgang til en virksomheds interne private netværk for medarbejdere, der ikke faktisk er til stede på det interne netværks placering.
En VPN-server er installeret på placeringen af det interne netværk. Denne server er på det offentlige netværk og kan tilgås ved hjælp af en VPN-klient af medarbejderen. Godkendelse er nødvendig for at oprette forbindelse til VPN-serveren. Kommunikationen mellem VPN-serveren og VPN-klienten er sikret ved hjælp af en tunneling-protokol. Bemærk, at denne kommunikation muligvis er krypteret eller ikke, men normalt i de fleste VPN-protokoller er den krypteret.
En anden brug af VPN er at opnå anonymitet, når du får adgang til internettet eller for at omgå geografiske begrænsninger, der er pålagt under adgang til nogle websteder. I sådanne tilfælde er det netværk, som brugeren ønsker at oprette forbindelse til, ikke et privat netværk, men i stedet internettet.
Mange VPN-protokoller er blevet udviklet gennem årene. Disse protokoller gør brug af forskellige tunnelprotokoller og krypteringsalgoritmer til kommunikation mellem serveren og klienten.
En sådan protokol, som er ved at vinde udbredt brug for nylig, er Wireguard. Wireguard er lettere, enklere og mere ydende end velkendte traditionelt brugte VPN-protokoller såsom OpenVPN, IPSec. Det er allerede implementeret til Windows, Mac OS og et stort antal Linux-distributioner. I Linux er det implementeret som et kernemodul. Det er tilgængeligt i officielle arkiver i Ubuntu 20.04.
I denne artikel vil vi se, hvordan du opsætter en Wireguard VPN-server og -klient i Ubuntu 20.04.
Installation
Til denne artikel opsætter jeg en Wireguard Server på en Ubuntu 20.04 Linode og Wireguard Client på min lokale maskine med Ubuntu 20.04.
Pakken wireguard
installerer både Wireguard Server og Client. Kør følgende kommando på både servermaskinen og klientmaskinen.
sudo apt installer wireguard
Serverkonfiguration
Sikkerhedsnøgler
Vi skal generere et sæt offentlige/private nøglepar for at godkende og sikre Wireguard-forbindelsen. Dette kan gøres ved hjælp af følgende kommandoer:
sudo su cd /etc/wireguard umask 077 wg genkey | tee private_key | wg pubkey > public_key
Bemærk, at vi udfører alle konfigurationsopgaverne som superbruger. Årsagen er, at adgang til biblioteket /etc/wireguard
er forhindret for normale brugere, og biblioteksadgang kan ikke opnås med bare sudo-privilegier for en normal bruger.
Dernæst indstiller vi filoprettelsesmasken til 077
. Dette betyder, at når en ny fil oprettes i denne mappe ved en hvilken som helst proces, vil dens tilladelser automatisk blive maskeret med 077. F.eks. hvis der oprettes en fil i denne mappe med tilladelser 777, maskeres den automatisk, og tilladelser bliver reelt 700. Dette gøres, så det kun er ejeren af filen, der har alle tilladelser til filen, og alle andre har ingen tilladelser.
På næste linje, vi genererer det offentlige/private nøglepar for serveren. De gemmes i filer privat_nøgle
og offentlig_nøgle
. For at se nøglerne skal du køre:
kat privat_nøgle kat offentlig_nøgle
Kopier den private nøgle, vi skal bruge den i næste trin.
Bemærk: Del aldrig din private nøgle offentligt!
Konfigurationsfil
Lad os oprette en konfigurationsfil til Wireguard-serveren. Du kan vælge et hvilket som helst navn til filen. Vi opretter en fil wg0.conf
i dette eksempel.
vim wg0.conf
Tilføj følgende til filen.
[Interface] Adresse = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FRAM -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE
Indsæt den private nøgle, som vi tidligere kopierede i linje 5 i koden ovenfor.
Vi skal konfigurere Wireguard på et andet (virtuelt) undernet end serverens IP-adresse. Her har jeg brugt 10.20.43.1 til serveren og vil bruge 10.20.43.2 til klienten. Ethvert undernet kan bruges her. For at få serverens og grænsefladens IP-adresse skal du køre:
ifconfig
Bemærk serverens IP-adresse. Dette er påkrævet under klientkonfiguration.
Den grænseflade, der bruges af serveren, som det ses på billedet ovenfor, er eth0
. Interfacenavnet kan variere baseret på brugerens netværk, det kan være wlan0
eller wlp2s0
i tilfælde af at brugeren er forbundet til et WiFi-netværk ved hjælp af et trådløst kort.
Udskift i
PostUp
og PostDown
med din grænseflade; i dette eksempel er det eth0
.PostUp
og PostDown
direktiver bruges til at angive, hvilke kommandoer der skal køres, når serveren henholdsvis starter og stopper. I vores eksempel bruger vi iptables
kommando til at indstille IP-regler, således at serverens IP-adresse deles af klienterne. Reglerne vil falde, når serveren stopper.
Gem og afslut filen. Når du bruger vim, skal du trykke på Esc, og skriv derefter :wq
og tryk Gå ind for at gemme og afslutte.
Hvis du bruger en ufw
firewall på serveren, skal vi tillade UDP-forbindelser til porten for VPN-serveren, 51190.
ufw tillade 51190/udp
Start af tjenesten
Nu da konfigurationen er færdig, kan vi starte Wireguard VPN-tjenesten.
At muliggøre tjenesten til at starte ved opstart, kør:
systemctl aktiver wg-quick@wg0
Bemærk det her wg0
er navnet på konfigurationsfilen.
At begynde tjenesten, kør:
service wg-quick@wg0 start
Verificere at tjenesten er startet med succes:
tjeneste wg-quick@wg0 status
Bekræft, at grænsefladen vi oprettede i konfigurationsfilen er startet ved hjælp af IP-kommandoen.
ip et show wg0
Wireguard VPN-serveren er nu sat op og kører. Lad os konfigurere klienten nu.
Klientkonfiguration
Klientkonfiguration for Wireguard er mere eller mindre det samme som en serverkonfiguration. Vi genererer nøglerne til klienten og opretter derefter en konfigurationsfil.
Sikkerhedsnøgler
For at generere den offentlige/private nøgle par for klienten, kør:
sudo su cd /etc/wireguard umask 077 wg genkey | tee client_private_key | wg pubkey > client_public_key
De offentlige og private nøgler til klienten genereres nu i henholdsvis filer klient_privat_nøgle
og klient_offentlig_nøgle
.
Tjek at de er blevet oprettet vha kat
kommando.
kat klient_privat_nøgle kat klient_offentlig_nøgle
Kopier den viste private nøgle, da vi skal tilføje den til konfigurationsfilen til klienten.
Konfigurationsfil
Opret konfigurationsfilen med hvilket som helst navn du ønsker. Vi vil oprette det med navnet wg0-klient
for dette eksempel.
vim wg0-client.conf
Tilføj følgende konfiguration.
[Grænseflade] # IP-adresse og privat nøgle for klientadressen = 10.20.43.2/24 PrivateKey = [Peer] # Offentlig nøgle, IP-adresse og port på serveren PublicKey = Endpoint = :51190 Tilladte IPs = 0.0.0.0/0, : :/0
Indtast undernetadressen for klienten. Som tidligere beskrevet bruger vi 10.20.43.2
for klienten i dette eksempel.
Tilføj klientens private nøgle genereret i det foregående trin i linje 4 i konfigurationskoden ovenfor.
Under 'Peer' tilføjer vi oplysninger om Wireguard VPN-serveren vi ønsker at forbinde til.
Indtast serverens offentlige nøgle. Gå ind i serverens IP-adresse, som vi tidligere har noteret, og port i det givne format imod Slutpunkt. Dette er den port, vi har angivet i serverkonfigurationsfilen, og som VPN-tjenesten på serveren startede på.
Tilladte IP'er skal indtastes som givet (0.0.0.0/0), så enhver anmodning på en dynamisk offentlig IP, der bruges af klienten, altid videresendes til VPN-serveren.
Gem og afslut filen. Når du bruger vim, skal du trykke på Esc, og skriv derefter :wq
og tryk Gå ind for at gemme og afslutte.
Aktiver kundeservice at køre med hver boot, og starte den.
systemctl aktiver wg-quick@wg-client service wg-quick@wg-client start
Verificere hvis tjenesten er startet.
service wg-quick@wg-client status
Tilføjelse af peer til serveren
Nu har vi VPN-serveren og klienten op at køre. En sikker tunnel mellem de to etableres dog ikke, medmindre vi etablerer en peer-to-peer-forbindelse mellem serveren og klienten.
Gå tilbage til serveren. Først, stoppe VPN-tjenesten.
service wg-quick@wg0 stop
Åbn derefter konfigurationsfilen til tilføje konfiguration for peeren (klient).
vim /etc/wireguard/wg0.conf
Tilføj følgende linjer til filen.
[Peer] PublicKey = Tilladte IP'er = 10.20.43.2/32
Nu, start VPN-tjenesten igen.
service wg-quick@wg0 start
Det er det! Dette er al den konfiguration, der er nødvendig for Wireguard VPN-klient- og serveropsætning. Lad os nu teste vores VPN.
Test af VPN
Lad os først lave et simpelt ping fra klienten til serveren for at sikre, at VPN-tunnelkommunikationen fungerer. Kør følgende på klienten:
ping 10.20.43.1
Næste, åbne en webbrowser og åbne et hvilket som helst websted for at kontrollere, om du er i stand til at oprette forbindelse til internettet fra klientmaskinen. Du kan også kontrollere din internetforbindelse fra kommandolinjen ved hjælp af wget
.
wget
Nu har vi tjekket tunnelforbindelsen og internetforbindelsen. Hvis begge virker, skal vi nu sikre os, at al internettrafik, der kommer til klienten, passerer gennem serveren.
Til dette skal vi blot kontrollere klientens IP-adresse, som den ses af internettet. En måde at gøre det på er at gå til whatsmyip.org. Ellers fra kommandolinjen kan vi forespørge på en anden lignende tjeneste kaldet IP-info ved hjælp af Curl.
Kør følgende på klientmaskinen
krølle //ipinfo.io/ip
Ja. Det er den offentlige IP-adresse på Linode, hvor VPN-serveren er hostet. Det er sådan anonymitet opnås ved hjælp af VPN, da over hele internettet nu IP-adressen for VPN-serveren ses og ikke din computer.
Konklusion
Den nemme opsætning er en af de vigtigste fordele ved Wireguard i forhold til traditionel VPN-software som OpenVPN, som har brug for et højere niveau af netværks- og routingviden for at konfigurere. Der er dog en mangel på detaljeret officiel dokumentation for Wireguard, hvilket kan forårsage problemer, hvis din Wireguard-opsætning giver fejl eller ikke fungerer som forventet.
Ikke desto mindre er Wireguard et glimrende valg, hvis du ønsker en selvstændig hostet VPN til sikker kommunikation over internettet. For at lære mere om Wireguard og de protokoller og teknologier, den bruger, kan du tjekke det officielle websted.