Stel een zelf-gehoste VPN in met Wireguard
Met een VPN (Virtual Private Network) kan de gebruiker op afstand verbinding maken met een privénetwerk alsof de computer van de gebruiker rechtstreeks is verbonden met het privé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 te 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 voorbeeld van zo'n protocol, dat de laatste tijd veel gebruikt wordt, 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 wireguard
installeert zowel Wireguard Server als Client. Voer de volgende opdracht uit op zowel de servercomputer als de clientcomputer.
sudo apt install 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-privileges voor een normale gebruiker.
Vervolgens stellen we het masker voor het maken van bestanden in op077
. 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 genereren we het openbare/private sleutelpaar voor de server. Ze worden opgeslagen in bestanden private_key
en public_key
. Voer het volgende uit om de sleutels te bekijken:
cat private_key
cat public_key
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. In wg0.conf
dit voorbeeld maken we een bestand aan.
vim wg0.conf
Voeg het volgende toe aan het bestand.
[Interface]
Address = 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 FORWARD -i wg0 -j ACCEPT; 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
Het gemarkeerde deel is het IP-adres
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 bovenstaande afbeelding, is eth0
. De interfacenaam kan verschillen op basis van het netwerk van de gebruiker, wlan0
of wlp2s0
indien de gebruiker is verbonden met een WiFi-netwerk met behulp van een draadloze kaart.
Vervang de in PostUp
en PostDown
door 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
opdracht 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. Als u vim gebruikt, drukt u op Esc , typt u :wq
en drukt u op Enter om op te slaan en af te sluiten.
Als u een ufw
firewall op de server gebruikt, moeten we UDP-verbindingen toestaan met de poort voor VPN-server, 51190.
ufw allow 51190/udp
De dienst starten
Nu de configuratie is voltooid, kunnen we de Wireguard VPN-service starten.
Voer het volgende uit om de service te laten starten tijdens het opstarten:
systemctl enable [email protected]
Merk op dat hier wg0
de naam van het configuratiebestand is.
Voer het volgende uit om de service te starten:
service [email protected] start
Controleer of de service succesvol is gestart:
service [email protected] status
Controleer met de IP-opdracht of de interface die we in het configuratiebestand hebben gemaakt, is gestart.
ip a 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
Voer het volgende uit om het openbare/private sleutelpaar voor de client te genereren :
sudo su
cd /etc/wireguard
umask 077
wg genkey | tee client_private_key | wg pubkey > client_public_key
De publieke en private sleutels voor de client worden nu respectievelijk gegenereerd in bestanden client_private_key
en client_public_key
.
Controleer met de cat
opdracht of ze zijn gemaakt .
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 Address and Private Key of the Client
Address = 10.20.43.2/24
PrivateKey =
[Peer]
# Public key, IP Address and Port of the Server
PublicKey =
Endpoint = :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 die in de vorige stap is gegenereerd toe aan 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 het IP-adres van de server in , zoals we eerder hebben opgemerkt, en poort in het opgegeven formaat tegen Endpoint . 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. Als u vim gebruikt, drukt u op Esc , typt u :wq
en drukt u op Enter om op te slaan en af te sluiten.
Schakel de clientservice in om bij elke opstart te worden uitgevoerd en start deze.
systemctl enable [email protected]
service [email protected] start
Controleer of de service is gestart.
service [email protected] 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. Ten eerste, stop de VPN-dienst .
service [email protected] stop
Open vervolgens het configuratiebestand om configuratie voor de peer (client) toe te voegen .
vim /etc/wireguard/wg0.conf
Voeg de volgende regels toe aan het bestand.
[Peer]
PublicKey =
AllowedIPs = 10.20.43.2/32
Nu start de VPN-service opnieuw .
service [email protected] 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 simpele ping doen van de client naar de server, om er zeker van te zijn dat de VPN-tunnelcommunicatie werkt. Voer het volgende uit op de client :
ping 10.20.43.1
Vervolgens opent u een webbrowser en open een website om te controleren of je in staat om verbinding met het internet van de client machine. 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 https://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.
Conclusie
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 .