Remote access / Homelab

OpenVPN na Oracle Cloud (Ubuntu 22.04)

Własny tunel VPN na Always Free zamiast wystawiać usługi wprost do internetu.

completed YEAR: 2026

PROBLEM

Potrzebny bezpieczny dostęp do zasobów z domu / labu bez płacenia za komercyjny VPN i bez otwierania RDP/SSH na 0.0.0.0/0.

PODEJŚCIE

Działający OpenVPN na Ubuntu 22.04 (Oracle Always Free) z certyfikatami, NAT, regułami Security List i powtarzalną konfiguracją klienta.

ARCHITEKTURA

  • VM Ubuntu 22.04 (Oracle Cloud Always Free)
  • OpenVPN UDP/1194 + easy-rsa (PKI)
  • VCN Security List / NSG + iptables na hoście
  • klient .ovpn (certyfikat, bez hasła w pliku)

WDROŻENIE

  • provisioning VM i otwarcie UDP 1194 w chmurze
  • instalacja OpenVPN + PKI
  • IP forwarding i MASQUERADE
  • profil klienta i test split/full tunnel

REZULTAT

  • działający prywatny VPN na Always Free
  • poradnik odtworzeniowy dla samodzielnego wdrożenia
  • mniejsza potrzeba wystawiania usług „na świat”

WNIOSKI

  • w Oracle trzeba otworzyć port w Security List i na hoście
  • VPN nie zastępuje patchy ani MFA na usługach za tunelem

Cel

Postawić prywatny serwer OpenVPN na darmowej maszynie Linux Ubuntu 22.04 w Oracle Cloud Always Free i opisać to tak, żeby ktoś inny mógł powtórzyć wdrożenie u siebie. To projekt portfolio i poradnik — nie oferta hostingu VPN.

Dwa problemy, które rozwiązałem

1. Dostęp zdalny przez wystawione usługi

SSH/RDP „na chwilę” na 0.0.0.0/0 albo komercyjny VPN bez kontroli nad logami i polityką.

Co zyskałem: jeden wąski punkt wejścia (UDP 1194 + SSH tylko dla admina), ruch do zasobów za tunelem, własna PKI i możliwość unieważnienia klienta bez zmiany hasła „globalnego”.

2. Oracle: port otwarty w chmurze, zamknięty na hoście (i odwrotnie)

Po instalacji OpenVPN klient się nie łączył, bo Security List przepuszczała UDP 1194, a iptables na obrazie Oracle nadal dropował — albo odwrotnie.

Co zyskałem: checklistę podwójnej zapory (VCN + host), działający NAT/MASQUERADE i notatkę odtworzeniową, którą da się przejść od zera.

Dla kogo jest ten poradnik

  • chcesz własny VPN na Always Free (nauka / homelab / bezpieczniejszy dostęp),
  • umiesz wejść po SSH na Ubuntu i edytować pliki jako root/sudo,
  • akceptujesz, że Always Free ma limity i że Ty odpowiadasz za aktualizacje oraz klucze.

Nie rób tego, jeśli szukasz anonimowości „pod radarem” albo obchodzenia polityk pracodawcy / uczelni. VPN tu służy Twoim zasobom i Twojej sieci.

Architektura w skrócie

[Klient .ovpn] --UDP 1194--> [Oracle VM Ubuntu 22.04 + OpenVPN]
                                  |
                                  +--> NAT do internetu (full tunnel)
                                  +--> lub tylko trasy labowe (split tunnel)

W Oracle Cloud zawsze sprawdzasz dwie warstwy:

  1. Security List / NSG (ingress: TCP 22, UDP 1194; egress: potrzebny ruch).
  2. Firewall na VM (iptables / nftables / firewalld — zależnie od obrazu).

Poradnik krok po kroku

Poniższe komendy są szkieletem edukacyjnym. Numery wersji pakietów i ścieżki easy-rsa mogą się lekko różnić — czytaj komunikaty instalatora. Zawsze pracuj na własnej VM.

1. Maszyna Always Free

  1. Konto Oracle Cloud, kompartment domyślny.
  2. Launch instance: Ubuntu 22.04, kształt Always Free (np. Ampere A1 z małym OCPU/RAM albo VM.Standard.E2.1.Micro tam, gdzie dostępny).
  3. Klucz SSH (ed25519/RSA) — logowanie hasłem wyłączone.
  4. Zapisz publiczny IP (rozważ Reserved Public IP, jeśli restart ma nie zmieniać adresu).

2. Security List / NSG

Ingress (przykład):

Kierunek Protokół Port Źródło Po co
Ingress TCP 22 Twój IP /32 (preferowane) SSH
Ingress UDP 1194 0.0.0.0/0 lub zawężone OpenVPN
Egress All — 0.0.0.0/0 aktualizacje, NAT klientów

Jeśli zostawiasz SSH na 0.0.0.0/0, używaj tylko kluczy i rozważ fail2ban — to nadal ekspozycja.

3. Baseline na Ubuntu

sudo apt update && sudo apt -y upgrade
sudo apt -y install openvpn easy-rsa iptables-persistent

Włącz przekazywanie IP (na stałe w /etc/sysctl.d/99-openvpn.conf):

echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-openvpn.conf
sudo sysctl -p /etc/sysctl.d/99-openvpn.conf

4. PKI (easy-rsa)

make-cadir ~/openvpn-ca
cd ~/openvpn-ca
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh
openvpn --genkey secret ta.key
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

Skopiuj na serwer (przykład ścieżek — dostosuj):

  • ca.crt, server.crt, server.key, dh.pem, ta.key → /etc/openvpn/server/

5. Konfiguracja serwera OpenVPN

Plik /etc/openvpn/server/server.conf (szkielet):

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
keepalive 10 120
cipher AES-256-GCM
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

Dla split tunnel usuń redirect-gateway i wypchnij tylko trasy labowe, np. push "route 10.0.0.0 255.255.255.0".

6. NAT (MASQUERADE)

Znajdź interfejs wyjścia na internet (ip route) — często ens3 / enp0s3:

IFACE=ens3   # ustaw właściwy
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o "$IFACE" -j MASQUERADE
sudo iptables -A INPUT -p udp --dport 1194 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -o "$IFACE" -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i "$IFACE" -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo netfilter-persistent save

Na obrazach Oracle bywa dodatkowy łańcuch — jeśli UDP 1194 nadal nie dochodzi, sprawdź iptables -L -n -v i dokumentację obrazu.

7. Start usługi

sudo systemctl enable --now openvpn-server@server
sudo systemctl status openvpn-server@server

8. Profil klienta .ovpn

Złóż plik z ca, cert, key, tls-auth (klucz kierunku 1 po stronie klienta) i remote TWOJ_IP 1194. Nie trzymaj kopii kluczy w publicznych repozytoriach.

Test: połączenie → ip addr pokazuje tun → ping zasobu za VPN / sprawdzenie IP wyjściowego przy full tunnel.

9. Utrzymanie

  • unattended-upgrades albo regularny apt upgrade,
  • nowy klient = nowy cert; utrata laptopa = revoke + CRL / restart z aktualną listą,
  • logi: /var/log/syslog / journalctl -u openvpn-server@server,
  • nie wystawiaj paneli admina „obok” VPN bez osobnej kontroli dostępu.

Typowe błędy (edukacyjnie)

Objaw Najpierw sprawdź
Timeout na UDP 1194 Security List i iptables
Łączy się, nie ma internetu ip_forward, MASQUERADE, właściwy IFACE
TLS handshake error ta.key kierunek 0/1, zgodność certów
Po restarcie VM inny IP Reserved Public IP + aktualizacja remote

Powiązane materiały

Granice

To nie anonimowość, nie obchodzenie TOR/VPN „do czegokolwiek”, nie managed VPN SaaS. Always Free może się zmienić po stronie Oracle — sprawdzaj aktualny cennik i limity. Za bezpieczeństwo kluczy i patchy odpowiadasz Ty.

Stan

Status completed jako wzorzec wdrożenia i poradnik. Konfigurację produkcyjną u siebie zawsze weryfikuj pod własną sieć i politykę.

Chcesz podobny układ u siebie?

To lab / konkretna pętla, nie slajd. Napisz, co masz na stole.

Zwykle odpowiadam w 1 dzień roboczy. Zapytanie jest zapisywane na serwerze; dostaniesz potwierdzenie z hello@tomek.st. Wysłanie nie zobowiązuje do umowy.