Raac hal codsi oo ka yimaada telefoon ku jira tareen ilaa backend oo kaliya ku jira shabakad gaar ah. Telefoonku wuxuu xalliyaa magac dadweyne, wuxuu ku xirmaa cinwaan dadweyne oo ku yaal dekedda 443, wuxuuna dhammeeyaa TLS gacan-qabasho caadi ah. Nginx wuu aqbalayaa xiriirkaas ka dibna wuxuu furaa mid labaad, oo si buuxda u gooni ah, oo u socda cinwaan uu kaliya ku gaaro iyada oo loo marayo interface VPN. Waxba kama beddelmo telefoonka, telefoonkuna waligiis ma oga in tunnel ku lug lahaa.

Raadinta hal codsi iyada oo loo marayo laba xiriir

Qaybta soo gasha waa macaamil HTTP dadweyne. Waxay leedahay magac dadweyne, shahaado dadweyne iyo waddo jawaab oo ay tahay inay u shaqeyso cinwaan kasta oo booqashooyinku haystaan wakhtigaas. Isbeddel kasta oo carqaladeeya waddadaas wuxuu hal mar burburiyaa dhammaan booqdayaasha. Taasi waa sababta qaybta dadweynuhu tahay tan aad ugu yar tahay inaad tijaabiso.

Qaybta baxda waa mid gaar ah. Nginx wuxuu noqdaa macmiil, wuxuu xalliyaa magac gudaha ama wuxuu isticmaalaa cinwaan go'an, wuxuuna gaaraa adeeg diidi lahaa xiriirka ka yimaada internetka.

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

Kala sooc labadaba maskaxdaada oo qaabeyntu way caddaan doontaa. Haddii aad isku darto, waxaad ku dambeyn doontaa inaad isku daydo inaad macmiil dadweyne ka dhigto mid ka qaybqaata tunnel, halkaasna waa meesha badi jahwareerka naqshaddan uu ka yimaado. Qaybta gaarku way jilicsanaan kartaa. Tan dadweynuhu ma noqon karto.

Ka hor intaadan wax ka dhisin, xaqiiji in daabacaadda barnaamijku ay tahay mid ula kac ah. Proxy shaqeeya sidoo kale waa soo-gaadhis shaqeysa, iyo qaabka aqoonsigu waa inuu noqdaa go'aan, ma aha natiijo dhinac ah.

Magaca albaabka waa inuu ka badbaadaa tunnel-ka

Waxaa jira dabin qarsoodi ah oo ku jirta xallinta magacyada. Haddii DNS gaar ah uu beddelo isla magaca ay borofaylka VPN u isticmaalo albaabkiisa, dib-u-xiriddu waxay ku dambeyn kartaa inay isku daydo inay gaarto albaabkaas iyada oo loo marayo tunnel-ka ay iyadu tahay inay dhisto. Macmiilku wuxuu u baahan yahay magacaas in la xalliyo ka hor inta uusan tunnel-ku jirin. Marka la xalliyo gudaha tunnel-ka, xiriirka marnaba lama dhisi karo.

Isticmaal magacyo kala duwan oo la ansixiyay albaabka iyo backend-ka, oo xaddid siyaasadda xalliyaha si magac kastaa ugu xalliyo cinwaanka uu isticmaalahiisu u baahan yahay. Beddelka madaxa Host ee barnaamijku halkan waxba ma tarayo, sababtoo ah macmiilka VPN ayaa sameeya raadinta.

Kadib ka fikir baaxadda. Frontend wuxuu u baahan yahay waddo u socota cinwaanka backend, waana inuu sii wadaa ka jawaabista macaamiisha dadweynaha. Tunnel buuxa oo ku yaal martigeliyahaas wuxuu buuxin karaa shardiga koowaad wuxuuna jebin karaa kan labaad.

Meelaha siyaasaddu u ogolaato, tunnel u socda meel gaar ah waa naqshad nadiifsan. Meelaha siyaasaddu ku qasabto tunnel buuxa, frontend wuxuu ku jiraa xaalad shabakadeed gooni ah halkii lagu xallin lahaa waddooyin ku meel gaar ah oo loogu talagalay booqdayaasha la yaqaan.

Qor block server-ka si labada qayboodba u xaqiijiyaan

Ka soo qaad in backend-ku soo bandhigo shahaado magacan: backend.corp.example oo ku jawaaba cinwaan gaar ah. Ku xirnaanshaha cinwaan inta la xaqiijinayo magac waa saxda waxa loogu talagalay xulashooyinka SNI iyo magaca ee module-ka proxy.

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;
    }
}

Waddo kasta iyo cinwaan kasta oo kor ku yaal waa meel-hayste. Muhiimka ah waa qaybaha xaqiijinta furan hayaa: magac la hubiyo, xidhmo kalsooni oo lagu hubiyo, iyo qoto dheer oo u dhigma silsiladda la ansixiyay.

proxy_set_header Host app.example.com waa ula kac. Backend waa in loo habeeyaa inuu aqbalo asalkaas dadweyne, oo waa inuu kaliya aaminaa madaxyada la gudbiyay oo ka yimaada frontend-kan. In la dul qoro X-Forwarded-For cinwaanka macmiilka waa sax hal proxy, waa khalad silsilad, sidaas darteed baahinta proxy badan waxay u baahan tahay nidaamkeeda cinwaanno la aamini karo.

Ka dhig asalka dadweynaha mid u dhaqma sida asal dadweyne

Barnaamijku waa inuu soo saaraa URL buuxa, leexin iyo cookies loogu talagalay asalka dadweynaha. Haddii uu booqade u leexiyo backend.corp.example, booqdaas waxaa loo diraa magac uusan xallin karin.

Tan ku hagaaji habaynta URL-ka dibadda ee barnaamijku taageero iyo siyaasad leexin oo dib loo eegay, ma aha in lagu qoro mar kale magacyada martigeliyaha gudaha jirka jawaabta. Beddelka xargaha ee waxyaabo aan la garanayn wuxuu jebiyaa xamuulka la saxeexay wuxuuna abuuraa khaladaad adag in la dabagalo.

Cookies sidoo kale waxay mudan yihiin taxadar la mid ah. Cookie ku xaddidan magaca gaarka ah marnaba ma soo diri doono browser-ka oo kaliya yaqaan kan dadweynaha.

Sidoo kale xaqiiji in Nginx uu dhab ahaan yeelan karo socket-ka dadweynaha. Adeegga web ee hadda ku yaal 443 waa inuu dhaqaaqaa ama frontend waa inuu ku noolaadaa meel kale, sababtoo ah laba geeddi-socod ma xidhi karaan isla cinwaan iyo deked.

Hubi qayb kasta meesha ay dhab ahaan ka shaqeyso

Xaqiiji qaabeynta iyada oo la isticmaalayo falanqeeyaha la rakibay ka hor dib-u-rakib kasta, si khalad teeline ah uusan u dhicin dhegeyste hadda adeegaya.

Kadib tijaabi qaybta backend-ka oo ka imanaya martigeliyaha frontend laftiisa, isla xaaladda shabakadeed ee Nginx isticmaalo. Ping oo tunnel-ka mara wuxuu caddeeyaa gaaritaanka oo waxba kama sheegayo TLS, fasax ama barnaamijka.

Ugu dambayn samee codsi dadweyne cusub oo u socda magaca martigeliyaha dhabta ah iyada oo la xaqiijinayo shahaadada caadiga ah, oo fiiri waddada jawaabta ma aha kaliya jirka jawaabta.

Kaydi labada indho-indheyn oo la socda qaabeynta la baahiyay, oo qor waxa dhaca marka tunnel-ku aanu jirin. Frontend waa inuu soo celiyaa khalad upstream la xakameeyay, ma aha inuu aamusnaan ugu dhaco backend kale oo aan cidina qorin. 502 oo leh sadar log cad waa natiijo wanaagsan. Bog keyd lagu kaydiyay oo ka yimid asal aan la dooneyn ma aha natiijo wanaagsan.

Maqaallo la xiriira