Programu ndani ya nafasi ya majina ya VPN haipatikani kutoka LAN
Nafasi ya majina ya mtandao humpa programu moja handaki yake na loopback yake. Chapisha tu mlango wake kwa mruko wa socat au jozi ya veth badala ya mwenyeji.
Huduma yako inafanya kazi kwenye mashine, handaki liko juu, na bado kivinjari kwenye dawati lako kingali kusubiri jibu. Hakuna kilichovunjika kwa maana ya kawaida: programu inasikiliza ndani ya nafasi ya majina ya mtandao, na tabaka hilo halionekani kwa LAN. Loopback yake ni ya nafasi ya majina, kwa hivyo mteja kwenye mashine nyingine hana anwani yoyote inayofikia mlango. Mruko mmoja wa makusudi, au jozi moja ya veth, hutatua hili bila kusogeza sehemu iliyobaki ya mwenyeji.
Kwa nini hakuna kinachojibu kwenye anwani ya LAN
Nafasi ya majina ni tabaka kamili la mtandao: violesura, njia, kanuni za kinga ya moto na loopback ya faragha. Mchakato ulioanzishwa kupitia ip netns exec huona tabaka hilo tu na hakuna kingine, kwa hivyo anwani inayofungwa nayo hutatuliwa ndani ya nafasi ya majina pekee. 127.0.0.1 ya mwenyeji wenyewe ni loopback tofauti kabisa.
Ndiyo sababu curl kwenye mwenyeji inashindikana wakati amri hiyo hiyo ndani ya nafasi ya majina inafanikiwa. Programu ni nzuri; anwani haipo kwenye tabaka la mwenyeji, ndivyo tu.
Chapisha mlango mmoja kwa mruko wa socat
socat huunganisha tabaka mbili katika nafasi ya mtumiaji, jambo ambalo linatosha wakati mlango mmoja wa TCP unapaswa kuvuka. Upande wa mwenyeji husikiliza kwenye LAN na kwa kila muunganisho uliokubaliwa huanzisha socat ya pili ndani ya nafasi ya majina inayounganisha na loopback ya programu. Mchakato wa ndani hufikia programu kama vile mteja wa ndani angefanya. Hakuna kinachobadilika katika uelekezaji wa nafasi ya majina, kwa hivyo programu inaendelea kutumia handaki kama njia yake pekee ya kutokea.
socat TCP-LISTEN:9100,reuseaddr,fork EXEC:'ip netns exec vpn socat STDIO tcp-connect:127.0.0.1:9100',nofork
Mchakato wa nje unahitaji root au uwezo wa kuingia kwenye nafasi ya majina. Ikiwa VPN itaanguka, programu itapoteza njia yake na mlango uliochapishwa unashindikana ukiwa umefungwa, na hiyo ndiyo tabia unayotaka kutoka gerezani.
Tumia jozi ya veth wakati zaidi ya mlango mmoja unavuka
Jozi ya veth ni jibu sahihi wakati milango au itifaki kadhaa zinapaswa kuvuka, au wakati wenyeji wengine wanahitaji kuanzisha miunganisho. Mwisho mmoja hubaki kwenye mwenyeji, mwingine huhamia kwenye nafasi ya majina, na /30 ndogo huwapa pande zote mbili anwani thabiti. Kisha njia ya mwenyeji hutuma anwani ya nafasi ya majina kupitia jozi hiyo.
ip link add veth0 type veth peer name veth1
ip link set veth1 netns vpn
ip addr add 10.77.0.1/30 dev veth0
ip link set veth0 up
ip netns exec vpn ip addr add 10.77.0.2/30 dev veth1
ip netns exec vpn ip link set veth1 up
Usiongeze njia chaguo-msingi kupitia mwenyeji isipokuwa una nia ya kuvunja gereza. Handaki linapaswa kubaki njia ya kutokea, kwa hivyo kupitia jozi inafikika tu anwani ya huduma iliyochapishwa. Ipe nafasi ya majina faili yake ya utatuzi pia, kwa sababu ip netns exec husoma /etc/netns/vpn/resolv.conf na bila hiyo utatuzi wa majina ndani ya gereza ni tupu.
Fanya jaribio kutoka mashine ya pili, sio kutoka kwa mwenyeji
Fanya jaribio kutoka mashine ya pili, kwa sababu mwenyeji anaweza kufikia msikilizaji wa ndani kupitia njia ambazo hazisemi chochote kuhusu LAN. Kwanza angalia programu ilifungwa na nini hasa ndani ya nafasi ya majina, kisha unganisha kutoka nje kwenye anwani iliyochapishwa. Kufunga kwa kila anwani hapo hakupanui gereza, kwa sababu wildcard bado ni ya nafasi ya majina na LAN haiwezi kuiona.
ip netns exec vpn ss -lntp
Ikiwa muunganisho kutoka kwa mwenyeji unafanya kazi na ule wa LAN haufanyi, sehemu inayokosekana ni mruko au njia, sio anwani ya kufunga. Anzisha OpenVPN ndani ya nafasi ya majina badala ya kuhamisha kifaa cha tun kilicho hai ndani yake, kwa sababu kuhamisha violesura hukizima na kunaweza kufuta njia ambazo baadaye hutaweza kuzirekebisha kutoka nje. Weka amri za urejeshaji kwenye konsoli, sio ndani ya gereza.