OpenVPN lẹ́yìn stunnel: fi ìkòkò náà lọ, kì í ṣe ibùdó 1194
Olùgbọ́ méjì, ibùdó mẹ́ta. Ṣàyẹ̀wò ibi tí ìfiránṣẹ́ ń bà, ibi tí ìkòkò ń so mọ́, ibi tí ó ń so pọ̀, ohun tí àdánwò ìbílẹ̀ fi sílẹ̀ àti ìdánimọ̀ méjèèjì.
Fi ìkòkò TLS sí iwájú OpenVPN àti pé ìmúgbòó kí ó ní olùgbọ́ kejì, tí ọ̀kan nínú wọn ṣoṣo yóò dojú kọ intanẹ́ẹ̀tì. Nígbà tí òpópónà ń ṣiṣẹ́ láti inú ẹ̀rọ kan náà tí ó sì kùnà láti ìta, ìfiránṣẹ́ máa ń tọ́ka sí èyí tí kò tọ́ nínú àwọn méjì. Ohun tí ó gbọ́dọ̀ bára mu ni ẹ̀wọ̀n kan: ìlànà gbogbogbòò dé ìkòkò, àti pé ìsopọ̀ backend ti ìkòkò fúnra rẹ̀ dé ibùdó VPN gidi. Ìfò mẹ́rin ni ó ń gbé ẹ̀wọ̀n yẹn, àti pé èyíkéyìí nínú wọn lè parí ìwádìí ní kùtùkùtù.
Ibùdó méjì, olóhun méjì, ọ̀kan gbogbogbòò
Ìkòkò ń parí TLS fún ìsopọ̀ ìta, ó sì ń fi ìṣàn byte tí a ti yọ ọ́ kúrò fún olùgbọ́ OpenVPN TCP lasan. Ìwọ̀nyí ni àwọn ibùdó ọ̀tọ̀ọ̀tọ̀ pẹ̀lú àwọn fáìlì ìṣètò ọ̀tọ̀ọ̀tọ̀, nítorí náà ṣíṣe àtúnṣe ọ̀kan ń fi èkejì sílẹ̀ láìfọwọ́ kan àti pé ó ṣì dàbí ẹni tí ó ní ìlera. Ó tún túmọ̀ sí pé àwọn méjèèjì lè jìnnà síra nígbàkigbà tí a bá yí ọ̀kan padà láìsí èkejì.
Ṣíṣe iṣẹ́ láti inú ẹ̀rọ náà fúnra rẹ̀ ń fi díẹ̀ hàn nípa ọ̀nà gbogbogbòò. Ìsopọ̀ tààrà sí ibùdó ìpilẹ̀ ń fò ìkòkò kọjá, ìsopọ̀ sí ìkòkò ní àdírẹ́sì LAN rẹ̀ ń fò ìtumọ̀ kọjá, àti pé ìṣètò kíkún ní ẹ̀gbẹ́ alábàákẹ́gbẹ́ nìkan ni ó ń dán ohun tí olùṣe ìta ṣe wò. Àwọn orúkọ pẹ̀lú gbọ́dọ̀ kà pẹ̀lú ìṣọ́ra, nítorí pé localhost túmọ̀ sí ẹ̀rọ tí ń ṣe àkópọ̀ yẹn gan-an, kì í ṣe ẹ̀rọ tí o ń tẹ̀ ní àìròtẹ́lẹ̀. Tọ́jú ìyàtọ̀ yẹn nínú àkọsílẹ̀ rẹ, nítorí pé àdánwò tí a kọ sílẹ̀ láìsí ìfò tí ó bo ń pè ìfiwéra láàrin ohun méjì ọ̀tọ̀ọ̀tọ̀.
Ibi tí ìfiránṣẹ́ ń bà ní tòótọ́
Ó rọrùn láti di ẹ̀wọ̀n mú gẹ́gẹ́ bí ìfò mẹ́rin ju bí nọ́mbà ibùdó mẹ́ta lọ, nítorí pé nọ́mbà kan náà lè túmọ̀ sí ohun ọ̀tọ̀ọ̀tọ̀ ní ọ̀kọ̀ọ̀kan ìpẹ̀kun. Ka tábìlì ní ìlà-ìlà: ìlà kọ̀ọ̀kan ni ibùdó kan tí ó gbọ́dọ̀ gba ìsopọ̀ kí ó sì ṣí èyí tí ó tẹ̀le. Nígbà tí ìlà kan bá tọ́ka sí alábàákẹ́gbẹ́ tí kò tọ́, àmì tí ó wà ní ọ̀wọ̀n ìkẹyìn ni ohun tí olùṣe ń ròyìn.
| Hop | Listens on | Must reach | Symptom when it points elsewhere |
|---|---|---|---|
| Client machine | A local plaintext port | The wrapper's public TLS address | Plain text offered to a TLS endpoint |
| Router forward | Public TCP 443 | The wrapper host on its translated port | Wrapper records no connection at all |
| Wrapper, server mode | Its accepted port, 8443 here | The native VPN socket on loopback | Handshake completes, then silence |
| Native VPN listener | Loopback TCP port | Its peer, over TCP only | A UDP socket behind a byte-stream relay |
Ìlànà tí ó ń tọ́ka sí ibùdó VPN ìpilẹ̀ ní àfikún ìkòkò ń fi àparí TLS kọjá pátápátá, èyí sì ni ìrísí tí ó wọ́pọ̀ jùlọ nínú àṣìṣe yìí: alábàákẹ́gbẹ́ ń ṣí ìfọwọ́sọ̀wọ́ pẹ̀lú olùgbọ́ tí ó ń retí ìgbẹ́ OpenVPN, nítorí náà ìsopọ̀ lè ṣí kí ó sì dúró. Ṣàyẹ̀wò ibùdó tí a ti túmọ̀ pẹ̀lú fáìlì ìṣètò ìkòkò, kì í ṣe pẹ̀lú ìrántí, nítorí pé ẹni tí yóò túnṣe fáìlì yẹn lẹ́ẹ̀kan sí i lè ti yan nọ́mbà mìíràn. Àwọn àṣẹ méjì nísàlẹ̀ ń fi ẹ̀gbẹ́ méjèèjì ti ìbéèrè yẹn hàn ní àkókò kan.
grep -nE '^[[:space:]]*(accept|connect)' /etc/stunnel/stunnel.conf
ss -lntp | grep -E ':443|:8443|:1194'
Àdírẹ́sì ìsopọ̀ tí ó ń kọ̀ ọ́
Ìlà accept tí a so mọ́ 127.0.0.1 ń dáhùn fún ẹ̀rọ náà fúnra rẹ̀ nìkan, nítorí náà ìfiránṣẹ́ tí ó dé ní àdírẹ́sì LAN kò lè sopọ̀, olùṣe sì ń rí ìkọ̀sílẹ̀ tí ó dàbí ìṣòro àlẹmọ́ pákẹ́tì. Wo ibùdó kí o tó fọwọ́ kan ògiri iná, nítorí pé ibùdó ni ìdáhùn tí ó pọ̀ jù. Yálà so ìkòkò mọ́ ìwọ̀n-ìsopọ̀ tí ìfiránṣẹ́ ń tọ́ka sí, tàbí jẹ́ kí ó wà lórí loopback kí o sì jẹ́ kí ìfiránṣẹ́ dé loopback nípasẹ̀ ohun tí ó ń ṣiṣẹ́ gan-an. Ìwọ̀nyí ni àwọn àpẹẹrẹ méjì, ọ̀kọ̀ọ̀kan sì nílò ìlànà tirẹ̀.
Dídá wọn pọ̀ ni bí ìkòkò tí ń ṣiṣẹ́ ṣe di ohun tí kò lè dé láti ìta nígbà tí gbogbo fáìlì ń dàbí ẹni tí ó tọ́. Ṣàyẹ̀wò tí ó wà nísàlẹ̀ jẹ́ àṣẹ kan, ó sì ń dáhùn ìbéèrè tí àyẹ̀wò àwọn ìlànà ògiri iná kò lè dáhùn. Bí ìjáde bá fi àdírẹ́sì loopback hàn nígbà tí ìfiránṣẹ́ ń tọ́ka sí àdírẹ́sì LAN, àtúnṣe wà nínú ìlà accept, kì í ṣe nínú àlẹmọ́ pákẹ́tì.
ss -lntp '( sport = :8443 )'
Ohun tí àdánwò ìbílẹ̀ fi hàn ní tòótọ́
Àṣeyọrí tí a kọ sílẹ̀ láìsí ìfò tí ó bo kò jẹ́ ẹ̀rí nípa àwọn ìfò mìíràn. Ṣe àkọsílẹ̀ àdírẹ́sì tí àdánwò lò àti ìlànà tí ó dáhùn. Lẹ́yìn náà tún ṣe é láti ìta nẹ́tíwọ́kì kì í ṣe láti fọ́nù kan lórí Wi-Fi kan náà, nítorí pé ìhùwàsí ìkánjú yàtọ̀ láàrin àwọn router àti pé ìsopọ̀ tí kò tíì kúrò ní LAN lè tẹ́rùn olùṣe láìsí pé ìfiránṣẹ́ kópa rárá. Ìgbìyànjú kejì yẹn nìkan ni ó ń dán ọ̀nà tí àjèjì ń gbà wò.
Nígbà tí ìgbìyànjú bá kùnà, tẹ̀lé ìsopọ̀ kan káàkiri àwọn àkọsílẹ̀ méjèèjì: àwọn ìlà tí a gbà àti tí a so ti ìkòkò, lẹ́yìn náà àkọsílẹ̀ ìpàdé ti daemon VPN fúnra rẹ̀. Ààlà àkọ́kọ́ tí kò kọ ohunkóhun ni ibi tí àtúnṣe tó kàn yóò wà. Ní kété tí OpenVPN bá bẹ̀rẹ̀ sí fi àwọn àṣàyàn alábàákẹ́gbẹ́ wé, ṣe ìdájọ́ àwọn ìfẹ́rẹ̀ẹ́ yẹn pẹ̀lú àwọn ìlànà ìmúṣẹ yẹn. Ìkìlọ̀ àìbára mu link-mtu kò pa ẹni lẹ́ẹ̀kan náà, dídìí link-mtu mọ́ 1500 kò fi hàn pé pínyà ti dúró, àti ìdúnàádúrà cipher jẹ́ ti ìṣètò inú OpenVPN kì í ṣe ti ìfiránṣẹ́ router.
nc -vz 127.0.0.1 1194
journalctl -u stunnel -n 50 --no-pager
Àwọn àyẹ̀wò yẹn bo ibùdó backend àti àkọsílẹ̀ ìkòkò, èyí sì ya backend tí a kọ̀ sílẹ̀ kúrò nínú ìfọwọ́sọ̀wọ́ tí a kọ̀ sílẹ̀. Ṣe wọ́n nígbà tí ìgbìyànjú kan ń lọ kì í ṣe lẹ́yìn náà. Àwọn àmì àkókò láti ìgbìyànjú kan ni ó ń jẹ́ kí ìfiwéra ṣeé gbára lé.
Ìdánimọ̀ méjì, ìtòlẹ́sẹẹsẹ ìkùnà méjì
Ìwé-ẹ̀rí ìta jẹ́ ti ìkòkò, ìdánimọ̀ inú sì jẹ́ ti OpenVPN, wọ́n sì lè wá láti àwọn aláṣẹ ọ̀tọ̀ọ̀tọ̀. Pípa ọ̀kan nínú àwọn àyẹ̀wò méjèèjì láti jẹ́ kí ọ̀nà kan dàbí ẹni tí ó ní ìlera ń pààrọ̀ ààbò gidi pẹ̀lú èsì ojú. Pa àwọn ìjẹ́rìí méjèèjì mọ́ kí o sì ṣàtúnsẹ̀ wọ́n ní ìtòlẹ́sẹẹsẹ, nítorí pé ìtẹ̀léntẹ̀lé àwọn ìfẹ́rẹ̀ẹ́ ń pe ẹ̀yà náà ní orúkọ: ìṣòro ìwé-ẹ̀rí ìkòkò ń farahàn kí a tó dúnàádúrà ìyàn VPN èyíkéyìí, nígbà tí ìkùnà ìdánimọ̀ inú ń farahàn nìkan lẹ́yìn tí a ti fi ìṣàn náà lélẹ̀.
ìwé-ìtọ́nà stunnel ń ṣàlàyé accept, connect àti ipò alábàákẹ́gbẹ́ pẹ̀lú ìpéye, àwọn abala yẹn sì ń dáhùn ìbéèrè ibùdó kíákíá ju àrójú lọ. Nígbà tí o kò tíì lè sọ ẹ̀yà tí ó dáhùn, ka ìwé-ẹ̀rí tí ibùdó gbogbogbòò ń gbé jáde pẹ̀lú àṣẹ nísàlẹ̀. Bí ìwé-ẹ̀rí ìkòkò bá wà nínú ìjáde, ìfiránṣẹ́ ti dé ìkòkò; bí ìdákẹ́jẹ́ẹ́ tàbí àṣìṣe ìlànà bá wà, kò tíì dé. Ìyàtọ̀ kan náà yẹn ń fi àkókò pamọ́ ju àyẹ̀wò mìíràn èyíkéyìí nínú rẹ̀ lọ.
openssl s_client -connect vpn.example:443 -servername vpn.example </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer