உங்கள் சேவை இயந்திரத்தில் இயங்குகிறது, சுரங்கப்பாதை மேலே உள்ளது, இருந்தும் உங்கள் மேசையின் உலாவி இன்னும் பதிலுக்காகக் காத்திருக்கிறது. வழக்கமான அர்த்தத்தில் எதுவும் உடைந்துவிடவில்லை: செயலி ஒரு வலைப்பின்னல் பெயர்வெளிக்குள் கேட்கிறது, அந்த அடுக்கு 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-ஐத் தொடங்குங்கள், ஏனெனில் இடைமுகத்தை நகர்த்துவது அதை நிறுத்தும், பிறகு வெளியிலிருந்து சரிசெய்ய முடியாத வழித்தடங்களை அழிக்கக்கூடும். மீட்புக் கட்டளைகளை சிறைக்குள் அல்ல, கன்சோலில் வையுங்கள்.

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