તમારી સેવા મશીન પર કામ કરે છે, ટનલ ચાલુ છે, અને તોપણ તમારા ડેસ્કનું બ્રાઉઝર હજી પણ જવાબની રાહ જુએ છે. સામાન્ય અર્થમાં કંઈ તૂટ્યું નથી: એપ્લિકેશન નેટવર્ક નેમસ્પેસની અંદર સાંભળે છે, અને તે સ્ટેક LAN માટે અદૃશ્ય છે. તેનું લૂપબેક નેમસ્પેસનું છે, તેથી બીજા મશીન પરના ક્લાયન્ટ પાસે પોર્ટ સુધી પહોંચતું કોઈ સરનામું નથી. એક જાણી જોઈને કરેલો હોપ, અથવા એક veth જોડી, હોસ્ટના બાકીના ભાગને ખસેડ્યા વિના આ સુધારે છે.

LAN સરનામા પર કેમ કંઈ જવાબ આપતું નથી

નેમસ્પેસ એ સંપૂર્ણ નેટવર્ક સ્ટેક છે: ઇન્ટરફેસ, રૂટ, ફાયરવોલ નિયમો અને ખાનગી લૂપબેક. ip netns exec દ્વારા શરૂ કરાયેલી પ્રક્રિયા ફક્ત તે સ્ટેક જુએ છે અને બીજું કંઈ નહીં, તેથી તે જે સરનામે બંધાય છે તે ફક્ત નેમસ્પેસની અંદર જ ઉકેલાય છે. હોસ્ટનું પોતાનું 127.0.0.1 સંપૂર્ણપણે બીજું લૂપબેક છે.

તેથી હોસ્ટ પર curl નિષ્ફળ જાય છે જ્યારે નેમસ્પેસની અંદર એ જ આદેશ સફળ થાય છે. એપ્લિકેશન સ્વસ્થ છે; સરનામું ફક્ત હોસ્ટના સ્ટેકમાં અસ્તિત્વમાં નથી.

socat હોપ વડે એક પોર્ટ પ્રકાશિત કરો

socat બે સ્ટેકને વપરાશકર્તા જગ્યામાં જોડે છે, જે ત્યારે પૂરતું છે જ્યારે એક જ TCP પોર્ટ પસાર થવો હોય. હોસ્ટની બાજુ LAN પર સાંભળે છે અને દરેક સ્વીકારેલા કનેક્શન માટે નેમસ્પેસની અંદર બીજું socat શરૂ કરે છે જે એપના લૂપબેક સાથે જોડાય છે. અંદરની પ્રક્રિયા એપ્લિકેશન સુધી બરાબર સ્થાનિક ક્લાયન્ટની જેમ પહોંચે છે. નેમસ્પેસના રૂટિંગમાં કંઈ બદલાતું નથી, તેથી એપ ટનલને તેના એકમાત્ર નિકાસ તરીકે વાપરવાનું ચાલુ રાખે છે.

socat TCP-LISTEN:9100,reuseaddr,fork EXEC:'ip netns exec vpn socat STDIO tcp-connect:127.0.0.1:9100',nofork

બહારની પ્રક્રિયાને root અથવા નેમસ્પેસમાં પ્રવેશવાની ક્ષમતા જોઈએ. જો VPN પડી જાય, તો એપ તેનો રસ્તો ગુમાવે છે અને પ્રકાશિત પોર્ટ બંધ થઈને નિષ્ફળ જાય છે, અને જેલમાંથી તમે એ જ વર્તન ઇચ્છો છો.

એક કરતાં વધુ પોર્ટ પસાર થાય ત્યારે veth જોડી વાપરો

જ્યારે ઘણાં પોર્ટ કે પ્રોટોકોલ પસાર થવાના હોય, અથવા બીજા હોસ્ટને કનેક્શન શરૂ કરવાના હોય ત્યારે veth જોડી યોગ્ય જવાબ છે. એક છેડો હોસ્ટમાં રહે છે, બીજો નેમસ્પેસમાં જાય છે, અને નાનું /30 બંને બાજુને સ્થિર સરનામું આપે છે. પછી હોસ્ટ રૂટ જોડી ઉપરથી નેમસ્પેસનું સરનામું મોકલે છે.

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

જેલ તોડવાનો ઇરાદો ન હોય તો હોસ્ટ દ્વારા ડિફોલ્ટ રૂટ ઉમેરશો નહીં. ટનલ જ નિકાસ રહેવું જોઈએ, તેથી જોડી ઉપરથી ફક્ત પ્રકાશિત સેવા સરનામું પહોંચી શકાય છે. નેમસ્પેસને તેની પોતાની રિઝોલ્વર ફાઇલ પણ આપો, કારણ કે ip netns exec /etc/netns/vpn/resolv.conf વાંચે છે અને તેના વિના જેલની અંદર નામ ઉકેલવું ખાલી રહે છે.

હોસ્ટ નહીં, બીજા મશીનથી પરીક્ષણ કરો

પરીક્ષણ બીજા મશીનથી ચલાવો, કારણ કે હોસ્ટ સ્થાનિક શ્રોતા સુધી એવા રસ્તે પહોંચી શકે છે જે LAN વિશે કંઈ કહેતા નથી. પહેલા તપાસો કે એપ નેમસ્પેસની અંદર ખરેખર શેમાં બંધાઈ છે, પછી બહારથી પ્રકાશિત સરનામે જોડાઓ. ત્યાં દરેક સરનામે બંધાવાથી જેલ પહોળી થતી નથી, કારણ કે વાઇલ્ડકાર્ડ હજી નેમસ્પેસનું છે અને LAN તેને જોઈ શકતું નથી.

ip netns exec vpn ss -lntp

જો હોસ્ટનું કનેક્શન કામ કરે અને LANનું નહીં, તો ખૂટતો ભાગ હોપ કે રૂટ છે, બંધનનું સરનામું નહીં. જીવંત tun ઉપકરણને અંદર ખસેડવાને બદલે નેમસ્પેસની અંદર OpenVPN શરૂ કરો, કારણ કે ઇન્ટરફેસ ખસેડવાથી તે બંધ થાય છે અને એવા રૂટ ભૂંસાઈ શકે છે જે પછી બહારથી સુધારી શકાશે નહીં. રિકવરી આદેશો જેલની અંદર નહીં, કન્સોલ પર રાખો.

સંબંધિત લેખો