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:
- Security List / NSG (ingress: TCP 22, UDP 1194; egress: potrzebny ruch).
- 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
- Konto Oracle Cloud, kompartment domyślny.
- Launch instance: Ubuntu 22.04, kształt Always Free (np. Ampere A1 z małym OCPU/RAM albo
VM.Standard.E2.1.Microtam, gdzie dostępny). - Klucz SSH (ed25519/RSA) — logowanie hasłem wyłączone.
- 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-upgradesalbo regularnyapt 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
- Drzewo decyzji: zdalny dostęp
- Arkusz ekspozycji internetowej
- Network Security Lab
- Bezpieczeństwo sieci — usługa
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ę.