આ વર્કસ્ટેશનમાંથી બહાર નીકળવાનો એક રસ્તો SOCKS પ્રોક્સી છે, અને તેની પાછળ OpenVPN કોઈ ઉપયોગી વિગત વગર કનેક્ટ ટાઈમઆઉટની જાણ કરે છે. એ જ મશીનનું બ્રાઉઝર તે પ્રોક્સી દ્વારા કામ કરે છે, ઓળખપત્રો સાચાં છે, અને પોર્ટ જવાબ આપે છે. ત્રણ વસ્તુઓ એટલી અલગ હોય છે કે પહેલાં તપાસવી જોઈએ: પ્રોક્સી જે SOCKS આવૃત્તિ બોલે છે, ક્લાયન્ટે પસંદ કરેલો ટ્રાન્સપોર્ટ, અને જ્યાં નામનું વિશ્લેષણ થાય છે. ફાયરવોલને દોષિત ઠેરવતાં પહેલાં આમાંથી દરેકની ખાતરી કરો.

ફાયરવોલ પહેલાં SOCKS આવૃત્તિ મેળવો

સમુદાયનું OpenVPN socks-proxy માટે SOCKS5 બોલે છે. તેને એવી પ્રોક્સી પર લગાવો જે ફક્ત SOCKS4 આપે; TCP જોડાણ ખૂલે છે અને પછી અટકી જાય છે, કારણ કે ક્લાયન્ટ એવા સલામના જવાબની રાહ જુએ છે જે બીજો છેડો કદી પાર્સ કરતો નથી. બહારથી આ અટકવું બરાબર ફિલ્ટર થયેલા પોર્ટ જેવું લાગે છે, એટલે જ આવૃત્તિનો પ્રશ્ન કોઈપણ ફાયરવોલ નિયમ પહેલાં આવે છે. SOCKS-જાણકાર ફેચ એક જ કમાન્ડમાં તેને નક્કી કરે છે.

curl --socks5-hostname 127.0.0.1:9050 gw.lab.example

પૂર્ણ થયેલી વિનંતી એકસાથે બે વાત સાબિત કરે છે: પ્રોક્સીએ SOCKS વિનંતી સ્વીકારી અને તેણે નામનું વિશ્લેષણ કર્યું. કોઈ URL સ્કીમની જરૂર નથી, કારણ કે curl નગ્ન હોસ્ટને HTTP ગણે છે, અને આ પરીક્ષણ માટે પૂરતું છે.

આ ફેચ ક્લાયન્ટ લોગ જે નિષ્ફળતા છુપાવે છે તેને પણ બાકાત કરે છે. પ્રોક્સી બ્રાઉઝરને પરવાનગી આપીને પણ VPN સ્થળને નકારી શકે છે, અને ત્યારે નકાર CONNECT પર થાય છે, કોઈપણ VPN પ્રમાણીકરણ પહેલાં. OpenVPN ફક્ત ટાઈમઆઉટ જણાવે છે, તેથી પ્રોક્સીનો પોતાનો જવાબ એ પુરાવો છે જે તમને જોઈએ છે.

ટ્રાન્સપોર્ટ બંને બાજુ TCP હોવો જોઈએ

SOCKS5 અહીં TCP સ્ટ્રીમ લઈ જાય છે, તેથી સુરંગને જ proto tcp-client જોઈએ છે. જે પ્રોફાઈલ હજી UDP પર સેટ છે તે આ માર્ગે કામ નહીં કરે, કારણ કે ક્લાયન્ટ પ્રોટોકોલનો UDP એસોસિએશન મોડ વાપરતો નથી. પ્રોફાઈલ પલટવો સાચો બદલાવ છે, ઔપચારિકતા નહીં: દૂરના છેડે તે જ પોર્ટ પર TCP પર સાંભળવું પડશે. પછી પેલોડ TCPની અંદર TCP બની જાય છે, જ્યાં ખોવાયેલો સેગમેન્ટ બે વાર ફરી મોકલાય છે અને ગતિ ઘટે છે, જે ઇન્ટરેક્ટિવ સેશન મોટા ટ્રાન્સફર કરતાં ઘણું વધુ અનુભવે છે.

proto tcp-client
remote gw.lab.example 8443
socks-proxy 127.0.0.1 9050

આ સૂચના પ્રોક્સી હોસ્ટ, વૈકલ્પિક પોર્ટ અને વૈકલ્પિક ઓળખપત્ર ફાઈલ લે છે. તેમને પ્રોફાઈલમાં જ રાખો જેથી બીજે રાખેલી નકલ એ જ વર્તન કરે.

આખી શૃંખલાને એક કન્ટેનરમાં સીમિત કરો

શૃંખલા હોસ્ટ પર કરવાનો અર્થ છે તેનો ડિફોલ્ટ માર્ગ કબજે કરવો અને resolver ને એવી સ્થિતિમાં છોડવો જે પછી કોઈ સમજાવી ન શકે. નામસ્થાન કે કન્ટેનર તેને સીમિત કરે છે, તેથી હોસ્ટ પોતાનો માર્ગ રાખે છે જ્યારે SOCKS હોપ અને સુરંગ સાથે રહે છે. તેની અંદર કંઈ પણ સુરંગ ઉપકરણ, તે ઉપકરણને ગોઠવવાના હકો અને પહોંચી શકાય તેવી પ્રોક્સી વગર ઉભું થતું નથી. Compose સેવા આ cap_add: NET_ADMIN અને bind-માઉન્ટ કરેલા /dev/net/tun સાથે મેળવે છે.

cap_add:
  - NET_ADMIN
devices:
  - /dev/net/tun:/dev/net/tun

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

નામનું વિશ્લેષણ એ જ જગ્યા છે જ્યાં અલગાવ નિષ્ફળ જાય છે

જે સુરંગ પેકેટ લઈ જાય છે પણ હોસ્ટના resolver ને પૂછે છે તેણે કંઈ અલગ કર્યું નથી. બે વસ્તુઓ અલગાવને સાચો બનાવે છે: નામસ્થાનનું પોતાનું resolver હોવું, અને તેની પૃચ્છાઓ પ્રોક્સી કે સુરંગ દ્વારા જવી, કદી ભૌતિક ઇન્ટરફેસ દ્વારા નહીં. પરીક્ષણ માટે બે નામ વાપરો: એક જે ફક્ત સુરંગ પાછળ અસ્તિત્વ ધરાવે છે, અને એક જાહેર જેને એ જ માર્ગ લેવો જોઈએ.

docker compose exec vpn cat /etc/resolv.conf
docker compose exec vpn getent hosts internal.lab.example

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

દરેક હોપ ક્રમમાં સાબિત કરો

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

curl --socks5-hostname 127.0.0.1:9050 gw.lab.example
docker compose exec vpn ip route get 203.0.113.10
docker compose exec vpn getent hosts internal.lab.example

જે સંયોજન કામ કરી ગયું તે લખી લો: SOCKS આવૃત્તિ, ટ્રાન્સપોર્ટ, resolver અને નામસ્થાન સેટિંગ્સ. આ શૃંખલાને બીજી વાર યાદથી ઉકેલવી નોંધ કરતાં વધુ મોંઘી છે. એ ચાર તથ્યો ટિકિટમાં રાખો, ચેટ થ્રેડમાં નહીં.

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

સંબંધિત લેખો