# Tunel OpenVPN do sieci prywatnej ![__diagram00.png](images/__diagram00.png) Zadanie polega na konfiguracji OpenVPN, aby umożliwić klientom (Linux i Windows, 10.10.30.0/24) dostęp do zasobów obecnych w sieci prywatnej (10.10.40.0/24). ## Środowisko testowe Do realizacji zadania utworzono zwirtualizowane środowisko testowe przedstawione na poniższym schemacie. Składa się ono z dwóch klientów (Windows oraz Linux), serwera OpenVPN oraz serwera WWW, na którym działa Apache2. ![__diagram01.png](images/__diagram01.png) | Usługa | IP | Podsieć | OS | | -------------- | --------------------------- | ----------------------------- | -------------------- | | Serwer WWW | 10.10.40.141 | 10.10.40.0/24 | Ubuntu 24.04 Server LTS | | Serwer OpenVPN | 10.10.30.140 - 10.10.40.141 | 10.10.30.0/24 - 10.10.40.0/24 | Ubuntu 24.04 Server LTS | | Klient Windows | 10.10.30.130 | 10.10.30.0/24 | Windows 10 | | Klient Linux | 10.10.30.131 | 10.10.30.0/24 | Ubuntu 24.04 Desktop LTS| ## Wykonane kroki Po utworzeniu środowiska należało je odpowiednio skonfigurować. Poniżej wypisano główne kroki, które wykonano: 1. Server OpenVPN: * Sprawdzenie połączenia między serwerami i klientami, * Zainstalowanie OpenVPN, * Zainstalowanie easy-rsa, * Zainicjowanie PKI, utworzenie certyfikatów i kluczy dla serwera i klientów. 2. Klient Linux: * Przeniesienie utworzonych ca, crt, key oraz tc z serwera na klienta, * Konfiguracja klienta Linux, * Sprawdzenie połączenia. 3. Klient Windows: * Przeniesienie utworzonych ca, crt, key oraz tc z serwera na klienta, * Konfiguracja klienta Windows, * Sprawdzenie połączenia. 4. Ostateczne testy: * Sprawdzenie połączenia (z klientów do serwerów), * Pomyślne wyświetlenie strony skonfigurowanej na serwerze WWW. ### Komendy wykonane na serwerze OpenVPN Poniżej zebrano wszystkie komendy wykorzystane podczas konfiguracji serwera OpenVPN. ```bash # ping serwera WWW ping 10.10.40.141 # curl strony WWW curl http://10.10.40.141 # ping klienta Windows ping 10.10.30.130 # ping klienta Linux ping 10.10.30.131 # instalacja OpenVPN sudo apt install openssl openvpn ca-certificates easy-rsa # instalacja easy-rsa mkdir /etc/openvpn/server/easy-rsa/ easy_rsa_url='https://github.com/OpenVPN/easy-rsa/releases/download/v3.2.0/EasyRSA-3.2.0.tgz' wget -qO- "$easy_rsa_url" 2>/dev/null | tar xz -C /etc/openvpn/server/easy-rsa/ --strip-components 1 # zmiana uprawnień plików chown -R root:root /etc/openvpn/server/easy-rsa/ # inicjalizacja PKI cd /etc/openvpn/server/easy-rsa/ ./easyrsa init-pki # utworzenie potrzebnych katalogów mkdir server lnx_client win_client mkdir lnx_client mkdir win_client # zbudowanie CA ./easyrsa --batch build-ca nopass # zbudowanie cert i key serwera EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-server-full server nopass # utworzenie crl EASYRSA_CRL_DAYS=3650 ./easyrsa gen-crl # utworzenie dh openssl dhparam -out pki/dh.pem 2048 # utworzenie tc openvpn --genkey --secret pki/tc.key # skopiowanie wszystkich potrzebnych plików do katalogu serwera cp pki/ca.crt pki/private/ca.key pki/private/server.key pki/issued/server.crt pki/dh.pem pki/crl.pem pki/tc.key server/ # zbudowanie cert i key klienta Linux EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-client-full lnx_client01 # skopiowanie wszystkich potrzebnych plików do katalogu klienta Linux cp pki/ca.crt pki/private/lnx_client01.key pki/tc.key pki/issued/lnx_client01.crt lnx_client/ # zbudowanie cert i key klienta Windows EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-client-full win_client01 # skopiowanie wszystkich potrzebnych plików do katalogu klienta Windows cp pki/ca.crt pki/tc.key pki/issued/win_client01.crt pki/private/win_client01.key win_client/ # dodanie plików do archiwum tar tar -cvf lnx_client.tar lnx_client/ zip win_client.zip win_client/* # przeniesienie plików serwera cp server/* ../ # umożliwienie przekierowywania IP echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-openvpn-forward.conf echo 1 > /proc/sys/net/ipv4/ip_forward sysctl --system # utworzenie pliku konfiguracyjnego serwera vim server.conf # zawartość pliku server.conf local 10.10.30.140 port 443 proto tcp dev tun ca ca.crt cert server.crt key server.key dh dh.pem tls-crypt tc.key crl-verify crl.pem auth SHA512 topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt route 10.10.40.0 255.255.255.0 push "route 10.10.40.0 255.255.255.0" push "redirect-gateway def1" keepalive 10 120 cipher AES-256-GCM user nobody group nogroup persist-key persist-tun verb 3 status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log # uruchomienie usługi OpenVPN systemctl enable openvpn-server@server.service systemctl start openvpn-server@server.serivce # dodanie reguły IPTABLES (opcjonalne) iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 10.10.40.0/24 -j MASQUERADE ``` ### Komendy wykonane na kliencie Linux Poniżej zebrano wszystkie komendy wykorzystane podczas konfiguracji klienta Linux. ```bash # pobranie utworzonych plików z serwera scp ovpnadm@10.10.30.140:/etc/openvpn/server/easy-rsa/lnx_client.tar /tmp # wypakowanie plików tar --strip-components 1 -xvf /tmp/lnx_client.tar -C /etc/openvpn/client/ ls -l /etc/openvpn/client/ # utworzenie pliku konfiguracyjnego klienta vim /etc/openvpn/client/client.conf # zawartość pliku client.conf client dev tun proto tcp remote 10.10.30.140 443 ca /etc/openvpn/client/ca.crt cert /etc/openvpn/client/lnx_client01.crt key /etc/openvpn/client/lnx_client01.key tls-crypt /etc/openvpn/client/tc.key askpass resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server auth SHA512 cipher AES-256-GCM ignore-unknown-option block-outside-dns block-outside-dns verb 3 ls /etc/openvpn/client/ # uruchomienie usługi OpenVPN systemctl disable openvpn.service systemctl enable openvpn@client.service # modyfikacja pliku usługi vim /usr/lib/systemd/system/openvpn@client.service # zmieniono poniższą część --config /etc/openvpn/%i.conf # na taką jak poniżej --config /etc/openvpn/client/%i.conf # uruchomienie usługi systemctl start openvpn@client.service # utworzenie nowej usługi związanej ze zmodyfikowanym plikiem konfiguracyjnym systemctl enable openvpn@client.service # przeładowanie zmian systemctl daemon-reload ``` ### Komendy wykonane na kliencie Windows Poniżej zebrano wszystkie komendy wykorzystane podczas konfiguracji klienta Windows. ```bash # pobranie utworzonych plików z serwera scp ovpnadm@10.10.30.140:/etc/openvpn/server/easy-rsa/win_client.zip C:\Users\windows\Desktop # zawartość client.ovpn client dev tun proto tcp remote 10.10.30.140 443 ca ca.crt cert win_client01.crt key win_client01.key tls-crypt tc.key resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server #auth SHA512 cipher AES-256-GCM ignore-unknown-option block-outside-dns block-outside-dns verb 3 ``` ### Zrzuty ekranu z wykonanych testów Poniżej przedstawiono zrzuty ekranów z wykonanych testów po zakończeniu konfiguracji środowiska. Przetestowano połączenie pomiędzy klientami a serwerami, zarówno z włączonym OpenVPN i wyłączonym. #### Klient Linux ##### Włączony OpenVPN ![00_linux-to-private-network-ON.png](images/00_linux-to-private-network-ON.png) ![01_linux-to-private-network-www-ON.png](images/01_linux-to-private-network-www-ON.png) ##### Wyłączony OpenVPN ![02_linux-to-private-network-OFF.png](images/02_linux-to-private-network-OFF.png) ![03_linux-to-private-network-www-OFF.png](images/03_linux-to-private-network-www-OFF.png) #### Klient Windows ##### Włączony OpenVPN ![04_windows-to-private-network-ON.png](images/04_windows-to-private-network-ON.png) ![05_windows-to-private-network-www-ON.png](images/05_windows-to-private-network-www-ON.png) ##### Wyłączony OpenVPN ![06_windows-to-private-network-OFF.png](images/06_windows-to-private-network-OFF.png) ![07_windows-to-private-network-www-OFF.png](images/07_windows-to-private-network-www-OFF.png) Konfiguracja środowiska przebiegła pomyślnie. ### Autorzy * Kacper Dawidowicz 458009 * Marcin Kielar 452666