Hoe WireGuard VPN-server en -client op Ubuntu 20.04 in te stellen?

Stel een zelf-gehoste VPN in met Wireguard

EEN VPN (virtueel privénetwerk) stelt de gebruiker in staat om op afstand verbinding te maken met een particulier netwerk alsof de computer van de gebruiker rechtstreeks is verbonden met het particuliere netwerk. De technologie is oorspronkelijk ontwikkeld om externe toegang tot het interne privénetwerk van een bedrijf mogelijk te maken voor werknemers die niet daadwerkelijk aanwezig zijn op de locatie van het interne netwerk.

Op de locatie van het interne netwerk wordt een VPN Server ingezet. Deze server bevindt zich op het openbare netwerk en is door de medewerker via een VPN-client te benaderen. Authenticatie is nodig om verbinding te maken met de VPN-server. De communicatie tussen de VPN-server en VPN-client is beveiligd met behulp van een tunnelingprotocol. Merk op dat deze communicatie al dan niet versleuteld kan zijn, maar meestal in de meeste VPN-protocollen is het versleuteld.

Een ander gebruik van VPN is om anonimiteit verkrijgen bij toegang tot internet of om geografische beperkingen te omzeilen die zijn opgelegd bij het bezoeken van sommige websites. In dergelijke gevallen is het netwerk waarmee de gebruiker verbinding wil maken geen particulier netwerk, maar internet.

In de loop der jaren zijn er veel VPN-protocollen ontwikkeld. Deze protocollen maken gebruik van verschillende tunnelingprotocollen en encryptie-algoritmen voor communicatie tussen de server en de client.

Een zo'n protocol, dat de laatste tijd op grote schaal wordt gebruikt, is: Wireguard. Wireguard is lichter, eenvoudiger en krachtiger dan de bekende traditioneel gebruikte VPN-protocollen zoals OpenVPN, IPSec. Het is al geïmplementeerd voor Windows, Mac OS en een groot aantal Linux-distributies. In Linux is het geïmplementeerd als een kernelmodule. Het is beschikbaar in officiële repositories van Ubuntu 20.04.

In dit artikel zullen we zien hoe u een Wireguard VPN-server en -client in Ubuntu 20.04 kunt instellen.

Installatie

Voor dit artikel ben ik een Wireguard-server aan het opzetten op een Ubuntu 20.04 Linode en Wireguard Client op mijn lokale computer met Ubuntu 20.04.

Het pakket bewaker installeert zowel Wireguard Server als Client. Voer de volgende opdracht uit: op zowel de servercomputer als de clientcomputer.

sudo apt installeer wireguard

Serverconfiguratie

Beveiligingssleutels

We moeten een set openbare/private sleutelparen genereren om de Wireguard-verbinding te verifiëren en te beveiligen. Dit kan met de volgende commando's:

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

Merk op dat we alle configuratietaken als superuser uitvoeren. De reden is dat toegang tot de directory /etc/wireguard wordt voorkomen voor normale gebruikers, en directory-toegang kan niet worden verkregen met alleen sudo-rechten voor een normale gebruiker.

Vervolgens stellen we het masker voor het maken van bestanden in op 077. Dit betekent dat wanneer door een proces een nieuw bestand in deze map wordt gemaakt, de machtigingen automatisch worden gemaskeerd met 077. Bv. als een bestand in deze map wordt gemaakt met machtigingen 777, wordt het automatisch gemaskeerd en worden de machtigingen effectief 700. Dit wordt gedaan zodat alleen de eigenaar van het bestand alle machtigingen voor het bestand heeft en alle anderen geen machtigingen.

Op de volgende regel, we genereren het openbare/private sleutelpaar voor de server. Ze worden opgeslagen in bestanden prive sleutel en publieke sleutel. Voer het volgende uit om de sleutels te bekijken:

kat privé_sleutel kat openbare_sleutel

Kopieer de privésleutel, we hebben deze nodig in de volgende stap.

Opmerking: Deel uw privésleutel nooit openbaar!

Configuratiebestand

Laten we een configuratiebestand maken voor de Wireguard Server. U kunt elke naam voor het bestand kiezen. We zullen een bestand maken wg0.conf in dit voorbeeld.

vim wg0.conf

Voeg het volgende toe aan het bestand.

[Interface] Adres = 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 MASKERADE; ip6tables -A FORWARD -i wg0 -j ACCEPTEREN; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D VOORUIT -i wg0 -j ACCEPTEREN; iptables -t nat -D POSTROUTING -o eth0 -j MASKERADE; ip6tables -D VOORUIT -i wg0 -j ACCEPTEREN; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE 

Plak de privésleutel die we eerder in regel 5 in de bovenstaande code hebben gekopieerd.

We moeten Wireguard configureren op een ander (virtueel) subnet dan het IP-adres van de server. Hier heb ik 10.20.43.1 voor de server gebruikt en 10.20.43.2 voor de client. Elk subnet kan hier worden gebruikt. Voer het volgende uit om het IP-adres van de server en de interface te krijgen:

ifconfig

Noteer het IP-adres van de server. Dit is vereist tijdens de clientconfiguratie.

De interface die door de server wordt gebruikt, zoals te zien is in de afbeelding hierboven, is: eth0. De interfacenaam kan verschillen op basis van het netwerk van de gebruiker, het kan zijn: wlan0 of wlp2s0 in het geval de gebruiker is verbonden met een WiFi-netwerk met behulp van een draadloze kaart.

Vervang de in PostUp en PostDown met uw interface; in dit voorbeeld is het eth0.PostUp en PostDown richtlijnen worden gebruikt om aan te geven welke opdrachten moeten worden uitgevoerd wanneer de server respectievelijk start en stopt. In ons voorbeeld gebruiken we de iptables commando om IP-regels zo in te stellen dat het IP-adres van de server wordt gedeeld door de clients. De regels vallen weg zodra de server stopt.

Sla het bestand op en sluit het af. Druk tijdens het gebruik van vim op Esc, typ dan :wq en druk op Binnenkomen om op te slaan en af ​​te sluiten.

Als u een ufw firewall op de server, moeten we UDP-verbindingen toestaan ​​met de poort voor VPN-server, 51190.

ufw toestaan ​​51190/udp

De dienst starten

Nu de configuratie is voltooid, kunnen we de Wireguard VPN-service starten.

In staat te stellen de service om te starten bij het opstarten, voer het volgende uit:

systemctl activeer wg-quick@wg0

Merk op dat hier wg0 is de naam van het configuratiebestand.

Beginnen de dienst, voer uit:

service wg-quick@wg0 start

Verifiëren dat de service succesvol is gestart:

service wg-quick@wg0 status

Controleer of de interface we hebben gemaakt in het configuratiebestand is gestart, met behulp van de IP-opdracht.

ip een show wg0

De Wireguard VPN-server is nu ingesteld en actief. Laten we nu de client configureren.

Clientconfiguratie

Clientconfiguratie voor Wireguard is min of meer hetzelfde als een serverconfiguratie. We genereren de sleutels voor de client en maken vervolgens een configuratiebestand.

Beveiligingssleutels

Om de publieke/private sleutel te genereren paar voor de client, voer uit:

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

De openbare en privésleutels voor de client worden nu respectievelijk in bestanden gegenereerd client_private_key en client_public_key.

Controleer of ze zijn gemaakt met kat opdracht.

cat client_private_key cat client_public_key

Kopieer de weergegeven privésleutel omdat we deze moeten toevoegen aan het configuratiebestand voor de klant.

Configuratiebestand

Maak het configuratiebestand met elke gewenste naam. We zullen het maken met de naam wg0-client voor dit voorbeeld.

vim wg0-client.conf

Voeg de volgende configuratie toe.

[Interface] # IP-adres en privésleutel van het clientadres = 10.20.43.2/24 PrivateKey = [Peer] # Openbare sleutel, IP-adres en poort van de server PublicKey = eindpunt = :51190 AllowedIPs = 0.0.0.0/0, : :/0

Voer het subnetadres voor de client in. Zoals eerder beschreven, gebruiken we 10.20.43.2 voor de klant in dit voorbeeld.

Voeg de persoonlijke sleutel van de klant toe gegenereerd in de vorige stap in regel 4 in de bovenstaande configuratiecode.

Onder 'Peer' voegen we informatie toe over de Wireguard VPN-server waarmee we verbinding willen maken.

Voer de openbare sleutel van de server in. Voer de in IP-adres van de server, die we eerder hebben opgemerkt, en port in het opgegeven formaat tegen Eindpunt. Dit is de poort die we hebben opgegeven in het serverconfiguratiebestand en waarop de VPN-service op de server is gestart.

Toegestane IP's moeten worden ingevoerd zoals opgegeven (0.0.0.0/0), zodat elk verzoek op een dynamisch openbaar IP-adres dat door de client wordt gebruikt, altijd wordt doorgestuurd naar de VPN-server.

Sla het bestand op en sluit het af. Druk tijdens het gebruik van vim op Esc, typ dan :wq en druk op Binnenkomen om op te slaan en af ​​te sluiten.

Schakel de klantenservice in om bij elke keer opstarten uit te voeren en te starten.

systemctl activeer wg-quick@wg-client service wg-quick@wg-client start

Verifiëren als de service is gestart.

service wg-quick@wg-client status

Peer aan de server toevoegen

Nu hebben we de VPN-server en -client in gebruik. Er wordt echter geen veilige tunnel tussen de twee tot stand gebracht, tenzij we een peer-to-peer-verbinding tot stand brengen tussen de server en de client.

Ga terug naar de server. Eerste, stop de VPN-service.

service wg-quick@wg0 stop

Open vervolgens het configuratiebestand om: configuratie toevoegen voor de peer (cliënt).

vim /etc/wireguard/wg0.conf

toevoegen de volgende regels naar het bestand.

[Peer] PublicKey = Toegestane IP's = 10.20.43.2/32

Nutsvoorzieningen, start de VPN-service opnieuw.

service wg-quick@wg0 start

Dat is het! Dit is alle configuratie die nodig is voor de installatie van de Wireguard VPN-client en -server. Laten we nu onze VPN testen.

De VPN testen

Laten we eerst een eenvoudige ping uitvoeren van de client naar de server om ervoor te zorgen dat de VPN-tunnelcommunicatie werkt. Voer het volgende uit op de client::

ping 10.20.43.1

Volgende, open een webbrowser en open een willekeurige website om te controleren of u verbinding kunt maken met internet vanaf de clientcomputer. U kunt uw internetverbinding ook controleren vanaf de opdrachtregel met wget.

wget 

Nu hebben we de tunnelconnectiviteit en de internetverbinding gecontroleerd. Als beide werken, moeten we er nu voor zorgen dat al het internetverkeer dat naar de client komt via de server gaat.

Hiervoor hoeven we alleen het IP-adres van de client te controleren zoals dit op internet wordt gezien. Een manier om dit te doen is door naar whatsmyip.org te gaan. Of anders kunnen we vanaf de opdrachtregel een andere soortgelijke service opvragen, genaamd IP-info, met behulp van Curl.

Voer het volgende uit op de clientcomputer:

curl //ipinfo.io/ip

Ja. Het is het openbare IP-adres van de Linode waar de VPN-server wordt gehost. Dit is hoe anonimiteit wordt bereikt met behulp van VPN, aangezien nu overal op internet het IP-adres van de VPN-server wordt gezien en niet van uw computer.

Gevolgtrekking

Het installatiegemak is een van de belangrijkste voordelen van Wireguard ten opzichte van traditionele VPN-software zoals OpenVPN, waarvoor een hoger niveau van netwerk- en routeringskennis nodig is om in te stellen. Er is echter een gebrek aan gedetailleerde officiële documentatie voor Wireguard, wat problemen kan veroorzaken als uw Wireguard-configuratie fouten veroorzaakt of niet werkt zoals verwacht.

Desalniettemin is Wireguard een uitstekende keuze als u een zelf gehoste VPN wilt voor veilige communicatie via internet. Voor meer informatie over Wireguard en de protocollen en technologieën die het gebruikt, kun je de officiële site bezoeken.