Nginx stream errelea OpenVPN UDPrako: zer aldatzen duen
UDP ez da HTTP location batean sartzen. Eraman ezazu stream geruzara, egokitu saioaren itxarote-denbora VPN baterako, eta espero ezazu proxy-a jatorri gisa.
Zure bezeroa UDP erabiltzeko dago ezarrita, Nginx zerbitzariak VPN portura seinalatzen duen location bloke bat dauka, eta ez da ezer iristen. Hori espero daiteke: HTTP location batek ezin du UDP datagramarik garraiatu, front end-a nola deitzen den alde batera utzita. Nginxek stream entzule bat behar du horretarako, eta konfigurazioa hara eramaten duzunean, xehetasun talde batek erabakitzen du saioa bizirik aterako den.
Proxy geruza helbidearen aurretik dator
Nginxen stream moduluak TCP eta UDP proxyatzen ditu HTTP analizatu gabe. Bere HTTP moduluak eskaera-lerro bat, goiburuak eta erantzun bat espero ditu, eta horietako bat ere ez dago OpenVPN datagrama natibo batean. Beraz, geruza aukeratzea da lehen erabakia, eta entzulea IPv4 edo IPv6 den ez du axola.
TCP OpenVPN-ekin funtzionatzen duela dirudien konfigurazio batek ez du ezer esaten UDP kasuari buruz. Garraioa hemen protokoloaren zati da, ez da inplementazioaren xehetasuna.
Entzulea eta backend-a
nginx -V 2>&1 | tr ' ' '\n' | grep stream
stream {
server {
listen [::]:1194 udp reuseport;
proxy_pass [2001:db8::20]:1194;
}
}
Egiaztatu build-ak stream modulua daukan zerbait editatzen hasi aurretik; banaketa-pakete batek modulu bereizi batean joka dezake, eta falta den modulu batek konfigurazio-errore bat sortzen du, ez tunel bat. Jarri blokea konfigurazio-testuinguru nagusian, ez http barruan, eta ordeztu dokumentazio-helbidea benetako backend-arekin.
Bai bideek, bai bi suebakiek datagramak onartu behar dituzte: entzulerako bidea eta proxy-tik backend-era doana. IPv6 entzule batek ere ez du IPv4 biderik sortzen, beraz bezero batzuek IPv4 erabiltzen badute oraindik, entzule hori sarrera bereizi bat da, bere probekin. Egiaztatu backend-aren suebakia proxy-aren helbidetik, ez zure eramangarritik.
Saioaren itxarote-denborak ez dira eskaerarenak
Stream proxy-ak UDP saio baterako egoera gordetzen du eta bere itxarote-denbora eta erantzun-ezarpenen arabera botatzen du. DNS errele batetik kopiatutako itxarote-denbora laburra gaizki dator orduak datagramak trukatzea espero duen VPN batekin, eta hutsak isilka hiltzen den konexio bat bezala agertzen da, abiarazteari uko egiten dion bat bezala ez.
Irakurri inplementazioaren benetako proxy_timeout balioa eta erantzun-kontaketa ezarpenak, eta gero alderatu VPN-ak benetan erabiltzen duen keepalive portaerarekin. Pertsona ezberdinek fitxategi ezberdinetan idatzitako bi zenbaki sistema bat funtzionatzen ari delako egoera normala dira. Inoiz alderatu ez ziren bi zenbaki noizbehinka huts egiten duen sistema baten egoera normala dira. Idatzi biak zerbitzu-erregistroan, alderaketa behin gerta dadin, egun-argitan.
Zer aldatzen duen erreleak, eta zer ez
Stream proxy-ak ez du OpenVPN-ren TLS kontrol-kanala amaitzen ez eta HTTPS bihurtzen. Backend-a VPN zerbitzua izaten jarraitzen du, eta ziurtagiri-harremana bezeroaren eta zerbitzu horren artean geratzen da. Aurreikusitako backend identitatea mantentzea bezeroaren eta zerbitzariaren zeregina da oraindik.
Proxy arruntak backend-ak ikusten duen jatorrizko helbidea ere aldatzen du. Erregistroek proxy-a erakutsiko dute, eta VPN zerbitzariko IP oinarritutako sarbide-arau batek helbide hori ebaluatuko du, bezeroarena beharrean. Jatorria gardentasunez mantentzea bideratze eta pribilegio diseinu bereizi bat da, ez da entzule bati udp gehitzearen ondorioa. Planifikatu bezeroaren helbidearen araberako politika bat idatzi aurretik.
Egiaztatu bezerotik, ez portutik
UDP portua irekita dagoela dioen tokiko egiaztapen batek entzulea badagoela frogatzen du. Ez du frogatzen bezero batek horren bidez autentifikatu edo trafikoa trukatzen jarrai dezakeenik. Egin benetako konexio bat onartutako bezero batetik, eta gero egiaztatu saioa nahikoa denbora irauten duela garrantzitsua izateko.
Norbait-ek dioenean Nginxek ezin duela UDP egin relay tresna sinple bat horren ordez funtzionatu duelako, bi gertaerok ez dute zerikusirik. Tresnak backend-ak erantzuten duela frogatu zuen; ez zuen ezer esan front end-ak zer onartzen duen. Biak egia izan daitezke, eta horietako bakarra da inplementazio honetarako konfigurazioa.