WireGuard VPN: siguran udaljeni pristup bez kompleksnosti

WireGuard za male setupove: wg-quick, key pairovi, AllowedIPs, split tunnel, firewall i kada VPN ima više smisla od SSH bastiona.

Networking Security VPN
WireGuard VPN: siguran udaljeni pristup bez kompleksnosti

Za udaljeni pristup internim servisima na VPS-u ili maloj mreži često ne trebate „enterprise VPN appliance“. WireGuard je dovoljno jednostavan da ga održavate, a dovoljno jak kriptografski da ne trebamo nostalgiju za složenim IPsec/OpenVPN stackovima, osim ako vas legacy klijenti na to prisile.

Zašto WireGuard za male setupove

Surface je mali: tipično jedan UDP port i jednostavan config. Tunel se uspostavlja brzo, s manje „state machine“ magije, pa je debugiranje lakše nego kod klasičnih VPN stackova. Klijenti za desktop i mobitel su dobri.

OpenVPN i IPsec i dalje imaju mjesto (compliance, postojeća infrastruktura). Za novi mali projekt WireGuard je obično prvi izbor.

Server: wg-quick skica

sudo apt update
sudo apt install -y wireguard

# Key pair za server
umask 077
wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub
# /etc/wireguard/wg0.conf (primjer)
[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
# PostUp/PostDown za NAT samo ako namjerno rutirate internet kroz VPN

[Peer]
# laptop kolege
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.10.0.2/32
sudo systemctl enable --now wg-quick@wg0
sudo wg show

Key pairovi i AllowedIPs

Svaki peer ima svoj private/public key. AllowedIPs na serveru kaže koje IP adrese smiju doći s tog peera (obično jedan /32 po klijentu). Na klijentu AllowedIPs kaže što ide u tunel.

Za pristup samo privatnoj mreži ili internim servisima na VPS-u koristite split tunnel, npr. AllowedIPs = 10.10.0.0/24, 10.0.0.0/24. Cijeli internet kroz VPN ide s 0.0.0.0/0 (i IPv6 ako treba). To uradite namjerno, ne slučajno.

Klijent (split tunnel)

[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.10.0.2/32
DNS = 10.10.0.1

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = vpn.example.com:51820
AllowedIPs = 10.10.0.0/24
PersistentKeepalive = 25

PersistentKeepalive pomaže iza NAT-a (kućni router, mobitel).

Routing i IP forwarding (samo kad treba)

Ako klijenti trebaju pristupiti drugim strojevima iza VPN servera (npr. privatna mreža 10.0.0.0/24), na serveru uključite forwarding i firewall pravila s namjerom, ne „copy-paste s bloga“.

# sysctl (trajno u /etc/sysctl.d/)
net.ipv4.ip_forward = 1

Na klijentu proširite AllowedIPs na te mreže. Ako trebate full-tunnel (sav internet kroz VPS), trebate i NAT (MASQUERADE) na izlaznom interfaceu, inače klijent ostaje bez weba.

Firewall

Otvori samo UDP 51820 (ili drugi port) prema internetu. Interni servisi (baza, admin paneli, Prometheus) neka slušaju na privatnim adresama ili localhost plus WireGuard, ne na 0.0.0.0 javno. Hardening SSH i OS-a i dalje vrijedi. Vidi Hardening Linux VPS-a.

# UFW primjer
sudo ufw allow 51820/udp
sudo ufw allow OpenSSH
sudo ufw enable

Full VPN vs SSH bastion

SSH bastion (jump host) dovoljan je kad trebate samo shell i port-forward za par servisa. Manje surface-a ako je sve SSH. WireGuard bolje sjeda kad tim treba pristup više unutarnjih HTTP servisa, admin UI-ima, RDP-u, ili kad mobitel mora ući u mrežu bez sklapanja SSH tunela.

Često kombinacija: SSH samo s WireGuard mreže (javni SSH zatvoren), plus VPN za aplikacije.

Mobilni klijenti

Službene WireGuard aplikacije za iOS/Android rade s istim configom (QR ili import datoteke). Na mobitelu posebno pazite na split tunnel. Full-tunnel troši bateriju i rutira sav promet kroz vaš VPS.

Česte greške

Najčešći trap je slučajni full-tunnel: AllowedIPs = 0.0.0.0/0 bez NAT/forwarding pravila. VPN se spoji, internet umre. Drugo: preklapanje subneta. Kućni 192.168.1.0/24 isti kao uredski daje routing kaos, zato birajte rijetke VPN rangeove (npr. 10.10.x.0/24). Ne dijelite isti private key na više peerova. Iza CGNAT-a ili na mobitelu zaboravljen keepalive boli. I VPN bez zatvaranja starih admin portova na javnoj IP nije rješenje.

Zaključak

WireGuard je dobar default za mali, kontrolirani udaljeni pristup: key pairovi, jasan AllowedIPs, firewall, split tunnel dok ne dokažete da trebate full-tunnel. Ako želite da netko postavi i dokumentira pristup za tim, kontaktirajte DevOps usluge na disketa.hr.