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 uw VPN te laten draaien, moet u: VPS-server huren. Er is verschillende software waarmee u een VPN-verbinding kunt maken. Deze verschillen van elkaar door de ondersteunde besturingssystemen en gebruikte algoritmen. We zullen twee onafhankelijke benaderingen bekijken om een VPN-server in te stellen. De eerste is gebaseerd op het PPTP-protocol dat al als verouderd en niet veilig wordt beschouwd, maar heel eenvoudig te configureren is. De andere maakt gebruik van moderne en veilige software OpenVPN, maar vereist de installatie van een clienttoepassing van derden en een grondiger installatieproces.
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 veranderen “net.ipv4.ip_forward” parameterwaarde 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 door middel van iptablesControleer eerst de naam van uw externe netwerkinterface door de opdracht uit te voeren "ip-link tonen" - je hebt het nodig bij de volgende stap. Onze naam is “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 gemaakt, gereset na het opnieuw opstarten van de server. Om dat te voorkomen, gebruikt u “iptables-persistent” hulpprogramma. Installeer het volgende pakket:
sudo apt install iptables-persistent
Op een bepaald punt tijdens het installatieproces ziet u een configuratievenster dat u zal voorstellen om de huidige iptables-regels op te slaan. Omdat de regels al zijn gedefinieerd, hoeft u alleen maar te bevestigen en te klikken "Ja" tweemaal. Vanaf nu worden de regels automatisch toegepast na het opnieuw opstarten 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 willekeurige teksteditor en bewerk 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 daarna het bestand “/etc/ppp/pptpd-opties”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 fase moet u een record maken voor clientverbindingen. Stel dat u een gebruiker wilt toevoegen “vpngebruiker” met wachtwoord "1" en dynamische adressering voor hem toestaan. Open het bestand “/etc/ppp/chap-geheimen” en voeg de volgende regel met de parameters van de gebruiker toe aan het einde van het bestand:
vpnuser pptpd 1 *
“pptpd” waarde is de naam van de service die we in het bestand hebben opgegeven “pptpd-opties”. In plaats van "*" u kunt een vast IP-adres opgeven. In het resultaat, het bestand “geheimen van kerels” Zou er als volgt uitzien:
Om de instellingen toe te passen, reset u de pptpd service en voeg deze toe aan autoloading.
sudo systemctl restart pptpd
sudo systemctl enable pptpd
De serverconfiguratie is voltooid.
Client configuratie
Open "Begin" - “Instellingen” - Netwerk & Internet - "VPN" en klik op “VPN-verbinding toevoegen”
Voer de verbindingsparameters in het geopende venster in en klik "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 "Connect". In het geval van een succesvolle verbinding, zult u zien "Verbonden" statuut.
In de Opties vindt u de interne adressen van de client en de server. Veld “Bestemmingsadres” geeft het externe serveradres weer.
Wanneer verbonden, het interne IP-adres van de server, 172.16.0.1 wordt in ons geval 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 zullen nodig hebben “Eenvoudig-RSA” pakket om 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” Zorg ervoor dat het bestand de volgende regels bevat en bewerk ze indien nodig:
#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”, ga naar de “GEMEENSCHAP” pagina.
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 de client config file template naar dezelfde directory. Wijzig de bestandsextensie naar “.ovpn” tijdens het kopiëren.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1/client.ovpn
De eigenaar van de map en alle bestanden wijzigen “~/klant1/” om ze te kunnen distribueren naar de klant. Laten we “Mihail” in ons geval de eigenaar.
chown -R mihail:mihail ~/client1
Ga naar de clientcomputer en kopieer de inhoud van de “~/klant1/” map. Dat kan met behulp van “PSCP-programma” hulpprogramma dat bij Putty hoort.
PSCP -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1
U kunt sleutelbestanden opslaan “ca.crt”, “klant1.crt”, “client1.sleutel” waar je maar wilt. In ons geval staan ze in deze map “c:\Program Files\OpenVPN\sleutels”, en we modereren het configuratiebestand “klant.ovpn” in de “c:\Programmabestanden\OpenVPN\config” directory.
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 clienttoepassing “OpenVPN-GUI”.
Klik met de rechtermuisknop op het app-pictogram in de taakbalk en kies "Connect"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.