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.