Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
it:server:openvpn [2025/05/13 21:59] – Petr Nosek | it:server:openvpn [2025/06/18 12:20] (aktuální) – Petr Nosek | ||
---|---|---|---|
Řádek 114: | Řádek 114: | ||
Bylo mi doporučeno to přidat i do konfiguračního souboru klienta, ale tam jsem to nepřidával a zatím to vypadá, že SSH už funguje. | Bylo mi doporučeno to přidat i do konfiguračního souboru klienta, ale tam jsem to nepřidával a zatím to vypadá, že SSH už funguje. | ||
+ | |||
+ | |||
+ | |||
+ | ===== Automatické připojení k OpenVPN serveru ===== | ||
+ | |||
+ | Cílem je zajistit, aby se OpenVPN klient automaticky připojoval po startu systému a zároveň přesměrovával příchozí síťovou komunikaci na konkrétní zařízení ve vnitřní síti. | ||
+ | |||
+ | Klíčové je vložit konfigurační soubor do složky `**/ | ||
+ | OpenVPN sice podporuje i příponu `.ovpn`, ale pouze `.conf` je systemd schopen automaticky spouštět. | ||
+ | |||
+ | Pro ruční spuštění postačí: | ||
+ | |||
+ | <code bash> | ||
+ | openvpn --config myclient.ovpn | ||
+ | </ | ||
+ | |||
+ | Pro automatické spouštění použij: | ||
+ | |||
+ | <code bash> | ||
+ | systemctl start openvpn-client@myclient.service | ||
+ | </ | ||
+ | |||
+ | Tento příkaz hledá konfigurační soubor `**/ | ||
+ | |||
+ | **Doporučení: | ||
+ | Chceš-li využívat výhody systemd (např. automatické restartování), | ||
+ | |||
+ | Pro stabilní spojení doporučujeme přidat do konfigurace řádek: | ||
+ | |||
+ | < | ||
+ | keepalive 10 60 | ||
+ | </ | ||
+ | |||
+ | To znamená, že klient každých 10 vteřin pošle " | ||
+ | Tento zápis je zjednodušený alias pro `--ping 10` a `--ping-restart 60`. | ||
+ | |||
+ | **Shrnutí postupu:** | ||
+ | |||
+ | * Přejmenuj soubor na `myclient.conf` | ||
+ | * Přidej (nebo ponech) `keepalive 10 60` | ||
+ | * Zkontroluj umístění: | ||
+ | * Aktivuj a spusť službu: | ||
+ | |||
+ | <code bash> | ||
+ | systemctl enable openvpn-client@myclient | ||
+ | systemctl start openvpn-client@myclient | ||
+ | </ | ||
+ | |||
+ | **Ověření funkčnosti: | ||
+ | |||
+ | * Stav služby: | ||
+ | <code bash> | ||
+ | systemctl status openvpn-client@myclient | ||
+ | </ | ||
+ | |||
+ | * Aktivní tunel poznáš podle rozhraní `tun0`: | ||
+ | <code bash> | ||
+ | ip a | grep tun0 | ||
+ | </ | ||
+ | |||
+ | * Pro zobrazení logů: | ||
+ | <code bash> | ||
+ | journalctl -u openvpn-client@myclient | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Forwarding na zařízení uvnitř sítě ===== | ||
+ | |||
+ | Aby bylo možné přeposílat komunikaci z VPN na zařízení v lokální síti, je potřeba povolit IP forwarding. | ||
+ | |||
+ | V souboru `/ | ||
+ | |||
+ | < | ||
+ | net.ipv4.ip_forward=1 | ||
+ | </ | ||
+ | |||
+ | Změnu načti pomocí: | ||
+ | |||
+ | <code bash> | ||
+ | sysctl -p | ||
+ | </ | ||
+ | |||
+ | Přesměrování provozu pak zajistí vlastní skripty. | ||
+ | Níže je příklad jednoduchého nastavení pro zařízení s IP `192.168.0.120`. | ||
+ | |||
+ | **/ | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | set -euo pipefail | ||
+ | |||
+ | # Tento skript nakonfiguruje DNAT z OpenVPN (tun0) na interní stroj 10.112.234.112 | ||
+ | # Přesměrování všech portů kromě SSH (port 22) s vyčištěním starých pravidel | ||
+ | |||
+ | # Kontrola, zda běží pod rootem | ||
+ | if [[ " | ||
+ | echo " | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | # Proměnné – upravte podle potřeby | ||
+ | VPN_IF=" | ||
+ | INT_IF=" | ||
+ | DEST_IP=" | ||
+ | EXCLUDE_PORT=" | ||
+ | |||
+ | # 0) Načtení FTP helper modulů | ||
+ | #modprobe nf_conntrack_ftp | ||
+ | #modprobe nf_nat_ftp | ||
+ | |||
+ | # 0b) Připojení FTP helperu pro control channel (port 21) | ||
+ | iptables-legacy -t raw -A PREROUTING \ | ||
+ | -i " | ||
+ | -p tcp --dport 21 \ | ||
+ | -j CT --helper ftp | ||
+ | |||
+ | |||
+ | # 1) Vyčištění stávajících pravidel NAT a FORWARD | ||
+ | iptables-legacy -t nat -F PREROUTING | ||
+ | iptables-legacy -t nat -F POSTROUTING | ||
+ | iptables-legacy -F FORWARD | ||
+ | |||
+ | # 2) Povolit IP forwarding | ||
+ | sysctl -w net.ipv4.ip_forward=1 | ||
+ | if ! grep -q ' | ||
+ | echo ' | ||
+ | fi | ||
+ | |||
+ | # 3) DNAT: přesměrování všech TCP portů kromě SSH na interní stroj | ||
+ | iptables-legacy -t nat -A PREROUTING \ | ||
+ | -i " | ||
+ | -p tcp -m tcp ! --dport " | ||
+ | -j DNAT --to-destination ${DEST_IP} | ||
+ | |||
+ | # 4) DNAT: přesměrování všech UDP portů kromě SSH na interní stroj | ||
+ | iptables-legacy -t nat -A PREROUTING \ | ||
+ | -i " | ||
+ | -p udp -m udp ! --dport " | ||
+ | -j DNAT --to-destination ${DEST_IP} | ||
+ | |||
+ | # 5) Povolit forward chain pro směry tun0 → eth0 (nové i navázané relace) | ||
+ | iptables-legacy -A FORWARD \ | ||
+ | -i " | ||
+ | -j ACCEPT | ||
+ | iptables-legacy -A FORWARD \ | ||
+ | -i " | ||
+ | -m state --state ESTABLISHED, | ||
+ | -j ACCEPT | ||
+ | |||
+ | # 6) SNAT/ | ||
+ | iptables-legacy -t nat -A POSTROUTING \ | ||
+ | -o " | ||
+ | -d " | ||
+ | -j MASQUERADE | ||
+ | |||
+ | # Hotovo | ||
+ | echo " | ||
+ | |||
+ | </ | ||
+ | |||
+ | **/ | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | set -euo pipefail | ||
+ | |||
+ | # Tento skript odstraní pravidla DNAT a SNAT z předchozího setupu | ||
+ | |||
+ | # Kontrola, zda běží pod rootem | ||
+ | if [[ " | ||
+ | echo " | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | # Proměnné – musí odpovídat setup skriptu | ||
+ | VPN_IF=" | ||
+ | INT_IF=" | ||
+ | DEST_IP=" | ||
+ | EXCLUDE_PORT=" | ||
+ | |||
+ | # Odstranění raw/FTP helper pravidla | ||
+ | iptables-legacy -t raw -D PREROUTING -i " | ||
+ | |||
+ | # Vyčištění pravidel NAT a FORWARD vztahujících se k tun0 a DEST_IP | ||
+ | iptables-legacy -t nat -D PREROUTING -i " | ||
+ | iptables-legacy -t nat -D PREROUTING -i " | ||
+ | iptables-legacy -t nat -D POSTROUTING -o " | ||
+ | iptables-legacy -D FORWARD -i " | ||
+ | iptables-legacy -D FORWARD -i " | ||
+ | |||
+ | # Volitelné: vrátit ip_forward do výchozí hodnoty (pokud potřebujete) | ||
+ | # sysctl -w net.ipv4.ip_forward=0 | ||
+ | |||
+ | echo " | ||
+ | |||
+ | </ | ||
+ | |||
+ | **Poznámka: | ||
+ | Pokud síťové rozhraní není `eth0`, uprav `**$INTERNAL_IF**` podle výstupu příkazu `ip a`. | ||
+ | |||
+ | Skripty je potřeba zpřístupnit pro spuštění: | ||
+ | |||
+ | <code bash> | ||
+ | chmod +x / | ||
+ | </ | ||
+ | |||
+ | A nakonec je přidej do konfiguračního souboru `myclient.conf`: | ||
+ | |||
+ | < | ||
+ | script-security 2 | ||
+ | up / | ||
+ | down / | ||
+ | </ | ||
+ | |||
+ | **Ověření po navázání tunelu:** | ||
+ | |||
+ | <code bash> | ||
+ | iptables-legacy -t nat -L -n -v | ||
+ | iptables-legacy -L -n -v | ||
+ | </ | ||