Jarraitu eskaera bat treneko telefono batetik sare pribatu baten barruan soilik existitzen den backend bateraino. Telefonoak izen publiko bat ebazten du, 443 portuko helbide publiko batera konektatzen da eta ohiko TLS eskuko agurra burutzen du. Nginxek konexio hori onartzen du eta gero bigarren bat, erabat bereizia, VPN interfazearen bidez soilik iristen den helbide batera irekitzen du. Telefonoan ezer ez da aldatzen, eta telefonoak ez du inoiz jakingo tunel bat inplikatu zenik.

Eskaera bat bi konexiotatik jarraitzea

Sarrerako zatia HTTP transakzio publikoa da. Izen publiko bat, ziurtagiri publiko bat eta bisitariak une horretan duen edozein helbidetarako funtzionatu behar duen erantzun-bide bat ditu. Bide hori nahasten duen edozein aldaketak bisitari guztiak aldi berean hausten ditu. Horregatik atal publikoa da gutxien esperimentatu nahi duzun zatia.

Irteerako zatia pribatua da. Nginx bezero bihurtzen da, barneko izen bat ebazten du edo helbide finkoa erabiltzen du, eta internettik datorren konexioari uko egingo liokeen zerbitzu batera iristen da.

Public client  -> frontend public address:443   (TLS, public name)
Frontend       -> VPN private backend 10.40.0.20:8443  (TLS, private name)

Biak buruan bereizita eduki eta konfigurazioa begi-bistakoa bihurtzen da. Nahastu itzazu, eta azkenean bezero publiko bat tunelean parte har dezan saiatuko zara, eta diseinu honetako nahasmenaren zatirik handiena hortik dator. Zati pribatuari hauskorra izatea onartzen zaio. Publikoari ez.

Hauetatik ezer eraiki aurretik, egiaztatu aplikazioa argitaratzea nahita egindakoa dela. Funtzionatzen duen proxy bat funtzionatzen duen agerraldi bat ere bada, eta autentifikazio ereduak erabaki bat izan behar du, ez albo-ondorio bat.

Atearen izenak tunela bizirik iraun behar du

Tranpa sotil bat dago izenen ebazpenean. DNS pribatuak VPN profilak bere atearentzat erabiltzen duen izen bera gainidazten badu, berriz konektatzeak azkenean berak eraiki behar duen tunelaren bidez ate horretara iristen saia daiteke. Bezeroak izen hori tunela existitu aurretik ebatzita eduki behar du. Behin tuneleko barruan ebazten bada, konexioa ez da inoiz eraiki ahal izango.

Erabili onartutako izen bereiziak atearentzat eta backendarentzat, eta mugatu ebazten duenaren politika izen bakoitza bere kontsumitzaileak behar duen helbidera ebatzi dadin. Aplikazio baten Host goiburua aldatzeak ez du ezer egiten hemen, VPN bezeroa baita bilaketa egiten duena.

Gero pentsatu irismena. Frontendak backendaren helbiderako bidea behar du, eta gainera bezero publikoei erantzuten jarraitu behar die. Ostalari horretan tunel oso batek lehen baldintza bete eta bigarrena hauts dezake.

Politikak uzten duen tokian, helmuga zehatz baterako tunela diseinu garbiagoa da. Politikak tunel osoa agintzen duen tokian, frontenda sare-kontextu bereizi batean kokatzen da, bisitari ezagunentzako aldi baterako bideak erantsi beharrean.

Idatzi zerbitzari-blokea bi aldek egiaztatzen dutela

Demagun backendak izen honetarako ziurtagiria aurkezten duela: backend.corp.example eta helbide pribatu batean erantzuten du. Helbide batera konektatzea izena egiaztatzen ari zaren bitartean da proxy moduluaren SNI eta izen aukeren helburua.

upstream private_app {
    server 10.40.0.20:8443;
}

server {
    listen 443 ssl;
    server_name app.example.com;

    ssl_certificate     /etc/nginx/tls/app-fullchain.pem;
    ssl_certificate_key /etc/nginx/tls/app-key.pem;

    location / {
        proxy_pass https://private_app;
        proxy_ssl_server_name on;
        proxy_ssl_name backend.corp.example;
        proxy_ssl_trusted_certificate /etc/nginx/trust/backend-ca.pem;
        proxy_ssl_verify on;
        proxy_ssl_verify_depth 3;

        proxy_set_header Host app.example.com;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Goiko bide eta helbide bakoitza leku-marka bat da. Garrantzitsuak egiaztapena piztuta mantentzen duten zatiak dira: egiaztatzeko izen bat, haren aurka egiaztatzeko konfiantza-sorta bat eta onartutako katearekin bat datorren sakonera bat.

proxy_set_header Host app.example.com nahita dago. Backendak jatorri publiko hori onar dezan konfiguratu behar da, eta frontend honetatik soilik bidalitako goiburuetan fidatu behar du. Hau gainidaztea X-Forwarded-For bezeroaren helbidearekin zuzena da proxy bakarrerako eta okerra kate baterako, beraz proxy anitzeko inplementazioak bere helbide fidagarrien antolaketa behar du.

Jatorri publikoak publiko gisa joka dezan egitea

Aplikazioak URL absolutuak, berbideratzeak eta cookieak sortu behar ditu jatorri publikorako. Bisitari bat hona berbideratzen badu: backend.corp.example, bisitari hori ebatzi ezin duen izen batera bidaltzen da.

Konpondu hori aplikazioak onartzen duen kanpoko URL ezarpenaren eta berrikusitako berbideratze-politikaren bidez, ez erantzunen gorputzetan ostalari-izenak berridatziz. Eduki arbitrarioan kateak ordezkatzeak sinatutako kargak hausten ditu eta arrastoan jarraitzeko zailak diren erroreak sortzen ditu.

Cookieek arreta bera merezi dute. Izen pribatuera mugatutako cookie bat ez du inoiz bidaliko izen publikoa soilik ezagutzen duen nabigatzaile batek.

Egiaztatu ere Nginxek benetan socket publikoa eduki dezakeela. 443an dagoen lehendikako web zerbitzu bat mugitu behar da edo frontendak beste nonbait bizi behar du, bi prozesuk ezin baitute helbide eta portu bera lotu.

Egiaztatu atal bakoitza benetan exekutatzen den tokian

Balidatu konfigurazioa instalatutako analizatzailearekin berriz kargatu aurretik, idazketa-errore batek orain zerbitzatzen ari den entzulea eror ez dezan.

Gero probatu backend zatia frontend ostalaria beretik, Nginxek erabiltzen duen sare-kontextu berean. Tunelaren bidezko ping batek irisgarritasuna frogatzen du eta ezer ez TLS, baimen edo aplikazioari buruz.

Azkenean egin eskaera publiko berri bat benetako ostalari-izenera ziurtagiriaren egiaztapen arruntarekin, eta behatu erantzun-bidea eta ez soilik erantzun-gorputza.

Gorde bi behaketak inplementatutako konfigurazioarekin batera, eta erregistratu zer gertatzen den tunela erabilgarri ez dagoenean. Frontendak kontrolatutako upstream errore bat itzuli behar du, ez isilpean beste backend batera erori inork dokumentatu ez duena. 502 bat log-lerro argi batekin emaitza ona da. Jatorri nahigabeko orri bat cachetik ez da emaitza ona.

Erlazionatutako artikuluak