విధాన రూటింగ్ మరియు SOCKS: ఏ పొర నిజంగా ట్రాఫిక్ను ప్రాక్సీ చేస్తుంది
SOCKS పోర్టుకు మార్గం SOCKS సెషన్ కాదు. యాప్ స్థాయి ప్రాక్సీ సెట్టింగ్లు, IP-నుండి-ప్రాక్సీ అడాప్టర్ మరియు రూట్ చేయబడిన గేట్వేలను మార్పిడి చేసే పొర ప్రకారం పోల్చండి.
1080 పోర్టులో SOCKS శ్రోత చలుస్తున్న హోస్ట్కు VPN క్లయింట్ ట్రాఫిక్ను పంపే విధాన మార్గాన్ని మీరు జోడించారు. ప్యాకెట్లు వస్తాయి, శ్రోత ఏమీ నమోదు చేయదు, మరియు కనెక్షన్ వేలాడుతుంది. మార్గంలో ఏ తప్పూ లేదు: తదుపరి హాప్ ప్యాకెట్ ఎక్కడికి వెళ్తుందో ఎంచుకుంటుంది, SOCKS అనేది క్లయింట్ ప్రారంభించాల్సిన సంభాషణ. ప్రాక్సీ ద్వారా ట్రాఫిక్ పంపడం అంటే ప్రజలు సాధారణంగా అర్థం చేసుకునే మూడు నిర్మాణాలను పోల్చండి, మీ సెటప్లో ఏ భాగం లేదో స్పష్టమవుతుంది.
రూటింగ్, DNAT మరియు SOCKS వేర్వేరు విషయాలను మారుస్తాయి
విధాన మార్గం పొర 3 నిర్ణయాన్ని తిరిగి రాస్తుంది. ఒక క్లయింట్ ట్రాఫిక్ను ఎంచుకున్న తదుపరి హాప్కు పంపడానికి రెండు పంక్తులు సరిపోతాయి:
ip route add default via 10.50.0.2 table 101
ip rule add from 10.77.0.2 lookup 101ఆ తర్వాత కెర్నల్ ప్యాకెట్ను 10.50.0.2 కు అప్పగిస్తుంది, అసలు గమ్యం ఇంకా IP హెడర్లోనే ఉంది. 10.50.0.2 రౌటర్ అయితే, అది ప్యాకెట్ను పంపుతుంది. అది 1080లో SOCKS డెమన్ ఉన్న హోస్ట్ అయితే, ప్యాకెట్ దాన్ని స్వీకరించగల ఏదానికీ చిరునామా చేయబడలేదు, మరియు 1080 పోర్టుకు DNAT కూడా సహాయపడదు, ఎందుకంటే అనువదించిన ప్యాకెట్ ఇంకా SOCKS అభివాదనకు బదులు అసలు అప్లికేషన్ పేలోడ్ను మోస్తుంది.
SOCKS5 వెర్షన్ బైట్, పద్ధతుల జాబితా, ప్రామాణీకరణ మార్పిడి మరియు గమ్యాన్ని పేర్కొనే అభ్యర్థనతో ప్రారంభమవుతుంది. అవి అప్లికేషన్ డేటా. ఏ రూటింగ్ ఎంట్రీ లేదా netfilter లక్ష్యం దాన్ని ఉత్పత్తి చేయదు, మరియు ఒక పంక్తిలో పోలిక ఇదే: రూటింగ్ మార్గాన్ని ఎంచుకుంటుంది, SOCKS సర్వర్ను రెండవ కనెక్షన్ చేయమని అడుగుతుంది.
మొదటి సందర్భం: యాప్ తానే SOCKS మాట్లాడగలదు
ప్రోగ్రామ్కు ప్రాక్సీ సెట్టింగ్ ఉంటే, ఇది అతి చిన్న మార్గం మరియు కెర్నల్ మార్పు అవసరం లేదు. దాన్ని శ్రోత వైపు చూపండి, సర్వర్ అడిగితే ఆధారాలు ఇవ్వండి, మరియు పేర్లు స్థానికంగా పరిష్కరించబడతాయా లేదా ప్రాక్సీకి పంపబడతాయా అని నిర్ణయించండి. curl లో ఇవి వేర్వేరు ఫ్లాగ్లు, మరియు గమ్యం ప్రాక్సీ వైపు నుండి మాత్రమే పరిష్కరించబడినప్పుడు తేడా ముఖ్యం:
curl --socks5 10.50.0.2:1080 https://docs.example.com
curl --socks5-hostname 10.50.0.2:1080 https://internal.example.comప్రాక్సీ పర్యావరణ చరాలను పట్టించుకోని లేదా ముడి సాకెట్లను తెరిచే యాప్లకు ఈ విధంగా సహాయం చేయలేము. బ్రౌజర్లు మరియు చాలా HTTP సాధనాలు బాగానే ఉన్నాయి; గేమ్ క్లయింట్, మెయిల్ డెమన్ లేదా ఏదైనా విక్రేత బైనరీ సాధారణంగా కాదు. సరిహద్దు ప్రతి యాప్ మరియు ప్రతి ప్రోటోకాల్కు, అందుకే ఈ ఎంపిక పరీక్షకు అద్భుతం మరియు మొత్తం VPN కు సమాధానంగా బలహీనం.
రెండవ సందర్భం: IP ప్రవాహాలను ప్రాక్సీ సెషన్లుగా మార్చే అడాప్టర్
SOCKS మాట్లాడలేని ప్రోగ్రామ్ల కోసం, మార్పిడి IP ట్రాఫిక్ను ముగించి వారి తరఫున ప్రాక్సీ సెషన్లు తెరిచే ఏదో ఒకదానిలో జరగాలి. ఆ భాగం టన్నెల్ ఇంటర్ఫేస్ను కలిగి ఉంటుంది, విధాన రూటింగ్ ఎంచుకున్న ప్రవాహాలను అంగీకరిస్తుంది, ప్రతిదానికీ SOCKS హ్యాండ్షేక్ చేస్తుంది మరియు ప్రతిస్పందనలను తిరిగి నిర్మిస్తుంది. మార్గం ట్రాఫిక్ను దాని వైపు మళ్లిస్తుంది; సెషన్ను సృష్టించేది అడాప్టర్.
పూర్తి సబ్నెట్ను దానికి అప్పగించే ముందు దాని డాక్యుమెంటేషన్ చదవండి. చాలా అడాప్టర్లు TCP ను బాగా మోస్తాయి మరియు UDP ను SOCKS5 UDP అనుబంధం ద్వారా మాత్రమే నిర్వహిస్తాయి, వాటిలో ఏదీ ICMP ను ప్రాక్సీ ట్రాఫిక్గా మార్చదు, కాబట్టి విజయవంతమైన ping ప్రాక్సీ మార్గం గురించి ఏమీ చెప్పదు. DNS మరో ఉచ్చు: అడాప్టర్ పేర్లను స్థానికంగా పరిష్కరిస్తే, అంతర్గత రికార్డులు మాత్రమే తప్పు సమాధానానికి లేదా ఏమీ లేని స్థితికి పరిష్కరించబడతాయి.
లూప్ నివారణ అనేది కరుచుకునే కార్యాచరణ వివరం. SOCKS సర్వర్కు అడాప్టర్ యొక్క స్వంత కనెక్షన్లు తిరిగి అడాప్టర్లోకి రూట్ చేయకూడదు, కాబట్టి దాని ట్రాఫిక్కు నియమంలో మినహాయింపు లేదా ప్రత్యేక మూల చిరునామా అవసరం. దీన్ని తప్పుగా చేస్తే ప్రాక్సీ సెషన్ తనను తాను ప్రాక్సీ చేయడానికి ప్రయత్నిస్తుంది.
మూడవ సందర్భం: హోస్ట్ నిజానికి రూట్ చేయబడిన గేట్వే
కొన్నిసార్లు పని చేసే సెటప్లో SOCKS అసలే ఉండదు. రిమోట్ హోస్ట్ ప్యాకెట్లను పంపుతుంది లేదా వాటికి NAT చేస్తుంది, మూల ఆధారిత నియమం దాన్ని నిష్క్రమణగా ఎంచుకుంటుంది. ఆ నిర్మాణం చెల్లుబాటు అవుతుంది, మరియు కాపీ చేసిన కాన్ఫిగరేషన్ ఒక నెట్వర్క్లో పని చేసి మరొకదానిలో ఎందుకు విఫలమవుతుందో వివరిస్తుంది: నియమం ఒకటే, లేని భాగం ఆవలి వైపు పంపే సేవ.
మూడు సందర్భాలు త్వరగా విడిపోతాయి. నిజంగా ఏది వింటోందో తనిఖీ చేయండి, ఆపై హోస్ట్ను చేరే మొదటి బైట్లను చూడండి:
ss -ltnp 'sport = :1080'
tcpdump -ni eth0 -X 'tcp port 1080'నిజమైన SOCKS క్లయింట్ మొదటి పేలోడ్ బైట్ 0x05, అభివాదనలోని వెర్షన్. క్యాప్చర్ దానికి బదులు అసలు అప్లికేషన్ డేటాను చూపిస్తే, ఏ SOCKS డెమన్ సమాధానం ఇవ్వదు, ఎందుకంటే చర్చలు ఎప్పుడూ ప్రారంభం కాలేదు. 1080లో ఏదీ వినకపోతే, హోస్ట్ గేట్వే, మరియు ప్రశ్న అది పంపుతుందా మరియు తిరిగి వచ్చే మార్గం ఉందా అనేది.
నాలుగు ప్రశ్నలతో పొరను ఎంచుకోండి
ప్రోగ్రామ్కు ప్రాక్సీ సెట్టింగ్ ఉందా? దాన్ని ఉపయోగించి అక్కడే ఆగండి. ట్రాఫిక్లో జీవించాల్సిన UDP లేదా ICMP ఉందా? ICMP ను రూట్ చేయబడిన లేదా NAT గేట్వే మాత్రమే మోస్తుంది, UDP కు రెండు చివరలు మద్దతిచ్చే SOCKS5 అనుబంధం కావాలి. మెషీన్లోని ప్రతి ప్రక్రియ, మీరు కాన్ఫిగర్ చేయలేని వాటితో సహా, కవర్ చేయాలా? అప్పుడు ఇంటర్ఫేస్ను కలిగి ఉండి ప్రవాహాలను ముగించే అడాప్టర్ కావాలి. దాని రూటింగ్, DNS మరియు లూప్ నివారణ మినహాయింపులను కూడా మీరు తీసుకోగలరా? లేకపోతే, సాధారణ గేట్వే నడపడానికి తక్కువ ఖర్చవుతుంది.
ఒక భేదాన్ని నేరుగా ఉంచుకోవడం విలువైనది. VPN క్లయింట్ యొక్క సొంత socks-proxy ఎంపిక బాహ్య టన్నెల్ కనెక్షన్ తన సర్వర్ను ఎలా చేరుతుందో వివరిస్తుంది, లోపలి క్లయింట్ ప్రవాహాల మార్పిడి గురించి ఏమీ చెప్పదు. రెండూ ఒకే టికెట్లో నిరంతరం కలిపి తారుమారు చేయబడతాయి. మార్గాన్ని తాకే ముందు మీకు ఏ సంబంధం కావాలో నిర్ణయించుకోండి.