तुमची सेवा मशीनवर चालू आहे, टनल वर आहे, आणि तरीही तुमच्या डेस्कवरील ब्राउझर अजूनही उत्तराची वाट पाहत आहे। नेहमीच्या अर्थाने काहीही तुटलेले नाही: ॲप्लिकेशन नेटवर्क नेमस्पेसच्या आत ऐकत आहे, आणि तो स्टॅक 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 सुरू करा, कारण इंटरफेस हलवल्याने तो बंद होतो आणि नंतर बाहेरून दुरुस्त करता येणार नाहीत असे रूट पुसले जाऊ शकतात। पुनर्प्राप्ती आदेश तुरुंगात नाही, कन्सोलवर ठेवा।

संबंधित लेख