VPN relay dáwọ́ lílọ́wọ́ SSH: àwọn ààlà descriptor fáìlì
Ìrìnàjò inú ihò náà ń bá a lọ nígbà tí relay socat tó wà lẹ́yìn rẹ̀ kọ̀ àwọn ìpàdé tuntun. Tẹ̀lé ọ̀nà náà, lẹ́yìn náà ka ààlà tí a jogún lórí PID tó wà láàyè.
Ìfọwọ́sowọ́pọ̀ WireGuard ṣì ń parí, peer ṣì ń fi endpoint àìpẹ́ hàn, ṣùgbọ́n ìpàdé SSH tuntun nípasẹ̀ relay tó wà lẹ́yìn rẹ̀ ń rọ̀ láìsí banner kankan. Àkópọ̀ yẹn yà kúrò nínú ihò náà ó sì tọ́ka sí ìlànà tó ń gba socket. Relay bí socat jókòó ní ọ̀nà ohun èlò pẹ̀lú ìsúnná descriptor tirẹ̀, àwọn ọmọ tirẹ̀ àti àwọn ààlà tí a jogún tirẹ̀. Ìrìnàjò ìsàlẹ̀ bẹ̀rẹ̀ ní ọ̀dọ̀ oníbàárà ó sì dúró ní ẹ̀yà àkọ́kọ́ tí kò lè ṣí socket mìíràn.
Tẹ̀lé ọ̀nà náà kí o tó yí nọ́mbà padà
Tẹ̀lé ìbéèrè kan tó kùnà dípò ronú nípa gbogbo ihò náà. Oníbàárà ń kọ sínú ihò náà, daemon VPN ń yọ ìkọ̀kọ̀ kó sì ń tọ́ ọ̀nà, relay sì ń gba ní ẹ̀gbẹ́ kejì. Ìgbésẹ̀ kọ̀ọ̀kan ń lo descriptor, èyí tí ó sábà máa ń tán ni èyí tó kẹ́yìn.
Bẹ̀rẹ̀ pẹ̀lú ìbéèrè tí o lè tún ṣe kí o sì díwọ̀n àkókò rẹ̀. Bí ìfọwọ́sowọ́pọ̀ TCP bá parí ṣùgbọ́n banner ohun èlò kò débà, relay gba socket náà lẹ́yìn náà ó sì hááké nínú ọmọ kan tàbí lórí ẹsẹ̀ òkè rẹ̀. Bí ìfọwọ́sowọ́pọ̀ fúnra rẹ̀ kò bá parí rárá, ohun tó fà á ni ìtọ́sọ́nà, firewall tàbí ipò olùgbọ́, kì í ṣe òrùlé descriptor. Kọ èyí tí o rí nínú àwọn ìrísí méjì náà, nítorí wọ́n tọ́ka sí àwọn ìlànà ọ̀tọ̀ọ̀tọ̀.
Ka àwọn ìgbésẹ̀ tí ń ṣe iṣẹ́ lẹ́ẹ̀mejì pẹ̀lú. Olùgbọ́ tó ń pín ẹ̀ka ń fi gbogbo socket tí a gbà fún ọmọ tó ń pa ẹ̀dà tirẹ̀ mọ́, nítorí náà àpapọ̀ gidi jẹ́ ẹ̀yà gbogbo igi náà, kì í ṣe ti òbí nìkan.
Ka ààlà tí relay jogún
Ààlà kan ṣoṣo tó ṣe pàtàkì jẹ́ ti ìlànà tó ń ṣiṣẹ́, ohun tó sì fi í lélẹ̀ ni ohun tó bẹ̀rẹ̀ ìlànà yẹn. Títẹ ulimit -n nínú shell ń ṣàpèjúwe shell náà. Béèrè lọ́wọ́ olùdarí iṣẹ́ ohun tó fi sílò, lẹ́yìn náà jẹ́rìí lórí PID.
systemctl show -p MainPID -p LimitNOFILE vpn-relay.service
cat /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits
Fáìlì limits ń tẹ òrùlé rírọ̀ àti líle gẹ́gẹ́ bí ìlànà ṣe rí wọn. Ìwọ̀n rírọ̀ tó kéré lábẹ́ ìwọ̀n líle tó pọ̀ túmọ̀ sí pé a gbà daemon láàyè láti gbé òrùlé tirẹ̀ sókè, àwọn kan sì ń ṣe bẹ́ẹ̀ nígbà ìbẹ̀rẹ̀; àwọn ìwọ̀n rírọ̀ tó dọ́gba tó sì kéré túmọ̀ sí pé fáìlì unit ni orísun.
A ń gbé drop-in wọlé ní ìtòlẹ́sẹẹsẹ ọ̀rọ̀, àwọn fáìlì tó wá lẹ́yìn sì ń borí, nítorí náà systemctl cat vpn-relay.service ni ìwòye aláṣẹ ohun tó wà lẹ́lẹ̀. Ṣíṣàtúnṣe fáìlì tí olùdarí kò kà rárá ni ìdí tó wọ́pọ̀ jù fún nọ́mbà tí a gbé sókè láìsí ipa.
Ya ìbáṣepọ̀ aláìdúró kúrò nínú ipò tí a pa mọ́
Ìlànà méjì lè dé òrùlé kan náà fún àwọn ìdí tí kò ní í ṣe pẹ̀lú ara wọn, àwọn ìtúsẹ̀ sì yàtọ̀. Ìbéèrè tó ń tẹ̀lé àwọn ìpàdé aláìdúró tó wúlò jẹ́ ìbéèrè agbára. Ìdàgbàsókè tó ń bá a lọ lẹ́yìn tí iṣẹ́ parí jẹ́ ìjáde tàbí àkójọ àwọn ìpàdé tí kò sí ẹni tó pa.
Díwọ̀n nígbà ìsinmi, ní ipò gíga deede rẹ àti lẹ́ẹ̀kan sí i ní ìṣẹ́jú díẹ̀ lẹ́yìn tí ẹrù bá dúró. Kíkà àwọn àkọsílẹ̀ tó ṣí pẹ̀lú ls /proc/PID/fd | wc -l lòdì sí ààlà rírọ̀ ń sọ àlàfo fún ọ, kíkà tó kéré sí òrùlé ní ọ̀kan tàbí méjì jẹ́ ìdúró líle kì í ṣe ọ̀nà lọ́ra.
Nígbà tí kíkà bá kọ̀ láti sọ̀kalẹ̀, wo àwọn ipò socket dípò àpapọ̀. Àwọn descriptor tó jókòó nínú CLOSE_WAIT túmọ̀ sí pé peer ti pa, ẹ̀gbẹ́ rẹ kò sì pa rárá, èyí jẹ́ àbùkù nínú ìgbà ayé ohun èlò tí ààlà ńlá ń pàápàá sunwọ̀n. Dópin àwọn ọmọ pẹ̀lú: relay tó ń pín ẹ̀ka láìsí ààlà fún àwọn ọmọ aláìdúró ń tán descriptor, ààyè ìlànà àti ìrántí lẹ́ẹ̀kan náà.
Jẹ́rìí ìwọ̀n tuntun lórí ìlànà tó wà láàyè
Lẹ́yìn ṣíṣàtúnṣe unit, tún olùdarí gbé wọlé kí o sì tún iṣẹ́ náà bẹ̀rẹ̀, nítorí gbígbé wọlé nìkan kò fi àwọn ààlà tí ìlànà tó ń ṣiṣẹ́ ti jogún rọ́pò rárá. Jẹ́rìí lórí ìlànà tó ń ṣe ìrìnàjò náà ní tòótọ́.
systemctl daemon-reload
systemctl restart vpn-relay.service
awk '/Max open files/ {print}' /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits
ss -tnp state established '( sport = :2222 )' | wc -l
Ìlà awk ń da orísìí tuntun padà; bí ó bá ṣì ń fi ti àtijọ́ hàn, drop-in tí o ṣàtúnṣe kì í ṣe èyí tí a ń gbé wọlé. Kíkà ss ni àyẹ̀wò ẹrù rẹ, nítorí náà ṣí iye ìpàdé tí o ń retí kí o sì wo bí ó ṣe ń gòkè. Kíkà tó ń gòkè lẹ́yìn tí àwọn ìpàdé yẹn ti pa túmọ̀ sí pé ààlà kì í ṣe gbogbo ìṣòro rárá.
Ìkìlọ̀ kan ń bá gbogbo ìgbéga ńlá. Àwọn ohun èlò tó ń ṣe ìwádìí pẹ̀lú select() kò lè ṣọ́ àwọn descriptor tó ju FD_SETSIZE lọ, èyí tó jẹ́ 1024 nínú àwọn ìkọ́ deede, nítorí náà òrùlé tí a gbé ju bẹ́ẹ̀ lọ lè mú àwọn ìkùnà tó dàbí aláìsopọ̀. Ìtọ́kasí ìṣiṣẹ́ systemd ń gbé ìkìlọ̀ kan náà fún àwọn iṣẹ́ tí ó ń bẹ̀rẹ̀.
Jẹ́ kí àtúnbẹ̀rẹ̀ jìnnà sí wíwà ihò náà
Àtúnbẹ̀rẹ̀ relay ń ju àwọn ìpàdé aláṣiṣẹ́ rẹ̀ sílẹ̀, ìyẹn sì jẹ́ ìṣẹ̀lẹ̀ ọ̀tọ̀ sí VPN jíjá. Tò ìyípadà náà kí ihò náà lè dúró lókè nígbà tí relay ń yí ká, kí o sì kìlọ̀ fún ẹnikẹ́ni tí ìpàdé gígùn rẹ̀ ń kọjá lórí rẹ̀.
Ìdápadà ni fáìlì unit ti ṣáájú pẹ̀lú àtúnbẹ̀rẹ̀ mìíràn, fáìlì yẹn sì wà níbi rẹ̀ títí ìwọ̀n tuntun yóò fi ye ọjọ́ iṣẹ́ kan. Lẹ́yìn náà pa àyíká pẹ̀lú ìbéèrè tó kùnà ní ìbẹ̀rẹ̀: ìpàdé SSH tuntun kan nípasẹ̀ relay, gbígbé kan tó gùn tó láti ṣe pàtàkì, àti kíkà descriptor tó padà sí ìpele ìsinmi rẹ̀.