Obecnie technologia VPN staje się coraz bardziej popularna. Zwykli użytkownicy używają VPN, aby bezpiecznie uzyskać dostęp do Internetu. Pomaga również ominąć lokalnie zablokowane witryny i usługi oraz chronić przed możliwym zewnętrznym złośliwym zachowaniem. Gdy łączysz się z serwerem VPN, istnieje bezpieczny tunel między komputerem a serwerem, do którego nie można uzyskać dostępu z zewnątrz, więc serwer VPN staje się punktem dostępu do Internetu. Istnieje wiele usług VPN, zarówno bezpłatnych, jak i płatnych, ale jeśli z jakiegoś powodu nie działają dla Ciebie, zawsze możesz skonfigurować własny serwer VPN.
Aby uruchomić własną sieć VPN, należy wynająć serwer VPS . Istnieją różne programy umożliwiające nawiązanie połączenia VPN. Różnią się one między sobą obsługiwanymi systemami operacyjnymi i używanymi algorytmami. Przyjrzymy się dwóm niezależnym metodom konfiguracji serwera VPN. Pierwsza z nich opiera się na protokole PPTP, który jest już uważany za przestarzały i niebezpieczny, ale jest naprawdę łatwy w konfiguracji. Druga wykorzystuje nowoczesne i bezpieczne oprogramowanie OpenVPN, ale wymaga instalacji zewnętrznej aplikacji klienckiej i bardziej szczegółowego procesu konfiguracji.
W naszym środowisku testowym będziemy używać serwera wirtualnego opartego na Ubuntu Server 18.04. Zapora sieciowa zostanie wyłączona na serwerze, ponieważ jej konfiguracja zasługuje na osobny artykuł. Opiszemy proces konfiguracji w systemie Windows 10.
Przygotowanie
Niezależnie od tego, który serwer VPN wybierzesz, dostęp do Internetu zostanie skonfigurowany za pomocą zintegrowanych środków systemu operacyjnego. Aby otworzyć dostęp do Internetu za pośrednictwem zewnętrznego interfejsu usługowego, musisz zezwolić na przekazywanie pakietów między interfejsami i skonfigurować translację adresów sieciowych.
Aby włączyć przekazywanie pakietów, otwórz plik „/etc/sysctl.conf” i zmień wartość parametru „net.ipv4.ip_forward” na 1.
Aby zastosować zmiany bez ponownego uruchamiania komputera, uruchom polecenie
sudo sysctl -p /etc/sysctl.conf
Translację adresów sieciowych konfiguruje się za pomocą iptables . Najpierw sprawdź nazwę zewnętrznego interfejsu sieciowego, uruchamiając polecenie „ip link show” – będzie ona potrzebna w następnym kroku. Nasza nazwa to „ens3”.
Włącz translację adresów sieciowych na zewnętrznym interfejsie dla wszystkich lokalnych węzłów sieciowych.
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Należy pamiętać, że należy podać prawdziwą nazwę interfejsu serwera. Może się ona różnić od naszej.
Domyślnie wszystkie reguły utworzone przez iptables są resetowane po restarcie serwera. Aby temu zapobiec, użyj narzędzia „iptables-persistent” . Zainstaluj następujący pakiet:
sudo apt install iptables-persistent
W pewnym momencie instalacji pojawi się okno konfiguracji z sugestią zapisania bieżących reguł iptables. Ponieważ reguły są już zdefiniowane, wystarczy je potwierdzić i dwukrotnie kliknąć „Tak” . Reguły zostaną zastosowane automatycznie po restarcie serwera.
Serwer PPTP
Konfiguracja serwera
Zainstaluj pakiet:
sudo apt install pptpd
Po zakończeniu instalacji otwórz plik „/etc/pptpd.conf” w dowolnym edytorze tekstu i edytuj go w następujący sposób:
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
Następnie edytuj plik „/etc/ppp/pptpd-options” . Większość parametrów jest ustawiona domyślnie.
#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
W następnym etapie musisz utworzyć rekord dla połączeń klientów. Załóżmy, że chcesz dodać użytkownika „vpnuser” z hasłem „1” i zezwolić mu na dynamiczne adresowanie. Otwórz plik „/etc/ppp/chap-secrets” i dodaj na końcu pliku następujący wiersz z parametrami użytkownika:
vpnuser pptpd 1 *
Wartość „pptpd” to nazwa usługi, którą określiliśmy w pliku „pptpd-options” . Zamiast „*” można podać stały adres IP. W rezultacie plik „chap-secrets” powinien wyglądać następująco:
Aby zastosować ustawienia, zresetuj usługę pptpd i dodaj ją do automatycznego ładowania.
sudo systemctl restart pptpd
sudo systemctl enable pptpd
Konfiguracja serwera została zakończona.
Konfiguracja klienta
Otwórz „Start” – „Ustawienia” – „Sieć i Internet” – „VPN” i kliknij „Dodaj połączenie VPN”
W otwartym oknie wprowadź parametry połączenia i kliknij „Zapisz”
- Dostawca VPN: „Windows (wbudowany)”
- Nazwa połączenia: „vpn_connect” (możesz wybrać dowolną nazwę)
- Nazwa lub adres serwera: (podaj zewnętrzny adres IP serwera)
- Typ VPN: „Auto”
- Typ informacji logowania: „Nazwa użytkownika i hasło”
- Nazwa użytkownika: użytkownik sieci vp (nazwa podana w pliku „chap-secrets” na serwerze)
- Hasło: 1 (jak w pliku „chap-secrets”)
Po zapisaniu parametrów w oknie pojawi się nowe połączenie VPN. Kliknij połączenie lewym przyciskiem myszy i wybierz „Połącz” . W przypadku pomyślnego połączenia zobaczysz status „Połączono” .
W Opcjach znajdziesz adresy wewnętrzne klienta i serwera. Pole „Adres docelowy” wyświetla adres serwera zewnętrznego.
Po nawiązaniu połączenia wewnętrzny adres IP serwera, w naszym przypadku 172.16.0.1 , staje się domyślną bramą dla wszystkich pakietów wychodzących.
Korzystając z dowolnej usługi online możesz sprawdzić, czy zewnętrzny adres IP komputera jest teraz taki sam, jak adres IP serwera VPN.
Serwer OpenVPN
Konfiguracja serwera
Podnieśmy poziom uprawnień bieżącego użytkownika, ponieważ do dalszej konfiguracji będziemy potrzebować dostępu root.
sudo -s
Zainstaluj wszystkie niezbędne pakiety. Do zarządzania kluczami szyfrującymi będziemy potrzebować pakietu „Easy-RSA” .
apt install openvpn easy-rsa iptables-persistent
Zezwól na połączenia przychodzące na porcie 1194 poprzez protokół UDP i zastosuj reguły iptables.
sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT
sudo netfilter-persistent save
Utwórz katalog ze skopiowanymi plikami z pakietu „Easy-RSA” i przejdź do niego.
make-cadir ~/openvpn
cd ~/openvpn
Generuj infrastrukturę klucza publicznego (PKI).
./easyrsa init-pki
Wygeneruj certyfikat główny Urzędu Certyfikacji (CA).
./easyrsa build-ca
Podczas procesu tworzenia zostaniesz poproszony o ustawienie i zapamiętanie hasła. Będziesz również musiał odpowiedzieć na pytania i podać dane właściciela klucza. Możesz pozostawić wartości domyślne podane w nawiasach kwadratowych. Naciśnij „Enter”, aby zakończyć wprowadzanie.
Wygeneruj klucz prywatny i żądanie certyfikatu. Jako argument podaj dowolną nazwę; w naszym przypadku to „vpn-server”.
./easyrsa gen-req vpn-server nopass
Pozostaw wartość pola Nazwa pospolita jako domyślną.
Podpisz wygenerowany wniosek o certyfikat serwera.
./easyrsa sign-req server vpn-server
Na tym etapie odpowiedz „tak”, aby potwierdzić podpis, a następnie wpisz hasło, które zostało utworzone podczas generowania certyfikatu głównego.
Generuj parametry Diffiego-Hellmana. Parametry te służą do bezpiecznej wymiany kluczy między serwerem a klientem.
./easyrsa gen-dh
Wszystkie niezbędne pliki zostały wygenerowane. Utwórzmy folder „keys” w katalogu roboczym OpenVPN, aby przechowywać klucze i skopiujmy tam utworzone pliki.
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
Skonfiguruj NAT za pomocą iptables zasady. Utwórz plik o nazwie nat i otwórz go do edycji w /etc/openvpn/ katalogiem.
#!/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
Zapisz plik i ustaw go jako wykonywalny.
sudo chmod 755 /etc/openvpn/nat
Skopiuj szablon konfiguracji serwera.
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
Otwórz plik „/etc/openvpn/server.conf” do edycji, upewnij się, że zawiera następujące wiersze i edytuj je, jeśli to konieczne:
#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
Włącz przekazywanie ruchu na serwerze.
sudo sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
Uruchom OpenVPN, aby zastosować konfigurację.
systemctl restart openvpn@server
Konfiguracja serwera zakończona!
Konfiguracja klienta
Wejdź na oficjalną stronę OpenVPN „ https://openvpn.net ” i przejdź do sekcji „SPOŁECZNOŚĆ”.
Przewiń w dół i pobierz instalator dla swojej wersji systemu operacyjnego. W naszym przypadku jest to Windows 11 ARM64.
Zainstaluj aplikację, pozostawiając wszystkie parametry domyślne.
Na następnym etapie będziesz musiał przygotować na serwerze i przenieść na komputer klienta następujące pliki:
- klucze publiczne i prywatne;
- kopia klucza do ośrodka certyfikującego;
- szablon pliku konfiguracyjnego.
Połącz się z serwerem, zwiększ uprawnienia i przejdź do utworzonego przez nas katalogu "~/openvpn".
sudo -s
cd ~/openvpn
Wygeneruj klucz prywatny i żądanie certyfikatu dla klienta. Jako argument podaj dowolną nazwę; w naszym przypadku to „client1”.
./easyrsa gen-req client1 nopass
Wpisz hasło ustawione podczas tworzenia certyfikatu głównego i pozostaw wartość Common Name (Nazwa wspólna) jako domyślną.
Podpisz wygenerowany wniosek o certyfikat klienta.
./easyrsa sign-req client client1
Na tym etapie odpowiedz „tak”, aby potwierdzić podpis, a następnie wpisz hasło, które zostało utworzone podczas generowania certyfikatu głównego.
Dla wygody utwórzmy folder o nazwie „client1” w katalogu domowym i skopiujmy do niego wszystkie pliki przeznaczone do przesłania na komputer kliencki.
mkdir ~/client1
cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt ~/client1/
Skopiuj szablon pliku konfiguracji klienta do tego samego katalogu. Podczas kopiowania zmień rozszerzenie pliku na „.ovpn” .
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1/client.ovpn
Zmień właściciela katalogu i wszystkich plików „~/client1/” , aby móc je udostępnić klientowi. W naszym przypadku właścicielem niech będzie „mihail” .
chown -R mihail:mihail ~/client1
Przejdź do komputera klienckiego i skopiuj zawartość folderu „~/client1/” . Możesz to zrobić za pomocą narzędzia „PSCP” dołączonego do programu Putty.
PSCP -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1
Pliki kluczy „ca.crt” , „client1.crt” , „client1.key” możesz przechowywać gdziekolwiek chcesz. W naszym przypadku znajdują się one w folderze „c:\Program Files\OpenVPN\keys” , a plik konfiguracyjny „client.ovpn” przenosimy do katalogu „c:\Program Files\OpenVPN\config”.
Przejdźmy teraz do konfiguracji klienta. Otwórz plik „c:\Program Files\OpenVPN\config\client.ovpn” w edytorze tekstu i edytuj następujące wiersze:
#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
Resztę pozostaw nietkniętą.
Zapisz plik i uruchom aplikację kliencką „OpenVPN GUI”.
Kliknij prawym przyciskiem myszy ikonę aplikacji na pasku zadań i wybierz „Połącz” . Jeśli połączenie się powiedzie, ikona zmieni kolor na zielony.
Skorzystaj z dowolnej usługi online, aby upewnić się, czy Twój publiczny adres IP uległ zmianie i jest teraz taki sam, jak adres IP serwera.