Tegenwoordig wordt VPN-technologie populairder. Gewone gebruikers gebruiken VPN om veilig toegang te krijgen tot internet. Het helpt ook om lokaal geblokkeerde websites en services te omzeilen en beschermt tegen mogelijk extern kwaadaardig gedrag. Wanneer u verbinding maakt met een VPN-server, is er een veilige tunnel tussen uw computer en de server die niet van buitenaf toegankelijk is, dus de VPN-server wordt uw internettoegangspunt. Er zijn veel VPN-services beschikbaar, zowel gratis als betaald, maar als ze om een of andere reden niet voor u werken, kunt u altijd uw eigen VPN-server configureren.
Om je eigen VPN te gebruiken, moet je een VPS-server huren . Er is verschillende software waarmee je een VPN-verbinding kunt maken. Deze software verschilt van elkaar in de ondersteunde besturingssystemen en de gebruikte algoritmes. We bekijken twee onafhankelijke benaderingen voor het opzetten van een VPN-server. De eerste is gebaseerd op het PPTP-protocol, dat inmiddels als verouderd en onveilig wordt beschouwd, maar wel heel eenvoudig te configureren is. De andere maakt gebruik van de moderne en veilige software OpenVPN, maar vereist de installatie van een clientapplicatie van een derde partij en een meer uitgebreid configuratieproces.
In onze testomgeving gaan we een virtuele server gebruiken die aangestuurd wordt door Ubuntu Server 18.04. Een firewall wordt op de server uitgeschakeld omdat de configuratie een apart artikel verdient. We zullen het installatieproces op Windows 10 beschrijven.
Voorbereiding
Ongeacht welke VPN-server u kiest, de internettoegang wordt ingesteld door geïntegreerde middelen van het besturingssysteem. Om internettoegang te openen via een externe service-interface moet u packet forwarding tussen de interfaces toestaan en network address translation configureren.
Om pakketdoorsturing in te schakelen, opent u het bestand “/etc/sysctl.conf” en wijzigt u de waarde van de parameter “net.ipv4.ip_forward” in 1.
Om wijzigingen toe te passen zonder de computer opnieuw op te starten, voert u de opdracht uit
sudo sysctl -p /etc/sysctl.conf
Netwerkadresvertaling wordt geconfigureerd met behulp van iptables . Controleer eerst de naam van uw externe netwerkinterface met het commando "ip link show" - u hebt deze nodig in de volgende stap. In ons geval is de naam "ens3".
Schakel netwerkadresvertaling in op uw externe interface voor alle lokale netwerkknooppunten.
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Houd er rekening mee dat u de echte naam van de interface van uw server moet opgeven. Deze kan afwijken van de onze.
Standaard worden alle regels die door iptables zijn aangemaakt, gereset na een herstart van de server. Om dit te voorkomen, gebruikt u het hulpprogramma "iptables-persistent" . Installeer het volgende pakket:
sudo apt install iptables-persistent
Tijdens het installatieproces verschijnt er een configuratievenster waarin u wordt gevraagd de huidige iptables-regels op te slaan. Aangezien de regels al zijn gedefinieerd, hoeft u alleen maar te bevestigen en twee keer op "Ja" te klikken . De regels worden nu automatisch toegepast na het herstarten van de server.
PPTP-server
Server configuratie
Installeer het pakket:
sudo apt install pptpd
Nadat de installatie is voltooid, opent u het bestand “/etc/pptpd.conf” in een teksteditor naar keuze en bewerkt u het als volgt:
option /etc/ppp/pptpd-options #path to the settings file
logwtmp #client connections logging mechanism
connections 100 #number of simultaneous connections
localip 172.16.0.1 #the address that will serve as a client gateway
remoteip 172.16.0.2-200 #range of addresses
Bewerk vervolgens het bestand “/etc/ppp/pptpd-options” . De meeste parameters zijn standaard ingesteld.
#name of the service for new client records
name pptpd
#restrict obsolete authentication methods
refuse-pap
refuse-chap
refuse-mschap
#allow a more secure authentication method
require-mschap-v2
#enable encryption
require-mppe-128
#specify dns servers for clients (use any available servers)
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
novj
novjccomp
nologfd
In de volgende stap moet u een record aanmaken voor clientverbindingen. Stel dat u een gebruiker "vpnuser" wilt toevoegen met wachtwoord "1" en dynamische adressering voor hem wilt toestaan. Open het bestand "/etc/ppp/chap-secrets" en voeg de volgende regel met de parameters van de gebruiker aan het einde van het bestand toe:
vpnuser pptpd 1 *
De waarde "pptpd" is de naam van de service die we hebben opgegeven in het bestand "pptpd-options" . In plaats van "*" kunt u een vast IP-adres opgeven. Het bestand "chap-secrets" zou er dan als volgt uit moeten zien:
Om de instellingen toe te passen, reset u de pptpd- service en voegt u deze toe aan de automatische laadprocessen.
sudo systemctl restart pptpd
sudo systemctl enable pptpd
De serverconfiguratie is voltooid.
Client configuratie
Open 'Start' - 'Instellingen' - 'Netwerk en internet' - 'VPN' en klik op 'Een VPN-verbinding toevoegen'.
Voer de verbindingsparameters in het geopende venster in en klik op 'Opslaan'.
- VPN-provider: “Windows (ingebouwd)”
- Verbindingsnaam: “vpn_connect” (u kunt elke naam kiezen)
- Servernaam of adres: (geef het externe IP-adres van de server op)
- VPN-type: “Auto”
- Type aanmeldgegevens: “Gebruikersnaam en wachtwoord”
- Gebruikersnaam: VPN-gebruiker (naam gespecificeerd in het bestand “chap-secrets” op de server)
- Wachtwoord: 1 (zoals in het bestand “chap-secrets”)
Nadat u de parameters hebt opgeslagen, ziet u de nieuwe VPN-verbinding in het venster. Klik met de linkermuisknop op de verbinding en selecteer 'Verbinden' . Bij een succesvolle verbinding ziet u de status 'Verbonden'.
In de opties vindt u de interne adressen van de client en de server. Het veld 'Bestemmingsadres' toont het externe serveradres.
Wanneer de verbinding tot stand is gebracht, wordt het interne IP-adres van de server, in ons geval 172.16.0.1 , de standaardgateway voor alle uitgaande pakketten.
Met behulp van een online service kunt u ervoor zorgen dat het externe IP-adres van de computer nu hetzelfde is als het IP-adres van uw VPN-server.
OpenVPN-server
Server configuratie
Laten we het permissieniveau van de huidige gebruiker verhogen, want voor onze verdere configuratie hebben we root-toegang nodig.
sudo -s
Installeer alle benodigde pakketten. We hebben het "Easy-RSA" -pakket nodig om de encryptiesleutels te beheren.
apt install openvpn easy-rsa iptables-persistent
Sta binnenkomende verbindingen op poort 1194 toe via het UDP-protocol en pas iptables-regels toe.
sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT
sudo netfilter-persistent save
Maak een map met gekopieerde bestanden uit het pakket “Easy-RSA” en navigeer ernaartoe.
make-cadir ~/openvpn
cd ~/openvpn
Genereer Public Key Infrastructure (PKI).
./easyrsa init-pki
Genereer het basiscertificaat van de certificeringsinstantie (CA).
./easyrsa build-ca
Tijdens het aanmaken wordt u gevraagd een wachtwoord in te stellen en te onthouden. U moet ook vragen beantwoorden en informatie over de sleuteleigenaar invoeren. U kunt de standaardwaarden tussen vierkante haken laten staan. Druk op "Enter" om de invoer te voltooien.
Genereer een privésleutel en een certificaataanvraag. Geef als argument een willekeurige naam op; in ons geval is dat "vpn-server".
./easyrsa gen-req vpn-server nopass
Laat de waarde voor Algemene naam op de standaardwaarde staan.
Onderteken de gegenereerde servercertificaataanvraag.
./easyrsa sign-req server vpn-server
Beantwoord in deze stap 'ja' om de handtekening te bevestigen en voer vervolgens het wachtwoord in dat is aangemaakt tijdens het genereren van het rootcertificaat.
Genereer Diffie-Hellman-parameters. Deze parameters worden gebruikt voor veilige sleuteluitwisseling tussen de server en de client.
./easyrsa gen-dh
Alle benodigde bestanden zijn gegenereerd. Laten we een map "keys" aanmaken in de OpenVPN-werkmap om de sleutels op te slaan en de aangemaakte bestanden daarheen kopiëren.
mkdir /etc/openvpn/keys
sudo cp pki/ca.crt pki/issued/vpn-server.crt pki/private/vpn-server.key pki/dh.pem /etc/openvpn/keys
Configureer NAT met behulp van iptables regels. Maak een bestand met de naam nat en open het voor bewerking in de /etc/openvpn/ directory.
#!/bin/sh
# Reset firewall settings
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# Allow OpenVPN connections (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
# (eth0 in our case, may vary):
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
# (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Enable masquerading for the local network (eth0 in our case, may vary)
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
# Deny incoming connections from outside
iptables -A INPUT -i eth0 -j DROP
# Deny transit traffic from outside (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -j DROP
sudo netfilter-persistent save
Sla het bestand op en maak het uitvoerbaar.
sudo chmod 755 /etc/openvpn/nat
Kopieer de serverconfiguratiesjabloon.
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
Open het bestand “/etc/openvpn/server.conf” om het te bewerken, controleer of het de volgende regels bevat en pas ze indien nodig aan:
#Port, protocol, and interface
port 1194
proto udp
dev tun
#Path to the encryption keys
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpn-server.crt
key /etc/openvpn/keys/vpn-server.key
dh /etc/openvpn/keys/dh.pem
#SHA256 Hashing Algorithm
auth SHA256
#Switching off additional encryption
#tls-auth ta.key 0
#Network parameters
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Ping every 10 seconds to check the connection.
keepalive 10 120
#Set up AES-256 encryption for the tunnel.
cipher AES-256-GCM
#Demoting the service OpenVPN after launch
user nobody
group nogroup
#Switching on parameters saving after reboot
persist-key
persist-tun
#Set log verbosity
verb 3
#Redirecting logs
log-append /var/log/openvpn/openvpn.log
#Script the rule installation launch.
up /etc/openvpn/nat
Schakel verkeer doorsturen op de server in.
sudo sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
Start OpenVPN om de configuratie toe te passen.
systemctl restart openvpn@server
De serverconfiguratie is voltooid!
Client configuratie
Ga naar de officiële website van OpenVPN “ https://openvpn.net ” en vervolgens naar het gedeelte “COMUNITY”.
Scroll naar beneden en download het installatieprogramma voor jouw besturingssysteemversie. In ons geval is dat Windows 11 ARM64.
Installeer de applicatie en laat alle parameters op de standaardwaarden staan.
In de volgende fase moet u het volgende bestand op de server voorbereiden en naar de clientcomputer overbrengen:
- openbare en privésleutels;
- kopie van de sleutel van het certificeringscentrum;
- configuratiebestand sjabloon.
Maak verbinding met de server, verhoog uw rechten en navigeer naar de door u aangemaakte directory "~/openvpn".
sudo -s
cd ~/openvpn
Genereer een privésleutel en een certificaataanvraag voor de client. Geef als argument een willekeurige naam op; in ons geval is dat "client1".
./easyrsa gen-req client1 nopass
Voer het wachtwoord in dat we hebben ingesteld bij het aanmaken van het rootcertificaat en laat de waarde voor de Algemene naam op de standaardwaarde staan.
Onderteken de gegenereerde clientcertificaataanvraag.
./easyrsa sign-req client client1
Beantwoord in deze stap 'ja' om de handtekening te bevestigen en voer vervolgens het wachtwoord in dat is aangemaakt tijdens het genereren van het rootcertificaat.
Voor het gemak maken we een map met de naam 'client1' in de thuismap en kopiëren we alle bestanden die we naar de clientcomputer willen overbrengen naar deze map.
mkdir ~/client1
cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt ~/client1/
Kopieer het clientconfiguratiebestandsjabloon naar dezelfde map. Wijzig de bestandsextensie naar “.ovpn” tijdens het kopiëren.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1/client.ovpn
Wijzig de eigenaar van de map en alle bestanden “~/client1/” zodat deze naar de client kunnen worden gedistribueerd. Laten we in ons geval “mihail” de eigenaar maken.
chown -R mihail:mihail ~/client1
Ga naar de clientcomputer en kopieer de inhoud van de map “~/client1/” . Dit kunt u doen met behulp van het hulpprogramma “PSCP” , dat bij Putty wordt geleverd.
PSCP -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1
Je kunt de sleutelbestanden “ca.crt” , “client1.crt” en “client1.key” opslaan waar je maar wilt. In ons geval staan ze in de map “c:\Program Files\OpenVPN\keys” , en het configuratiebestand “client.ovpn” plaatsen we in de map “c:\Program Files\OpenVPN\config”.
Laten we nu de client configureren. Open het bestand “c:\Program Files\OpenVPN\config\client.ovpn” in een teksteditor en bewerk de volgende regels:
#announce that this is the client
client
#interface and protocol just like on the server
dev tun
proto udp
#IP address of the server and port
remote ip_address 1194
#saving parameters after reload
persist-key
persist-tun
#key paths
ca “c:\\Program Files\\OpenVPN\\keys\\ca.cert”
cert “c:\\Program Files\\OpenVPN\\keys\\client1.crt”
key “c:\\Program Files\\OpenVPN\\keys\\client1.key”
#enable server verification
remote-cert-tls server
#disable extra encryption
#tls-auth ta.key 1
cipher AES-256-CBC
auth-nocache
verb 3
Laat de rest onaangeroerd.
Sla het bestand op en start de clientapplicatie "OpenVPN GUI".
Klik met de rechtermuisknop op het app-pictogram in de taakbalk en kies 'Verbinden' . Als de verbinding succesvol is, wordt het pictogram groen.
Controleer via een onlinedienst of uw openbare IP-adres is gewijzigd en nu hetzelfde is als het IP-adres van de server.