Hvordan sette opp WireGuard VPN-server og klient på Ubuntu 20.04

Sett opp en selvvertsbasert VPN ved å bruke Wireguard

EN VPN (Virtual Private Network) lar brukeren koble til et privat nettverk eksternt som om brukerens datamaskin var direkte koblet til det private nettverket. Teknologien ble opprinnelig utviklet for å tillate ekstern tilgang til et selskaps interne private nettverk, for ansatte som faktisk ikke er tilstede på stedet til det interne nettverket.

En VPN-server er distribuert på stedet for det interne nettverket. Denne serveren er på det offentlige nettverket og kan nås ved hjelp av en VPN-klient av den ansatte. Autentisering er nødvendig for å koble til VPN-serveren. Kommunikasjonen mellom VPN-serveren og VPN-klienten er sikret ved hjelp av en tunneleringsprotokoll. Merk at denne kommunikasjonen kan være kryptert eller ikke, men vanligvis i de fleste VPN-protokoller er den kryptert.

En annen bruk av VPN er å få anonymitet når du får tilgang til Internett eller for å omgå geografiske restriksjoner som er pålagt mens du går inn på enkelte nettsteder. I slike tilfeller er ikke nettverket brukeren ønsker å koble seg til et privat nettverk, men i stedet Internett.

Mange VPN-protokoller har blitt utviklet gjennom årene. Disse protokollene bruker forskjellige tunnelprotokoller og krypteringsalgoritmer for kommunikasjon mellom serveren og klienten.

En slik protokoll, som har fått bred bruk nylig, er Wireguard. Wireguard er lettere, enklere og mer ytelsesdyktig enn kjente tradisjonelt brukte VPN-protokoller som OpenVPN, IPSec. Det er allerede implementert for Windows, Mac OS og et stort antall Linux-distribusjoner. I Linux er den implementert som en kjernemodul. Den er tilgjengelig i offisielle depoter til Ubuntu 20.04.

I denne artikkelen vil vi se hvordan du setter opp en Wireguard VPN-server og -klient i Ubuntu 20.04.

Installasjon

For denne artikkelen setter jeg opp en Wireguard Server på en Ubuntu 20.04 Linode og Wireguard Client på min lokale maskin med Ubuntu 20.04.

Pakken wireguard installerer både Wireguard Server og Client. Kjør følgende kommando på både servermaskinen og klientmaskinen.

sudo apt install wireguard

Serverkonfigurasjon

Sikkerhetsnøkler

Vi må generere et sett med offentlige/private nøkkelpar for å autentisere og sikre Wireguard-tilkoblingen. Dette kan gjøres ved å bruke følgende kommandoer:

sudo su cd /etc/wireguard umask 077 wg genkey | tee private_key | wg pubkey > public_key

Merk at vi utfører alle konfigurasjonsoppgavene som en superbruker. Årsaken er at tilgang til katalogen /etc/wireguard er forhindret for vanlige brukere, og katalogtilgang kan ikke oppnås med bare sudo-privilegier for en vanlig bruker.

Deretter setter vi filopprettingsmasken til 077. Dette betyr at hver gang en ny fil opprettes i denne mappen av en hvilken som helst prosess, vil dens tillatelser automatisk maskeres med 077. F.eks. hvis det opprettes en fil i denne mappen med tillatelser 777, blir den automatisk maskert og tillatelsene blir i praksis 700. Dette gjøres slik at kun eieren av filen har alle tillatelser på filen, og alle andre har ingen tillatelser.

På neste linje, vi genererer det offentlige/private nøkkelparet for serveren. De er lagret i filer privat_nøkkel og offentlig_nøkkel. For å se nøklene, kjør:

cat private_key cat public_key

Kopier den private nøkkelen, vi trenger den i neste trinn.

Merk: Del aldri din private nøkkel offentlig!

Konfigurasjonsfil

La oss lage en konfigurasjonsfil for Wireguard Server. Du kan velge hvilket som helst navn for filen. Vi lager en fil wg0.conf i dette eksemplet.

vim wg0.conf

Legg til følgende i filen.

[Grensesnitt] 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 GODTAR; 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 FREMOVER -i wg0 -j GODTAR; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE 

Lim inn den private nøkkelen som vi tidligere kopierte inn i linje 5 i koden ovenfor.

Vi må konfigurere Wireguard på et annet (virtuelt) subnett enn IP-adressen til serveren. Her har jeg brukt 10.20.43.1 for serveren og vil bruke 10.20.43.2 for klienten. Ethvert subnett kan brukes her. For å få IP-adressen til serveren og grensesnittet, kjør:

ifconfig

Legg merke til IP-adressen til serveren. Dette kreves under klientkonfigurasjon.

Grensesnittet som brukes av serveren, som vist på bildet ovenfor, er eth0. Grensesnittnavnet kan variere basert på brukerens nettverk, det kan være det wlan0 eller wlp2s0 i tilfelle brukeren er koblet til et WiFi-nettverk ved hjelp av et trådløst kort.

Bytt ut i PostUp og PostDown med grensesnittet ditt; i dette eksemplet er det eth0.PostUp og PostDown direktiver brukes til å spesifisere hvilke kommandoer som skal kjøres når serveren henholdsvis starter og stopper. I vårt eksempel bruker vi iptables kommando for å angi IP-regler slik at serverens IP-adresse deles av klientene. Reglene vil falle når serveren stopper.

Lagre og avslutt filen. Når du bruker vim, trykk Esc, skriv deretter :wq og trykk Tast inn for å lagre og avslutte.

Hvis du bruker en ufw brannmur på serveren, må vi tillate UDP-tilkoblinger til porten for VPN-server, 51190.

ufw tillat 51190/udp

Starter tjenesten

Nå som konfigurasjonen er ferdig, kan vi starte Wireguard VPN-tjenesten.

For å aktivere tjenesten for å starte ved oppstartstid, kjør:

systemctl aktiver wg-quick@wg0

Merk det her wg0 er navnet på konfigurasjonsfilen.

Å starte tjenesten, kjør:

tjeneste wg-quick@wg0 start

Bekrefte at tjenesten har startet vellykket:

tjeneste wg-quick@wg0 status

Bekreft at grensesnittet vi opprettet i konfigurasjonsfilen har startet, ved å bruke IP-kommandoen.

ip et show wg0

Wireguard VPN Server er nå satt opp og kjører. La oss konfigurere klienten nå.

Klientkonfigurasjon

Klientkonfigurasjon for Wireguard er mer eller mindre det samme som en serverkonfigurasjon. Vi genererer nøklene for klienten, og lager deretter en konfigurasjonsfil.

Sikkerhetsnøkler

For å generere den offentlige/private nøkkelen par for klienten, kjør:

sudo su cd /etc/wireguard umask 077 wg genkey | tee client_private_key | wg pubkey > client_public_key

De offentlige og private nøklene for klienten genereres nå henholdsvis i filer klient_privat_nøkkel og klient_offentlig_nøkkel.

Sjekk at de er opprettet ved hjelp av katt kommando.

cat client_private_key cat client_public_key

Kopier den viste private nøkkelen ettersom vi trenger å legge den til i konfigurasjonsfilen for klienten.

Konfigurasjonsfil

Opprett konfigurasjonsfilen med hvilket navn du ønsker. Vi vil lage den med navnet wg0-klient for dette eksemplet.

vim wg0-client.conf

Legg til følgende konfigurasjon.

[Grensesnitt] # IP-adresse og privat nøkkel til klientadressen = 10.20.43.2/24 PrivateKey = [Peer] # Offentlig nøkkel, IP-adresse og port til serveren PublicKey = Endpoint = :51190 AllowedIPs = 0.0.0.0/0, : :/0

Skriv inn subnettadressen for klienten. Som beskrevet tidligere bruker vi 10.20.43.2 for klienten i dette eksemplet.

Legg til klientens private nøkkel generert i forrige trinn i linje 4 i konfigurasjonskoden ovenfor.

Under ‘Peer’ legger vi til informasjon om Wireguard VPN-serveren vi ønsker å koble til.

Skriv inn den offentlige nøkkelen til serveren. Tast inn serverens IP-adresse, som vi tidligere noterte, og port i det gitte formatet mot Endepunkt. Dette er porten som vi spesifiserte i serverkonfigurasjonsfilen og som VPN-tjenesten på serveren startet på.

Tillatte IP-er bør angis som gitt (0.0.0.0/0), slik at enhver forespørsel på en dynamisk offentlig IP-adresse som brukes av klienten alltid vil videresendes til VPN-serveren.

Lagre og avslutt filen. Når du bruker vim, trykk Esc, skriv deretter :wq og trykk Tast inn for å lagre og avslutte.

Aktiver klienttjenesten å kjøre med hver oppstart, og starte den.

systemctl aktiver wg-quick@wg-client-tjenesten wg-quick@wg-client start

Bekrefte hvis tjenesten har startet.

tjeneste wg-quick@wg-client status

Legge til Peer til serveren

Nå har vi VPN-serveren og klienten i gang. En sikker tunnel mellom de to etableres imidlertid ikke med mindre vi etablerer en peer-to-peer-forbindelse mellom serveren og klienten.

Gå tilbake til serveren. Først, stoppe VPN-tjenesten.

tjeneste wg-quick@wg0 stopp

Deretter åpner du konfigurasjonsfilen til legge til konfigurasjon for peer (klient).

vim /etc/wireguard/wg0.conf

Legg til følgende linjer til filen.

[Peer] PublicKey = AllowedIPs = 10.20.43.2/32

Nå, start VPN-tjenesten på nytt.

tjeneste wg-quick@wg0 start

Det er det! Dette er all konfigurasjonen som trengs for Wireguard VPN-klient- og serveroppsett. La oss nå teste VPN-en vår.

Tester VPN

Først, la oss gjøre en enkel ping fra klienten til serveren for å sikre at VPN-tunnelkommunikasjonen fungerer. Kjør følgende på klienten:

ping 10.20.43.1

Neste, åpne en nettleser og åpne et hvilket som helst nettsted for å sjekke om du er i stand til å koble til Internett fra klientmaskinen. Du kan også sjekke Internett-tilkoblingen din fra kommandolinjen ved å bruke wget.

wget 

Nå har vi sjekket tunneltilkoblingen og Internett-tilkoblingen. Hvis begge fungerer, må vi nå sørge for at all internettrafikk som kommer til klienten går gjennom serveren.

For dette trenger vi bare å sjekke IP-adressen til klienten som sett av Internett. En måte å gjøre det på er å gå til whatsmyip.org. Ellers fra kommandolinjen, kan vi spørre en annen lignende tjeneste kalt IP-info, ved å bruke Curl.

Kjør følgende på klientmaskinen

curl //ipinfo.io/ip

Ja. Det er den offentlige IP-adressen til Linode der VPN-serveren er vert. Dette er hvordan anonymitet oppnås ved bruk av VPN, siden over hele Internett nå vises IP-en til VPN-serveren og ikke datamaskinen din.

Konklusjon

Det enkle oppsettet er en av de viktigste fordelene med Wireguard fremfor tradisjonell VPN-programvare som OpenVPN, som trenger et høyere nivå av nettverks- og rutingkunnskap for å sette opp. Det er imidlertid mangel på detaljert offisiell dokumentasjon for Wireguard som kan forårsake problemer hvis Wireguard-oppsettet ditt gir feil eller ikke fungerer som forventet.

Likevel er Wireguard et utmerket valg hvis du vil ha en selvvertsbasert VPN for sikker kommunikasjon over Internett. For å lære mer om Wireguard og protokollene og teknologiene den bruker, kan du sjekke ut den offisielle siden.