Nginx Stream-Relay fir OpenVPN UDP: wat et ännert
UDP gehéiert net an en HTTP-Location. Verréckelt et an d'Stream-Schicht, moosst den Session-Timeout fir eng VPN, a rechent mam Proxy als Quell.
Äre Client ass op UDP agestallt, den Nginx-Server huet en Location-Block deen op de VPN-Port weist, an et kënnt näischt. Dat ass ze erwaarden: en HTTP-Location kann en UDP-Datagramm net droen, wéi de Frontend och ëmmer heescht. Dofir brauch Nginx e Stream-Listener, an nodeems Dir d'Konfiguratioun dohin verréckelt hutt, entscheet eng zweet Rei Detailer ob eng Session iwwerlieft.
D'Proxy-Schicht kënnt virun der Adress
Den Nginx-Stream-Modul proxyt TCP an UDP ouni HTTP ze parsen. Sengen HTTP-Modul erwaart eng Request-Zeil, Headeren an eng Äntwert, an näischt dovun ass an engem OpenVPN Datagramm. D'Schicht ze wielen ass dofir déi éischt Entscheedung, an se hänkt net dovunner of, ob de Listener IPv4 oder IPv6 ass.
Eng Konfiguratioun déi mat TCP OpenVPN funktionéiert schéngt, seet näischt iwwer de UDP-Fall. Den Transport ass hei Deel vum Protokoll, keen Detail vum Deployment.
De Listener an de Backend
nginx -V 2>&1 | tr ' ' '\n' | grep stream
stream {
server {
listen [::]:1194 udp reuseport;
proxy_pass [2001:db8::20]:1194;
}
}
Bestätegt datt de Build de Stream-Modul enthält ier Dir eppes éditéiert; e Distributiounspak kann en an e separate Modul opsplécken, an e fehlende Modul gëtt eng Konfiguratiounsfeeler amplaz vun engem Tunnel. Setzt de Block an den Haaptkonfiguratiounskontext, net bannen an http, a ersetzt d'Dokumentatiounsadress duerch de richtege Backend.
Souwuel béid Route wéi och béid Firewalle mussen d'Datagrammen erlaaben: de Wee bis de Listener an de Wee vum Proxy bis de Backend. En IPv6-Listener schaaft och kee IPv4-Wee, also wann nach e puer Clienten IPv4 benotzen, ass dee Listener en eegene Sujet mat sengem eegenen Test. Kontrolléiert d'Firewall vum Backend selwer vun der Adress vum Proxy, net vun Ärem Laptop.
Session-Timeoute sinn net Request-Timeouten
De Stream-Proxy hält de State fir eng UDP-Session a verwerft en no sengem Timeout a sengen Äntwertsastellungen. En kuerzen Timeout dee vun engem DNS-Relay kopiéiert gouf passt schlecht zu enger VPN déi erwaart, Stonnen Datagramme auszetauschen, an de Feeler weist sech als eng Verbindung déi stëll stierft, an net als eng déi refuséiert ze starten.
Liest den effektiven proxy_timeout vum Deployment an all Astellung fir d'Zuel vun Äntwerten, a vergläicht se dann mat dem Keepalive-Verhalen dat d'VPN tatsächlech benotzt. Zwee Zuelen déi verschidde Leit a verschiddene Fichiere geschriwwen hunn sinn den normale Zoustand vun engem System dee funktionéiert. Zwee Zuelen déi ni verglach goufen sinn den normale Zoustand vun engem System dee periodesch ausfällt. Schreift béid an de Servicerapport, sou datt de Verglach eng Kéier geschitt, am Dageslicht.
Wat de Relay ännert, a wat net
De Stream-Proxy beend d'TLS-Kontrollkanal vun OpenVPN net an ëmsetzt en och net an HTTPS. De Backend bleift de VPN-Service, an d'Zertifikatsverhältnis bleift tëschent dem Client an deem Service. D'intendéiert Backend-Identitéit ze bewaaren ass nach ëmmer d'Aufgab vum Client a vum Server.
Gewéinlech Proxy-Aarbecht ännert och d'Quelladress déi de Backend gesäit. Loggen weisen de Proxy, an all IP-baséiert Zougangsreegel um VPN-Server wäert déi Adress bewäerten an net déi vum Client. D'Quell transparent ze bewaaren ass en eegene Routing- a Privilegien-Design, net eppes wat aus dem Bäisetze vu udp op e Listener follegt. Plangt et ier eng Politik geschriwwen gëtt déi vun der Clientadress ofhängt.
Iwwerpréift vum Client, net vum Port
Eng lokal Iwwerpréiwung datt den UDP-Port op ass beweist datt de Listener existéiert. Se beweist net datt e Client duerch en ka authentifizéieren oder weider Traffic austauschen. Fëllt eng richteg Verbindung vun engem approuvéierte Client of, a bestätegt dann datt d'Session laang genuch ubleift fir ze zielen.
Wann een mellt datt Nginx keen UDP ka well en einfachen Relay-Tool amplaz funktionéiert huet, sinn déi zwou Tatsaachen net verbonnen. Den Tool huet bewisen datt de Backend äntwert; iwwer dat wat de Frontend ënnerstëtzt huet en näischt gesot. Béides kann wouer sinn, a just engem dovun ass eng Konfiguratioun fir dëst Deployment.