मैं पोर्ट 443 पर sslh को https और openvpn पर फॉरवर्ड करना चाहता हूं जो दो डॉकटर कंटेनरों में रहता है। चूंकि मैं लंबे समय में https पर आईपी आधारित एसीएल प्रदान करना चाहता हूं, इसलिए मैं चाहता हूं कि वेबसर्वर (उर्फ sslh के "पारदर्शी" मोड) को सही क्लाइंट आईपी प्रदान करें।
जैसा कि मैं प्रलेखन और इस उत्तर को समझता हूं , sslh आंतरिक नेटवर्क पर बाहर के अनुरोधों को नकली करेगा और क्लाइंट के साथ संचार के लिए पोर्ट का अनुवाद करने के लिए सर्वर को वापस जवाब देने की आवश्यकता होगी।
मेरी समस्या iptables सेटअप है। Sslh को चलाने के लिए दो संभावनाएँ हैं: होस्ट पर या docker नेटवर्क के अंदर एक कंटेनर में।
मैं "डिफ़ॉल्ट" सेटअप प्राप्त करने में कामयाब रहा जैसा कि काम करने के लिए प्रलेखन में वर्णित है, यानी: होस्ट पर sslh पारदर्शी रूप से होस्ट पर एक सेवा के लिए आगे बढ़ सकता है।
हालाँकि, मैं कंटेनरीकृत सर्वर के साथ काम करने के लिए होस्ट या कंटेनर में पारदर्शी sslh नहीं प्राप्त कर सकता। अधिक विशेष रूप से, मेरे iptables यातायात को चिह्नित करने के लिए नियम है जो sslh में रूट किया जाना चाहिए कभी भी पैकेट से मेल नहीं खाता।
एक https वेबसर्वर के लिए मैं होगा:
iptables -t mangle -A OUTPUT -p tcp --sport 443 --source 172.25.0.2 --jump SSLH
इस चार्ट का उपयोग करके मैंने यह समझने की कोशिश की कि कंटेनर, डॉक ब्रिज, डॉकटर NAT और iptables के आभासी ईथरनेट उपकरण एक साथ कैसे काम करते हैं, लेकिन मैं इसके चारों ओर अपना सिर नहीं लपेट सकता।
बेहतर चर्चा करने के लिए आइए हम निम्नलिखित मानें:
- मेजबान (eth0): 1.1.1.1
- docker-Bridge (br0): 172.25.0.0/16
- वेबसर्वर (वेथ 1): 172.25.0.2:443 (यदि आवश्यक हो तो 8443 के रूप में मेजबान पर उजागर)
- Openvpn (veth2): 172.25.0.3:1194 (यदि आवश्यक हो तो होस्ट करने के लिए अग्रेषित)
- कंटेनर में sslh (मेजबान sslh के साथ परस्पर अनन्य): 172.25.0.4:443 (मेजबान के लिए आगे)
- मेजबान पर sslh (कंटेनर sslh के साथ पारस्परिक रूप से अनन्य): पोर्ट 443
- ग्राहक: 8.8.8.8
यहां मेरा असफल मॉडल तब होना चाहिए जब कोई ब्राउज़र होस्ट से कनेक्ट होता है: 443 और sslh होस्ट में पारदर्शी मोड में है
- sslh 172.25.0.2:8443 को मूल क्लाइंट 8.8.8.8 के रूप में जोड़ता है
- वेबसर्वर के जवाब के लिए TCP हैंडशेक को 8.8.8.8 को veth1 के माध्यम से
- पैकेट br0 पर जाता है
- रूटिंग इसे ent0 के माध्यम से भेजने का फैसला करता है
- iptables 'mangle आउटपुट चेन इसे sslh के ट्रैफ़िक के रूप में चिह्नित करता है (यह मेरे लिए काम नहीं करता है)
- इसके बजाय पैकेट को स्थानीय लो डिवाइस पर रूट करने का संकेत देता है
- sslh इसे उठाता है, पोर्ट का अनुवाद करता है और इसे क्लाइंट को वापस भेजता है
उपर्युक्त सूची में मेरी समस्या यह है कि मैं वेबसर्वर आउटबाउंड ट्रैफ़िक के लिए फ़िल्टर मानदंड नहीं जानता: क्या मुझे डॉक आंतरिक पोर्ट 443 या मैप किए गए पोर्ट 8443 का उपयोग करना चाहिए? Docker IP 172.25.0.2 या कोई अन्य? यह नीचे उबलता है: डॉकिंग NAT से पहले या बाद में mangle output rule चलेगा?
मुझे लगा कि मैं नेट के बारे में सोचने से बचने के लिए dok नेटवर्क में sslh डाल सकता हूं, लेकिन मैं अभी भी मैच के लिए iptables नियमों को प्राप्त नहीं कर सकता।
मैं आगे बढ़ने के नुकसान पर हूं।