VPN கிளையண்ட் இணைக்கிறது, உலாவி வேலை செய்கிறது, ஆனால் உண்மையில் உங்களுக்கு முக்கியமான ஒரே கட்டளை இன்னும் உங்கள் வீட்டு இணைப்பு வழியாகவே வெளியேறுகிறது. அல்லது எதிர்மாறாக நடக்கிறது: சுரங்கம் இயல்புநிலை வழியை எடுத்துக்கொள்கிறது, உள்ளூர் கோப்பு சேவையகம் டெஸ்க்டாப்பிலிருந்து மறைகிறது. உள் ஆர்ட்டிஃபாக்ட் கண்ணாடியை அடைய வேண்டிய பில்ட் முகவருடன் இதை நான் சந்தித்தேன், மீதமுள்ள ஹோஸ்ட் அலுவலக LAN-இல் இருந்தது, கிளையண்ட் சரியாக இரண்டு விருப்பங்களை மட்டுமே வழங்கியது, முழு போக்குவரத்து அல்லது எதுவுமில்லை. இரு திசைகளிலும் கோரிக்கை ஒன்றுதான், இந்த செயலி மட்டும், முழு கணினியும் அல்ல, பெரும்பாலான கிளையண்டுகளில் இதற்கு தேர்வுப்பெட்டி இல்லை, ஏனெனில் வழித்தட அட்டவணைக்கு ஒரு செயலி என்றால் என்ன என்று ஒருபோதும் தெரியாது.

வழித்தட அட்டவணை ஏன் உங்கள் செயலியைப் பார்க்க முடியாது

ஒரு செயல்முறை பாக்கெட்டை அனுப்பும்போது, ஸ்டாக் வழித்தட அட்டவணையில் இலக்கு முகவரியைத் தேடுகிறது. இயக்கக்கூடிய கோப்பின் பெயரோ துறைமுகமோ அந்தத் தேடலில் சேருவதில்லை. டொமைன் பெயர்களும் அதே காரணத்தால் தோல்வியடைகின்றன: சுரங்கம் போக்குவரத்தை ஒரு முகவரிக்கு எடுத்துச் செல்கிறது, ஒரு பெயர் முகவரியாகத் தீர்க்கப்படும்போது, கர்னலிடம் மீதமிருக்கும் ஒரே நெம்புகோல் வழித்தடம்தான். அதனால்தான் "இந்த தளத்திற்கு மட்டும் VPN" என்பது இறுதியில் ஒரு ப்ராக்ஸியைக் குறிக்கிறது, "இந்த செயலிக்கு மட்டும் VPN" என்பது சில வழிமுறைகளில் ஒன்றைக் குறிக்கிறது.

வழிமுறைஎது தேர்ந்தெடுக்கிறதுஎதை உள்ளடக்குகிறதுசுரங்கம் விழும்போது
சாக்கெட் பிணைப்புமூல முகவரிநீங்கள் கட்டுப்படுத்தும் கிளையண்ட்இணைப்புகள் தோல்வியடைகின்றன
UID விதி (Linux)உரிமையாளர் பயனர்ஒரு கணக்கின் ஒவ்வொரு செயல்முறையும்இணைப்புகள் தோல்வியடைகின்றன
ஃபயர்வால் சுயவிவரம் (Windows)அடாப்டர் சுயவிவரம்ஒரு செயலிமூடிய நிலையில் தோல்வியடைகிறது
பிணையப் பெயர்வெளிபெயர்வெளி உறுப்பினர்உள்ளே தொடங்கப்படும் அனைத்தும்இணைப்புகள் தோல்வியடைகின்றன
SOCKS தாவல்செயலியின் ப்ராக்ஸி அமைப்புஒரு செயலி அல்லது ஒரு உலாவி சுயவிவரம்இணைப்புகள் தோல்வியடைகின்றன

இவை எதுவும் ஒரு செயல்முறைக்கான வழி அல்ல. ஒவ்வொன்றும் முடிவை செயலியையோ, பயனரையோ அல்லது செயலியின் சொந்த கட்டமைப்பையோ பார்க்கக்கூடிய அடுக்குக்கு மாற்றுகிறது.

ஒரே இலக்கு இன்னும் ஒரு வழி, செயலி விதி அல்ல. macOS-இல் வழக்கம் என்னவென்றால் "VPN வழியாக அனைத்து போக்குவரத்தையும் அனுப்பு" என்பதை நீக்கிவிட்டு ஒரு ஹோஸ்ட் வழியைச் சேர்ப்பது: sudo route add -host internal-tuner.example -interface ppp0, பின்னர் இதனால் நீக்கப்படும் sudo route delete -host internal-tuner.example -interface ppp0. முதலில் இடைமுகப் பெயரை ifconfig இல் படியுங்கள், ஏனெனில் ppp0 ஒரு எடுத்துக்காட்டு மட்டுமே. ஹோஸ்ட் வழியில் வைல்ட்கார்டுகள் வேலை செய்யாது, எனவே பல பெயர்களுடன் பேசும் சேவைக்கு ஒவ்வொரு பெயருக்கும் ஒரு பதிவு தேவை, இந்த விதி இயந்திரத்தின் ஒவ்வொரு செயல்முறையையும் உள்ளடக்குகிறது, நீங்கள் நினைத்ததை மட்டுமல்ல.

சாக்கெட்டை சுரங்க முகவரியுடன் பிணைக்கவும்

கிளையண்டை நீங்கள் கட்டுப்படுத்தும்போது, பிணைப்பு மலிவான தேர்வாகும். சுரங்கத்தின் உள்ளூர் முகவரியுடன் பிணைக்கப்பட்ட சாக்கெட், இலக்குக்கான வழி அங்கு இருக்கும் வரை அந்த இடைமுகம் வழியாக வெளியேறுகிறது, இயந்திரத்தில் உள்ள மற்ற அனைத்தும் அதன் இயல்பான பாதையைத் தக்கவைக்கின்றன. நுட்பமான விஷயம் என்னவென்றால், பிணைப்பு மூல முகவரியைத் தேர்ந்தெடுக்கிறது, ஆனால் வழித்தட அட்டவணை இன்னும் வெளியேறும் வழியைத் தேர்ந்தெடுக்கிறது. பிணைப்பு மட்டும் வழியில்லாத போக்குவரத்தை சுரங்கத்திற்குள் நகர்த்தாது, "பிணைத்தேன், இன்னும் தவறான வழியில் போகிறது" என்ற பெரும்பாலான புகார்களுக்குப் பின்னால் உள்ள தவறு இதுதான்.

import socket
s = socket.socket()
s.bind(("10.8.0.2", 0))
s.connect(("build.internal.example", 443))

உயர் மட்டக் கருவிகள் இதே கருத்தை வெளிப்படுத்துகின்றன: curl --interface 10.8.0.2, CURLOPT_INTERFACE PHP-இல் மற்றும் source_address என்ற அளவுரு Python-இன் HTTP கிளையண்டுகளில். முகவரி சுரங்கத்திற்குச் சொந்தமாக இருக்க வேண்டும், இங்கே ஒரு தட்டச்சுப் பிழை சாதாரண இணைப்புப் பிழையாகத் தோல்வியடையும், வழித்தடப் புகாராக அல்ல. முகவரிக்குப் பதிலாக சாதனப் பெயருடன் பிணைப்பது Linux சலுகை, அது Windows அல்லது macOS-க்கு மாறாது, அதனால்தான் இடமாற்றக்கூடிய ஸ்கிரிப்டுகள் முகவரியைக் கடத்துகின்றன.

Linux: நிரல் பெயரை அல்ல, உரிமையாளரைப் பொருத்துங்கள்

கர்னல் ஒரு சாக்கெட்டின் உரிமையாளர் பயனரைப் பொருத்த முடியும், எனவே ஒரு தனி கணக்கு தேர்வியாக மாறுகிறது. சுரங்கத்தை அதன் சொந்த வழித்தட அட்டவணையில் வைத்து அந்தக் கணக்கின் போக்குவரத்தை மட்டும் அங்கு அனுப்புங்கள்:

ip rule add uidrange 1001-1001 lookup 100
ip route add default dev tun0 table 100

சுரங்கம் ஏற்கனவே இயல்புநிலை வழியாக இல்லாவிட்டால் மட்டுமே இது வேலை செய்யும். கிளையண்டை --route-nopull உடன் தொடங்குங்கள், அல்லது தள்ளப்பட்ட திருப்பிவிடலை --pull-filter ignore "redirect-gateway" மூலம் OpenVPN 2.4 மற்றும் அதற்குப் பிறகு வடிகட்டுங்கள், பின்னர் அட்டவணைப் பதிவை நீங்களே சேர்க்கவும். இல்லையெனில் இரண்டு இயல்புநிலைகளும் இருக்கும், குறைந்த முன்னுரிமை உள்ளது வெல்லும். இதன் வேண்டுமென்ற பதிப்பு இயல்புநிலை வழியை சுரங்க நுழைவாயிலுக்குத் திருப்புவது, அல்லது துண்டிப்பு ஸ்கிரிப்டிலிருந்து செய்வது: சுரங்கம் விழும்போது போக்குவரத்தை இணையத்திலிருந்து விலக்கி வைக்கிறது, ஆனால் அது ஒரு கொலை சுவிட்ச், தேர்வி அல்ல, யாராவது அதை நீக்கும் வரை நீடிக்கும்.

வலுவான பதிப்பு ஒரு பிணையப் பெயர்வெளி. அதை உருவாக்கி, கிளையண்டை உள்ளே இயக்கி, செயலியை ip netns exec மூலம் தொடங்குங்கள். பெயர்வெளிக்கு வெளியே உள்ள எதுவும் சுரங்க இடைமுகத்தைப் பார்ப்பதில்லை, எனவே செயலி தற்செயலாக ஹோஸ்ட் வழிக்குத் திரும்ப முடியாது. விலை உண்மையானது: பெயர்வெளிக்கு இயற்பியல் பிணையத்தை அடைய veth இணை மற்றும் அதன் சொந்த தீர்வி கோப்பு தேவை, ஏனெனில் ஏற்று பெயர்வெளி ஹோஸ்ட்டின் தீர்வு அமைப்புகளைப் பகிர்ந்து கொள்ளாது.

இரண்டு தோல்வி முறைகள் பெரும்பாலான கசிவுகளை விளக்குகின்றன. பெயர் தீர்வு இன்னும் ஹோஸ்ட்டின் தீர்வியில் நடக்கிறது, எனவே TCP இணைப்பு உள்ளே சென்றாலும் வினவல் சுரங்கத்திற்கு வெளியே போகிறது. IPv6-க்கு அதன் சொந்த ip -6 rule தேவை, ஏனெனில் v4 விதி அதை உள்ளடக்காது.

Windows மற்றும் macOS: ஃபயர்வாலை வரம்பிடுங்கள் அல்லது ப்ராக்ஸியை ஒப்படையுங்கள்

Windows-க்கும் ஒரு செயலிக்கான வழித் தேர்வி இல்லை, ஆனால் அதன் ஃபயர்வால் விதிகளை ஒரு சுயவிவரத்திற்கு வரம்பிடலாம், VPN அடாப்டரை பொது என்று வகைப்படுத்தலாம், வீட்டு LAN தனிப்பட்டதாகவே இருக்கும். தனிப்பட்ட மற்றும் டொமைன் சுயவிவரங்களில் செயலிக்கு வெளிச்செல்லும் தடை விதிகளை உருவாக்கி, பொதுவைத் திறந்து விடுங்கள், செயலி சுரங்கம் வழியாக மட்டுமே பிணையத்தை அடைய முடியும். முதலில் இணைப்பின் பிணைய வகையை அமைத்து, பின்னர் ஃபயர்வாலின் கண்காணிப்பு பலகத்தில் விதி பொருந்தியதை உறுதிப்படுத்துங்கள். இது ஒரு தடை, வழி அல்ல: சுரங்கம் விழும்போது மூடிய நிலையில் தோல்வியடைகிறது, ஃபயர்வாலைப் புறக்கணிக்கும் செயலியைத் தடுக்க முடியாது.

macOS அதே தர்க்கத்தை வேறு கருவிகளுடன் பின்பற்றுகிறது. SSH வழியாக அடையக்கூடிய SOCKS கேட்பான் மிகக் குறைந்த ஊடுருவல் விருப்பம், ஏனெனில் ssh -D 1080 user@host ஒரு உள்ளூர் துறைமுகத்தை உருவாக்குகிறது, அதைப் பயன்படுத்த அமைக்கப்பட்ட செயலிகள் மட்டுமே அந்தப் பாதையை எடுக்கின்றன. ஒரு pf விதி ஒரு செயலியை பயனர் அல்லது குழு வாரியாகத் தடுக்க முடியும், ஆனால் அந்தச் செயலிக்கு மட்டும் சுரங்கத்தைத் தேர்ந்தெடுக்க முடியாது. Tunnelblick டொமைன் வாரியாக வடிகட்டவே முடியாது, ஏனெனில் வழிகள் முகவரிகளுடன் வேலை செய்கின்றன; OpenConnect பயனர்கள் vpn-slice ஐ நாடுகிறார்கள், சேவையகம் மிக அகலமான முன்னொட்டுப் பட்டியலைத் தள்ளும்போது.

இரண்டு தீர்வுகள் தளக் கருவிகள் தவறவிடுவதை ஈடுசெய்கின்றன. டொமைன் வாரியாக ப்ராக்ஸியை மாற்றும் உலாவி நீட்டிப்புகள் "இந்த தளம் மட்டும்" என்பதற்கான நடைமுறை பதில், ஏனெனில் அவை பெயர்கள் இன்னும் இருக்கும் செயலி அடுக்கில் செயல்படுகின்றன; ஒரு உலாவியை மட்டுமே உள்ளடக்குகின்றன, வேறு எதையும் இல்லை. முரட்டுத்தனமான வழி விற்பனையாளர் கிளையண்டை ஒரு மெய்நிகர் இயந்திரத்தில் இயக்குவது, விருந்தினர் வழி மாற்றத்தை வைத்திருக்கும், ஹோஸ்ட் அதன் பாதையைத் தக்கவைக்கும், இரண்டு பிணைய ஸ்டாக்குகளைப் பராமரிக்கும் விலையில்.

பிணைப்பு விருப்பமில்லாத கருவிகளுக்கு SOCKS தாவல்

பெரும்பாலான செயலிகளை HTTP அல்லது SOCKS ப்ராக்ஸிக்கு திருப்ப முடியும், இடைமுகங்களைப் பற்றி எதுவும் தெரியாவிட்டாலும். SSH கிளையண்ட் சேவையகப் பக்கத்தில் எந்த மாற்றமும் இல்லாமல் ஒன்றை வழங்குகிறது:

ssh -N -D 127.0.0.1:9999 [email protected]

அந்தத் துறைமுகத்தைப் பயன்படுத்த அமைக்கப்பட்ட அனைத்தும் கோட்டையில் வெளியேறும், மீதமுள்ள டெஸ்க்டாப் அதன் இயல்பான இணைப்பைத் தக்கவைக்கும். சுரங்க முகவரியுடன் பிணைக்கப்பட்ட உள்ளூர் 3proxy நிகழ்வு SSH இல்லாமல் ஒரு துறைமுகத்திற்கு இதையே செய்கிறது, stunnel TLS-ஆல் சுற்றப்பட்ட ஒரு துறைமுகத்தை உள்ளடக்குகிறது. வரம்புகள் நடைமுறையானவை: ப்ராக்ஸி அதைப் பயன்படுத்தத் தெரிந்த நெறிமுறைகளை மட்டுமே சுமக்கிறது, UDP-க்கு SOCKS5 UDP இணைப்பு தேவை, பல கிளையண்டுகளின் "SOCKS5" அமைப்பு அதை இயக்குவதில்லை, DNS ப்ராக்ஸியால் தீர்க்கப்பட வேண்டும் (socks5h curl-இல்) இல்லையெனில் பெயர் உள்ளூர் தீர்விக்குக் கசியும்.

வேறு இயந்திரத்திற்குத் தேவைப்படாவிட்டால் கேட்பானை லூப்பாக்கில் வைத்திருங்கள்.

பாதையை நிலைச் செய்தியால் அல்ல, பிடிப்பால் சரிபார்க்கவும்

செயலியின் நிலைச் சாளரங்கள் அமைப்பை விவரிக்கின்றன, பாக்கெட்டை அல்ல. இரு இடைமுகங்களிலும் போக்குவரத்தைப் பிடித்து ஒப்பிடுங்கள்:

tcpdump -i any -n port 443
ss -tnp | grep 443

இணைப்பு இயற்பியல் இடைமுகத்தில் தோன்றி, சுரங்கத்தில் பொருந்தும் பதிவு இல்லாவிட்டால், கிளையண்ட் எதைத் தெரிவித்தாலும் தேர்வி நடைமுறையில் இல்லை. IPv6 மற்றும் தீர்வியைத் தனித்தனியாகச் சரிபார்த்து, உதவி செயல்முறை அல்லது மரபுவழி அமைப்பு ப்ராக்ஸி போன்ற இரண்டாவது பாதையையும் தேடுங்கள்.

பின்னர் தேவைக்குப் பொருந்தும் எல்லையைத் தேர்ந்தெடுக்கவும்: ஒரு தளத்திற்கு ஒரு ப்ராக்ஸி போதும், ஒரு கணக்கிற்கு ஒரு UID விதி போதும், இணைப்பு மூடிய நிலையில் தோல்வியடைய வேண்டியிருக்கும்போது ஒரு ஃபயர்வால் சுயவிவரம் போதும், பெயர்வெளி மட்டுமே சுரங்கத்தை அதற்கு வெளியே உள்ள அனைத்திலிருந்தும் மறைக்கும் ஒரே விருப்பம்.

தொடர்புடைய கட்டுரைகள்