VPN கிளையண்டின் சேவையை அடைவது: தலைகீழ் சுரங்கம் அல்லது DNAT
போர்ட் பார்வர்டிங் இல்லாமல் OpenVPN கிளையண்டின் சேவையை அடைவது: தலைகீழ் SSH சுரங்கத்தை சர்வர் பக்க DNAT மற்றும் தேர்வை தீர்மானிக்கும் மூன்று நிபந்தனைகளுடன் ஒப்பிடுங்கள்.
கேரியர் NAT பின்னால் உள்ள மடிக்கணினியும் ஒரு சக ஊழியருக்கு சேவை செய்ய முடியும், VPN சர்வர் சந்திப்பு இடமாக இருந்தால். அங்கு செல்ல இரண்டு வழிகள் உள்ளன: கிளையண்ட் வெளியே இணைத்து சர்வரை ஒரு கேட்கும் போர்ட்டை வைத்திருக்கச் சொல்கிறது, அல்லது சர்வர் ஒரு போர்ட்டை வெளியிட்டு அதை சுரங்கத்திற்குள் மொழிபெயர்க்கிறது. இரண்டும் ஒரே அணுகல் சிக்கலைத் தீர்க்கின்றன, தோல்வி, மேற்பார்வை மற்றும் பதிவில் வெவ்வேறாக நடந்து கொள்கின்றன. உங்கள் அமைப்பிற்கு எது பொருந்தும் என்பதை மூன்று நிபந்தனைகள் தீர்மானிக்கின்றன.
இரண்டு வடிவங்கள், ஒரு சந்திப்பு இடம்
முதல் வடிவத்தில் கிளையண்ட் வெளிப்புறமாக ஒரு SSH அமர்வைத் திறந்து, தேர்ந்தெடுத்த போர்ட்டில் கேட்கச் சொல்கிறது, ஒவ்வொரு இணைப்பையும் அந்த அமர்வின் வழியாகத் திருப்பி அனுப்புகிறது. சர்வரில் எதுவும் பார்வர்ட் செய்யப்படுவதில்லை, பாக்கெட் மொழிபெயர்ப்பும் நடப்பதில்லை, எனவே ஒரே தேவைகள் SSH கணக்கு, அனுமதிக்கப்பட்ட பார்வர்டிங் மற்றும் போர்ட்டிற்கான ஃபயர்வால் விதி. சேவை கிளையண்டில் லூப்பேக்குடன் பிணைந்திருக்கும், இது பொதுவாக நீங்கள் விரும்புவதே.
ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]
இரண்டாவது வடிவத்தில் பொது போர்ட்டை சர்வர் வைத்திருக்கிறது மற்றும் ஒவ்வொரு இணைப்பையும் கிளையண்டின் சுரங்க முகவரியை நோக்கி மீண்டும் எழுதுகிறது. அதற்கு IP பார்வர்டிங் இயக்கப்பட்டிருக்க வேண்டும், உள்ளே வரும்போது இலக்கு மொழிபெயர்ப்பு மற்றும் வெளியே போகும்போது மூல மொழிபெயர்ப்பு தேவை, SSH அமர்வு இல்லாதபோதும் இது தொடர்ந்து செயல்படும். போர்ட் அமர்வுக்கல்ல, சர்வருக்குச் சொந்தம், அந்தப் பண்பே பெரும்பாலான உண்மையான நிகழ்வுகளைத் தீர்மானிக்கிறது.
இரு வடிவங்களும் இயல்பாக அதிக பாதுகாப்பானவை அல்ல. இரண்டும் ஒரு சேவை போர்ட்டை சர்வரின் பொது முகவரியை அடையக்கூடிய அனைவருக்கும் வெளிப்படுத்துகின்றன, இரண்டும் இன்னும் சேவையின் சொந்த அங்கீகாரத்தையே சார்ந்துள்ளன.
நிபந்தனை ஒன்று: போர்ட் அமர்வை விட நீண்ட காலம் வாழ வேண்டுமா
தலைகீழ் பார்வர்டிங் அதை உருவாக்கிய SSH அமர்வு எவ்வளவு காலம் இருக்கிறதோ அவ்வளவு காலமே இருக்கும். இணைப்பு விழுந்தால் கேட்பவர் மறைந்துவிடுவார், சக ஊழியர் மெதுவான வழிக்குப் பதிலாக நிராகரிக்கப்பட்ட இணைப்பைப் பார்ப்பார். systemd அலகு மற்றும் மறுதொடக்கக் கொள்கையுடன் கட்டளையை மேற்பார்வையிடுவது இதைச் சரிசெய்கிறது, ExitOnForwardFailure=yes தோல்வியடைந்த பிணைப்பை உடனே தெரியச் செய்கிறது, பார்வர்டிங் இல்லாமல் இயங்கும் அமர்வை விட்டுவிடுவதற்குப் பதிலாக.
மொழிபெயர்க்கப்பட்ட போர்ட் விதிகள் சேமிக்கப்பட்டால் மறுதொடக்கங்களைத் தாங்கும், ஆனால் கிளையண்ட் அதே சுரங்க முகவரியை வைத்திருப்பதைச் சார்ந்துள்ளது. மீண்டும் இணைந்தபின் மடிக்கணினிக்கு வேறு முகவரி தரும் மாறும் குளம் விதியை அமைதியாக எதற்கும் வழிசெலுத்தாது. முதலில் சுரங்க முகவரியை ஒதுக்குங்கள், பிறகு விதியை எழுதுங்கள், இரண்டையும் ஒரே மாற்றமாகக் கருதுங்கள்.
சேவை இரவு மூன்று மணிக்கு யாரும் பார்க்காமல் பதிலளிக்க வேண்டும் என்றால், சர்வர் வெளியிட்ட போர்ட்டைக் கொண்ட வடிவத்தில் நகரும் பகுதிகள் குறைவு, ஏனெனில் இயக்கத்தில் இருக்க வேண்டிய ஒரே செயல்முறை சுரங்கமே.
நிபந்தனை இரண்டு: ஃபயர்வால் மற்றும் பதிவுகள் யாருடையது
தலைகீழ் வடிவம் எல்லா கொள்கையையும் இரண்டு இடங்களில் வைத்திருக்கிறது. sshd AllowTcpForwarding வழியாக தொலை பார்வர்டிங் அனுமதிக்கப்படுகிறதா என்பதை தீர்மானிக்கிறது, GatewayPorts கேட்பவர் லூப்பேக்குடன் அல்லது ஒவ்வொரு முகவரியுடன் பிணைகிறதா என்பதை தீர்மானிக்கிறது. இயல்புநிலை no உடன் சர்வருக்கு வெளியே உள்ள சக ஊழியர் பார்வர்டிங் வெற்றியடைந்தாலும் போர்ட்டை அடைய முடியாது, அது உடைந்த சுரங்கம்போல் தெரிகிறது, உண்மையில் அது பிணைப்பு முகவரி.
sudo ss -ltn '( sport = :8081 )'
sudo grep -E '^(GatewayPorts|AllowTcpForwarding)' /etc/ssh/sshd_config
மொழிபெயர்க்கப்பட்ட வடிவத்திற்கு செயலில் உள்ள பார்வர்டிங் மற்றும் இரண்டு விதிகள் தேவை, இரண்டாவது விதியில்தான் பெரும்பாலான முறைகள் தவறிழைக்கின்றன. மூல மொழிபெயர்ப்பை conntrack இன் DNAT நிலைக்கு வரம்பிடுவது என்பது இலக்கு விதி உருவாக்கிய இணைப்புகள் மட்டுமே மீண்டும் எழுதப்படும் என்பதாகும், சர்வர் சுரங்கத்திற்கு அனுப்பும் ஒவ்வொரு பாக்கெட்டும் அல்ல.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8081 -j DNAT --to-destination 10.88.0.6:8080
sudo iptables -t nat -A POSTROUTING -o tun0 -m conntrack --ctstate DNAT -j SNAT --to-source 10.88.0.1
அந்த மீள்எழுத்து பண்புக்கூறலையும் அழிக்கிறது. அதன்பின் கிளையண்ட் ஒவ்வொரு அழைப்பாளரையும் சர்வரின் சுரங்க முகவரியாகப் பார்க்கும், இது ஒவ்வொரு முகவரிக்கான வேக வரம்பையும் ஒரே வாளியில் சுருக்கி யார் என்ன அனுப்பினார் என்பதை மறைக்கிறது. பண்புக்கூறல் முக்கியம் என்றால் இணைப்பை சர்வரில் முடிக்கவும் அல்லது அனுமதி முடிவை அங்கேயே வைத்து சேவை நம்பும் தலைப்பில் அடையாளத்தை அனுப்பவும். இந்த இரண்டு திருத்தங்களில் எதைத் தேர்ந்தெடுப்பது சேவை ப்ராக்ஸி தலைப்பைப் படிக்கிறதா என்பதைப் பொறுத்தது.
நிபந்தனை மூன்று: ஒரு போர்ட்டா பலவா, பெயர் யாருடையது
ஒரு போர்ட்டில் ஒரு சேவை என்பது முயற்சியில் தலைகீழ் பார்வர்டிங் வெல்லும் நிலை. ஒரு கட்டளை, ஒரு கணக்கு மற்றும் ஒரு ஃபயர்வால் விதி தேவை, சுத்தம் செய்வது என்பது அமர்வைக் கொல்வது. ஒரே பொது முகவரியில் பல சேவைகள் உங்களை சர்வர் வெளியிட்ட வடிவத்தை நோக்கித் தள்ளும், ஏனெனில் ஒவ்வொரு தலைகீழ் பார்வர்டிங்கிற்கும் அதன் சொந்த சர்வர் போர்ட் தேவை, ஒவ்வொரு சேவையுடன் தொகுப்பு வளர்கிறது.
பெயர்கள் இதை மேலும் சிக்கலாக்குகின்றன. தலைகீழ் பார்வர்டிங் SNI அடிப்படையில் வழிசெலுத்தும் TCP ப்ராக்ஸிக்குப் பின்னால் இருக்கலாம், மொழிபெயர்க்கப்பட்ட போர்ட் பொதுவாக ஒரு சேவைக்கு ஒரு போர்ட். சேவை தானே TLS ஐ முடித்து அசல் ஹோஸ்ட் பெயர் தேவைப்பட்டால், ப்ராக்ஸி அணுகுமுறை அதைப் பாதுகாக்கிறது, DNAT அணுகுமுறை சேவை அந்த போர்ட்டில் அந்தப் பெயரை ஏற்றுக்கொண்டால் மட்டுமே பாதுகாக்கிறது.
மூன்று நிபந்தனைகளில் எது வடிவத்தை தீர்மானித்தது என்பதை எழுதுங்கள். இல்லையெனில் இரண்டாவது சேவையைச் சேர்க்கும் அடுத்த நபர் குறைவான சூழலுடன் அதே ஒப்பீட்டை மீண்டும் திறப்பார்.
முடிவு செய்யுங்கள், பிறகு வெளியிலிருந்து சோதியுங்கள்
மடிக்கணினிக்கு எந்த வழியும் இல்லாத நெட்வொர்க்கிலிருந்து பாதையைச் சோதியுங்கள், கோரிக்கை இயங்கும்போது சர்வரின் கவுண்டர்களைக் கவனியுங்கள். சர்வரிலிருந்து அதன் சொந்த பொது முகவரிக்குச் சோதிப்பது இங்கு எதையும் நிரூபிக்காது, ஏனெனில் பாக்கெட் உள்ளூரில் உருவாகி உள்வரும் மொழிபெயர்ப்பு கொக்கியை ஒருபோதும் அடையாது, எனவே உண்மையான பாதை உடைந்திருந்தும் சோதனை வெற்றிபெறலாம்.
sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20
நிலையாக இருக்கும் கவுண்டர்கள் என்பது பாக்கெட் ஒருபோதும் விதியை அடையவில்லை என்பதாகும், இது வழங்குநரையோ ஹோஸ்ட் ஃபயர்வாலையோ சுட்டுகிறது. சேவை மறுக்கும்போது நகரும் கவுண்டர்கள் கிளையண்டின் சொந்த ஃபயர்வாலையோ சேவை கேட்கும் முகவரியையோ சுட்டுகின்றன. பாக்கெட்டை எடுத்துச் சென்று எதையும் திரும்பத் தராத சுரங்கம் ஒரு பாதை அல்லது தலைகீழ் பாதை சிக்கல், மேலும் இந்த மூன்று முடிவுகளில் எதையும் கிளையண்ட் அடாப்டரைத் திருத்தி பிழைத்திருத்தக் கூடாது. எதையும் மாற்றும் முன் எந்த கவுண்டர் நகர்ந்தது என்பதை எழுதுங்கள், அடுத்த சோதனைக்கு அந்த அடிப்படைக் கோடு தேவை.
வடிவம் செயல்பட்டதும் போர்ட், உரிமையாளர் மற்றும் மேற்பார்வை முறையை சுரங்க உள்ளமைவுக்கு அருகில் பதிவு செய்யுங்கள். ஒருவரின் ஷெல் வரலாற்றில் மட்டுமே உள்ள அணுகல் திருத்தம் ஒரு மறுதொடக்கத்திற்கு அப்பால் மீளும் நிகழ்வு.