Tẹ̀lé ìbéèrè kan láti fọ́nù tó wà nínú ọkọ̀ ojú irin sí backend tó wà nínú nẹ́tíwọ́kì aládàáni nìkan. Fọ́nù yóò yanjú orúkọ gbangba, so mọ́ àdírẹ́sì gbangba lórí ibùdó 443, yóò sì parí TLS handshake deede. Nginx gba ìsopọ̀ yẹn, lẹ́yìn náà yóò ṣí kejì, tó yàtọ̀ pátápátá, sí àdírẹ́sì tí ò lè dé ọ̀dọ̀ rẹ̀ àyàfi nípasẹ̀ ìsopọ̀ VPN. Kò sí ohun tó yí padà lórí fọ́nù, fọ́nù kò sì ní mọ̀ pé ọ̀nà abẹ́lẹ̀ kan kópa.

Tẹ̀lé ìbéèrè kan nípasẹ̀ ìsopọ̀ méjì

Apá tó ń wọlé jẹ́ ìṣòwò HTTP gbangba. Ó ní orúkọ gbangba, ìwé-ẹ̀rí gbangba àti ọ̀nà ìdáhùn tó gbọ́dọ̀ ṣiṣẹ́ fún àdírẹ́sì èyíkéyìí tí àlejò ní ní àkókò yẹn. Ìyípadà èyíkéyìí tó ń da ọ̀nà yẹn rú yóò fọ́ gbogbo àlejò lẹ́ẹ̀kan náà. Ìdí nìyẹn tí apá gbangba fi jẹ́ apá tí o kéré jùlọ tí o fẹ́ ṣe àdánwò lórí.

Apá tó ń jáde jẹ́ aládàáni. Nginx di alábàárà, ó yanjú orúkọ inú tàbí ó lo àdírẹ́sì tí kò yí padà, ó sì dé ìsìn tí ìbá kọ ìsopọ̀ láti íńtánẹ́ẹ̀tì.

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

Pa àwọn méjèèjì mọ́ lọ́tọ̀ọ̀tọ̀ ní inú rẹ, ìṣètò yóò sì di kedere. Bí o bá dà wọ́n pọ̀, ìwọ yóò parí pẹ̀lú gbígbìyànjú láti mú alábàárà gbangba kópa nínú ọ̀nà abẹ́lẹ̀, ibẹ̀ sì ni ọ̀pọ̀ ìdàrúdàpọ̀ nínú àpẹẹrẹ yìí ti ń bọ̀. Apá aládàáni lè jẹ́ aláìlágbára. Apá gbangba kò gbọ́dọ̀.

Kí o tó kọ́ ohunkóhun nínú èyí, jẹ́rìí sí i pé títẹ̀jáde ohun-èlò náà jẹ́ ìfẹ́ọkàn. Proxy tó ń ṣiṣẹ́ tún jẹ́ ìfihàn tó ń ṣiṣẹ́, àpẹẹrẹ ìjẹ́rìí sì gbọ́dọ̀ jẹ́ ìpinnu, kì í ṣe ipa ẹ̀gbẹ́.

Orúkọ ẹnubodè gbọ́dọ̀ là kọjá ọ̀nà abẹ́lẹ̀

Ìdẹ̀kùn àrékérekè wà nínú yíyanjú orúkọ. Bí DNS aládàáni bá pa orúkọ kan náà rẹ̀ tí profáìlì VPN ń lò fún ẹnubodè tirẹ̀, ìsopọ̀ àtúnṣe lè parí pẹ̀lú gbígbìyànjú láti dé ẹnubodè yẹn nípasẹ̀ ọ̀nà abẹ́lẹ̀ tí ó yẹ kó kọ́ fúnra rẹ̀. Alábàárà nílò kí orúkọ yẹn yanjú kí ọ̀nà abẹ́lẹ̀ tó wà. Bí ó bá yanjú nínú ọ̀nà abẹ́lẹ̀, a kò lè kọ́ ìsopọ̀ náà rárá.

Lo orúkọ tí a fọwọ́ sí lọ́tọ̀ọ̀tọ̀ fún ẹnubodè àti backend, kí o sì dín ìlànà ẹlẹ́rìí kù kí orúkọ kọ̀ọ̀kan lè yanjú sí àdírẹ́sì tí olùlò rẹ̀ nílò. Yíyí àkọsórí Host ohun-èlò padà kò rànwọ́ níbí, nítorí alábàárà VPN ni ó ń ṣe ìwádìí.

Lẹ́yìn náà ronú nípa ìwọ̀n. Frontend nílò ọ̀nà sí àdírẹ́sì backend, ó sì tún gbọ́dọ̀ máa dáhùn fún àwọn alábàárà gbangba. Ọ̀nà abẹ́lẹ̀ kíkún lórí host yẹn lè mú ìbéèrè àkọ́kọ́ ṣẹ, kí ó sì ba èkejì jẹ́.

Níbi tí ìlànà gbà, ọ̀nà abẹ́lẹ̀ sí ibi-ìlọ̀ kan pàtó ni àpẹẹrẹ tó mọ́ jùlọ. Níbi tí ìlànà fipá mú ọ̀nà abẹ́lẹ̀ kíkún, frontend jẹ́ ti ipò nẹ́tíwọ́kì ọ̀tọ̀ dípò kí wọ́n fi àwọn ọ̀nà àìdúró ṣe àtúnṣe fún àwọn àlejò tí a mọ̀.

Kọ búlọ́kì server kí apá méjèèjì lè ṣàyẹ̀wò

Sọ pé backend gbé ìwé-ẹ̀rí jáde fún orúkọ yìí: backend.corp.example ó sì dáhùn lórí àdírẹ́sì aládàáni. Sísopọ̀ mọ́ àdírẹ́sì nígbà tí a ń ṣàyẹ̀wò orúkọ ni gbogbo kókó àwọn àṣàyàn SNI àti orúkọ módùùlì 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;
    }
}

Gbogbo ọ̀nà àti àdírẹ́sì tó wà lókè ni àfikún. Àwọn apá pàtàkì ni àwọn tó ń jẹ́ kí ìṣàyẹ̀wò wà ní ṣíṣí: orúkọ láti yẹ̀wò, àkópọ̀ ìgbẹ́kẹ̀lé láti fi yẹ̀wò rẹ̀, àti jíjìn tó bá ẹ̀wọ̀n tí a fọwọ́ sí mu.

proxy_set_header Host app.example.com jẹ́ àmọ̀ọ̀mọ́. Backend gbọ́dọ̀ ṣètò láti gba orísun gbangba yẹn, kí ó sì gbẹ́kẹ̀lé àwọn àkọsórí tí a fi ránṣẹ́ nìkan láti frontend yìí. Yíyí X-Forwarded-For padà pẹ̀lú àdírẹ́sì alábàárà tọ́ fún proxy kan, kò sì tọ́ fún ẹ̀wọ̀n, nítorí náà ìfilọ́lẹ̀ proxy púpọ̀ nílò ìṣètò àdírẹ́sì tí a gbẹ́kẹ̀lé tirẹ̀.

Mú kí orísun gbangba huwà bí orísun gbangba

Ohun-èlò gbọ́dọ̀ gbé àwọn URL kíkún, ìdarí àti kúkì jáde fún orísun gbangba. Bí ó bá darí àlejò kan sí backend.corp.example, a máa fi àlejò yẹn ránṣẹ́ sí orúkọ tí kò lè yanjú.

Tún ìyẹn ṣe nípasẹ̀ ètò URL ìta tí ohun-èlò ń gbà àti ìlànà ìdarí tí a ti ṣàyẹ̀wò, kì í ṣe nípasẹ̀ kíkọ orúkọ host padà nínú ara ìdáhùn. Yíyí ọ̀rọ̀ padà nínú àkóónú àìdúró ń ba àwọn ẹrù tí a fi ọwọ́ sí jẹ́, ó sì ń dá àwọn àṣìṣe tí ó ṣòro láti tọpinpin.

Kúkì pẹ̀lú tọ́ sí ìtọ́jú kan náà. Kúkì tí a fi mọ́ orúkọ aládàáni ni aṣàwákiri tí ó mọ orúkọ gbangba nìkan kò ní ránṣẹ́ rárá.

Jẹ́rìí pẹ̀lú pé Nginx lè ní socket gbangba gan-an. Ìsìn wẹ́bù tó wà lórí 443 gbọ́dọ̀ ṣí kúrò tàbí frontend gbọ́dọ̀ gbé ibòmíràn, nítorí àwọn ìlànà méjì kò lè so àdírẹ́sì àti ibùdó kan náà.

Ṣàyẹ̀wò apá kọ̀ọ̀kan níbi tí ó ti ń ṣiṣẹ́ gan-an

Ṣàyẹ̀wò ìṣètò pẹ̀lú atúpalẹ̀ tí a fi sórí ẹ̀rọ kí o tó tún gbé e, kí àṣìṣe títẹ̀ má ba àṣàwákiri tó ń sìn báyìí jẹ́.

Lẹ́yìn náà dán apá backend wò láti host frontend fúnra rẹ̀, nínú ipò nẹ́tíwọ́kì kan náà tí Nginx ń lò. Ping nípasẹ̀ ọ̀nà abẹ́lẹ̀ ń fi ìdèédé hàn, kò sì fi ohunkóhun hàn nípa TLS, àṣẹ tàbí ohun-èlò.

Níkẹyìn ṣe ìbéèrè gbangba tuntun sí orúkọ host gidi pẹ̀lú ìṣàyẹ̀wò ìwé-ẹ̀rí deede, kí o sì wo ọ̀nà ìdáhùn kì í ṣe ara ìdáhùn nìkan.

Tọ́jú àwọn àkíyèsí méjèèjì pẹ̀lú ìṣètò tí a fi sílẹ̀, kí o sì kọ ohun tó ṣẹlẹ̀ nígbà tí ọ̀nà abẹ́lẹ̀ kò sí. Frontend gbọ́dọ̀ dá àṣìṣe upstream tí a ṣàkóso padà, kì í ṣe kí ó yọ́ lẹ́ẹ̀kọ̀ọ̀kan lọ sí backend mìíràn tí ẹnikẹ́ni kò kọ sílẹ̀. 502 pẹ̀lú ìlà log tó ṣe kedere jẹ́ àbájáde tó dára. Ojú-ìwé tí a fi pamọ́ láti orísun àìmọ̀ọ́mọ̀ kì í ṣe àbájáde tó dára.

Àwọn àpilẹ̀kọ tó jọra