Kufikia huduma ya mteja wa VPN: handaki la kinyume au DNAT
Kufikia huduma kwenye mteja wa OpenVPN bila kuelekeza bandari: linganisha handaki la SSH la kinyume na DNAT upande wa seva na masharti matatu yanayochagua moja.
Hata kompyuta ndogo iliyo nyuma ya NAT ya mtoa huduma inaweza kumhudumia mwenzake, mradi tu seva ya VPN iwe mahali pa kukutana. Njia mbili hufika hapo: mteja hupiga simu kwenda nje na kumwomba seva ishike bandari ya kusikiliza, au seva huchapisha bandari na kuigeuza kwenye handaki. Zote mbili hutatua tatizo lile lile la ufikivu na hujiendesha tofauti wakati wa hitilafu, uangalizi na uwekaji kumbukumbu. Masharti matatu huamua lipi linafaa katika usanidi wako.
Maumbo mawili, mahali pa kukutana
Katika umbo la kwanza mteja hufungua kipindi cha SSH kwenda nje na kumwomba seva isikilize kwenye bandari iliyochaguliwa, na kurudisha kila muunganisho kupitia kipindi hicho. Kwenye seva hakuna kinachoelekezwa na hakuna utafsiri wa pakiti, kwa hiyo mahitaji ya pekee ni akaunti ya SSH, uelekezaji ulioruhusiwa na kanuni ya ngome ya moto kwa bandari. Huduma hubaki imefungwa kwenye loopback ya mteja, jambo ambalo kwa kawaida ndilo unalotaka.
ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]
Katika umbo la pili seva inamiliki bandari ya umma na huandika upya kila muunganisho kuelekea anwani ya handaki la mteja. Hilo linahitaji uelekezaji wa IP umewezeshwa, utafsiri wa lengo unapoingia na utafsiri wa chanzo unapotoka, na linaendelea kufanya kazi wakati hakuna kipindi cha SSH. Bandari ni mali ya seva na si ya kipindi, na sifa hiyo ndiyo huamua kesi nyingi halisi.
Hakuna umbo lenye usalama zaidi kwa asili. Zote mbili zinaishia kuweka bandari moja ya huduma wazi kwa yeyote anayeweza kufikia anwani ya umma ya seva, na zote mbili bado zinategemea uthibitishaji wa huduma yenyewe.
Sharti la kwanza: bandari inapaswa kuishi zaidi ya kipindi
Uelekezaji wa kinyume huishi muda sawa na kipindi cha SSH kilichouunda. Uhusiano unapovunjika, msikilizaji hupotea na mwenzake huona muunganisho uliokataliwa badala ya njia ya polepole. Uangalizi wa amri kwa kitengo cha systemd na sera ya kuwasha upya hutatua hilo, na ExitOnForwardFailure=yes hufanya ufungaji ulioshindikana uonekane mara moja badala ya kuacha kipindi kinachofanya kazi bila uelekezaji.
Bandari iliyotafsiriwa hustahimili kuwashwa upya ikiwa kanuni zimehifadhiwa, lakini inategemea mteja kubaki na anwani ile ile ya handaki. Bwawa la mabadiliko linalompa kompyuta ndogo anwani nyingine baada ya kuunganishwa upya huelekeza kanuni kimya kimya mahali pasipo na kitu. Hifadhi anwani ya handaki kwanza, kisha andika kanuni, na chukulia zote mbili kama badiliko moja.
Ikiwa huduma inapaswa kujibu saa tatu usiku bila mtu yeyote kuangalia, umbo lenye bandari iliyochapishwa na seva lina sehemu zinazohama chache zaidi, kwa sababu mchakato pekee unaopaswa kubaki hai ni handaki lenyewe.
Sharti la pili: ngome ya moto na kumbukumbu ni za nani
Umbo la kinyume linaweka sera yote mahali pachache. sshd huamua kupitia AllowTcpForwarding kama uelekezaji wa mbali unaruhusiwa kabisa, na GatewayPorts huamua kama msikilizaji hufungwa kwenye loopback au kwenye kila anwani. Kwa thamani chaguo-msingi no mwenzake aliye nje ya seva hawezi kufikia bandari ingawa uelekezaji umefaulu, na hilo huonekana kama handaki lililovunjika wakati kwa kweli ni anwani ya ufungaji.
sudo ss -ltn '( sport = :8081 )'
sudo grep -E '^(GatewayPorts|AllowTcpForwarding)' /etc/ssh/sshd_config
Umbo lililotafsiriwa linahitaji uelekezaji umewezeshwa na kanuni mbili, na kanuni ya pili ndipo mapishi mengi hukosea. Kuweka kikomo utafsiri wa chanzo kwenye hali ya conntrack DNAT humaanisha kuwa ni muunganisho ulioundwa na kanuni ya lengo pekee unaoandikwa upya, badala ya kila pakiti ambayo seva hutuma kwenye handaki.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8081 -j DNAT --to-destination 10.88.0.6:8080
sudo iptables -t nat -A POSTROUTING -o tun0 -m conntrack --ctstate DNAT -j SNAT --to-source 10.88.0.1
Uandikaji upya huo pia huharibu uhusishaji. Baada yake mteja humwona kila mpigaji simu kama anwani ya handaki la seva, jambo linalounganisha kikomo chochote cha kasi kwa anwani kwenye ndoo moja na kuficha nani alituma nini. Ikiwa uhusishaji ni muhimu, maliza muunganisho kwenye seva au weka uamuzi wa ruhusa hapo na upitishe utambulisho kwenye kichwa ambacho huduma inakiamini. Kuchagua kati ya marekebisho haya mawili kunategemea kama huduma inasoma kichwa cha wakala kabisa.
Sharti la tatu: bandari moja au nyingi, na jina ni la nani
Huduma moja kwenye bandari moja ndilo jambo ambapo uelekezaji wa kinyume hushinda kwa jitihada. Unahitaji amri moja, akaunti moja na kanuni moja ya ngome ya moto, na usafishaji ni kuua kipindi. Huduma nyingi kwenye anwani ile ile ya umma hukusukuma kuelekea umbo lililochapishwa na seva, kwa sababu kila uelekezaji wa kinyume unahitaji bandari yake ya seva na mkusanyiko hukua kwa kila huduma.
Majina hufanya iwe ngumu zaidi. Uelekezaji wa kinyume unaweza kukaa nyuma ya wakala wa TCP unaoelekeza kwa SNI, wakati bandari iliyotafsiriwa kwa kawaida ni bandari moja kwa kila huduma. Ikiwa huduma humaliza TLS yenyewe na inahitaji jina asilia la mwenyeji, mbinu ya wakala huhifadhi hilo, na mbinu ya DNAT huhifadhi tu ikiwa huduma inakubali jina hilo kwenye bandari hiyo.
Andika ni sharti gani kati ya matatu liliamua umbo. Vinginevyo mtu anayefuata atakayeongeza huduma ya pili atafungua tena ulinganisho ule ule kwa muktadha mdogo.
Amua, kisha jaribu kutoka nje
Jaribu njia kutoka mtandao usio na njia yoyote kuelekea kompyuta ndogo, na angalia vihesabu kwenye seva wakati ombi linaendelea. Kujaribu kutoka seva kuelekea anwani yake ya umma hakuonyeshi chochote hapa, kwa sababu pakiti huundwa ndani na kamwe haifiki kwenye ndoano ya utafsiri wa kuingia, kwa hiyo jaribio linaweza kufaulu wakati njia halisi imevunjika.
sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20
Vihesabu vinavyobaki flat vinamaanisha pakiti haikufika kwenye kanuni, jambo linaloelekeza kwa mtoa huduma au ngome ya moto ya mwenyeji. Vihesabu vinavyohama wakati huduma inakataa vinaelekeza kwa ngome ya moto ya mteja mwenyewe au anwani ambayo huduma inasikiliza. Handaki linalobeba pakiti lakini halirudishi chochote ni tatizo la njia au njia ya kurudi, na hakuna moja ya matokeo haya matatu yanayopaswa kutatuliwa kwa kuhariri adapta ya mteja. Andika ni kihesabu kipi kilihamia kabla ya kubadilisha chochote, kwa sababu jaribio linalofuata linahitaji msingi huo.
Umbo linapofanya kazi, rekodi bandari, mmiliki na njia ya uangalizi kando ya usanidi wa handaki. Marekebisho ya ufikivu yaliyopo tu kwenye historia ya shell ya mtu fulani ni kuwasha upya moja kutoka tukio linalojirudia.