IPOS6 के साथ विद्रूप और TPROXY प्राप्त करना CentOS 7 पर काम कर रहा है


18

मुझे परेशानी हो रही है कि TPOSXY SquOS और IPv6 के साथ CentOS 7 सर्वर पर काम कर रहा है। मैं पहले NAT के साथ एक सामान्य अवरोधन सेटअप का उपयोग कर रहा था, लेकिन यह केवल IPv4 तक ही सीमित था। मैं अब TPvXY के साथ IPv6 को शामिल करने के लिए सेटअप का विस्तार कर रहा हूं।

मैं सब कुछ कॉन्फ़िगर करने के लिए इस विषय पर आधिकारिक विद्रूप विकि लेख का उपयोग कर रहा हूँ:

http://wiki.squid-cache.org/Features/Tproxy4

इस प्रकार अभी तक TPROXY config IPv4 के लिए बिना किसी समस्या के काम कर रहा है। IPv6 के साथ हालांकि कनेक्शन समय पर निकल रहे हैं और ठीक से काम नहीं कर रहे हैं। मैं बेहतर समझ के लिए सेटअप को तोड़ दूंगा।

ध्यान दें कि सभी फ़ायरवॉल और रूटिंग नियम IPv4 के लिए बिल्कुल समान हैं, केवल अंतर inet6और ip6tablesनीचे के उदाहरणों में IPv6 आधारित नियमों को कॉन्फ़िगर करने के लिए है।

  • OS और कर्नेल: CentOS 7 (3.10.0-229.14.1.el7.x86_64)
  • सभी पैकेज yum के अनुसार अद्यतित हैं
  • विद्रूप संस्करण: ३.३.id (इसके अलावा ३.५.९ की कोशिश की)
  • फ़ायरवॉल: iptables / ip6tables 1.4.21
  • libcap-2.22-8.el7.x86_64

IPv6 कनेक्टिविटी वर्तमान में तूफान इलेक्ट्रिक के माध्यम से एक 6in4 सुरंग के माध्यम से है, यह डीडी-डब्ल्यूआरटी राउटर पर कॉन्फ़िगर किया गया है और फिर क्लाइंट के माध्यम से सौंपे गए उपसर्ग को सौंपा गया है radvd। स्क्वीड बॉक्स में कई स्थिर IPv6 पते कॉन्फ़िगर किए गए हैं।

स्क्वीड बॉक्स मुख्य लैन के भीतर बैठता है जो यह सेवा कर रहा है। पोर्ट 80 पर इंटरसेप्टेड (मुख्य रूप से वायरलेस क्लाइंट) ट्रैफ़िक वाले ग्राहकों को निम्नलिखित फ़ायरवॉल और रूटिंग नियमों के साथ मेरे DD-WRT राउटर के माध्यम से स्क्वीड बॉक्स में धकेला जा रहा है, पॉलिसी रूटिंग विकि लेख और DD-WRI विकी से अनुकूलित

यह स्क्वीड बॉक्स में ट्रैफ़िक पास करने के संदर्भ में ठीक काम करता प्रतीत होता है। एक अतिरिक्त नियम जो मुझे डीडी-WRT राउटर पर जोड़ना था, उपरोक्त के अलावा स्क्वीड बॉक्स पर कॉन्फ़िगर किए गए आउटगोइंग IPv4 और IPv6 पतों के लिए एक अपवाद नियम था, अन्यथा मुझे एक पागल लूप मुद्दा मिलता है और सभी ग्राहकों के लिए ट्रैफ़िक टूट जाता है। मुख्य LAN जो स्क्वीड का उपयोग करता है 3128

ip6tables -t mangle -I PREROUTING -p tcp --dport 80 -s "$OUTGOING_PROXY_IPV6" -j ACCEPT

स्क्वीड बॉक्स पर फिर मैं निम्नलिखित रूलिंग नियमों और DIVERT श्रृंखला का उपयोग कर यातायात को संभालने के लिए कर रहा हूँ। परीक्षण के दौरान पहले से मौजूद श्रृंखला के साथ किसी भी त्रुटि को रोकने के लिए मुझे अतिरिक्त नियम जोड़ने की आवश्यकता थी। मेरा फ़ायरवॉल है CSF, मैंने निम्नलिखित को इसमें जोड़ा हैcsfpre.sh

ip -f inet6 route flush table 100
ip -f inet6 rule del fwmark 1 lookup 100

ip -f inet6 rule add fwmark 1 lookup 100
ip -f inet6 route add local default dev eno1 table 100

ip6tables -t mangle -F
ip6tables -t mangle -X
ip6tables -t mangle -N DIVERT

ip6tables -t mangle -A DIVERT -j MARK --set-mark 1
ip6tables -t mangle -A DIVERT -j ACCEPT
ip6tables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
ip6tables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129

squid.conf दो बंदरगाहों के लिए कॉन्फ़िगर किया गया है:

http_proxy 3128
http_proxy 3129 tproxy

इसके अलावा मैं Privoxy का भी उपयोग कर रहा हूं और मुझे no-tproxyअपने cache_peer लाइन में जोड़ना पड़ा , अन्यथा सभी प्रोटोकॉल दोनों प्रोटोकॉल के लिए अग्रेषित करने में असमर्थ थे।

cache_peer localhost parent 8118 7 no-tproxy no-query no-digest

मैं tcp_outgoing_addressPrivoxy के कारण किसी भी निर्देश का उपयोग नहीं कर रहा हूं, इसके बजाय मैं CentOS और बाइंड ऑर्डर के माध्यम से आउटबाउंड पते को नियंत्रित कर रहा हूं।

sysctl मान:

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eno1.rp_filter = 0

मुझे यकीन नहीं है कि rp_filterसंशोधनों की आवश्यकता है क्योंकि सेटअप IPv4 पर उनके साथ या उनके बिना काम करता है और IPv6 के लिए समान परिणाम तैयार करता है।

SELINUX

स्क्विड बॉक्स पर SELINUX सक्षम है, लेकिन TPROXY सेटअप की अनुमति देने के लिए नीतियों को कॉन्फ़िगर किया गया है, इसलिए इसका ब्लॉक नहीं किया जा रहा है (IPv4 इस तरह से काम करता है)। मैंने जांच grep squid /var/log/audit/audit.log | audit2allow -aकरवा ली है<no matches>

#============= squid_t ==============

#!!!! This avc is allowed in the current policy
allow squid_t self:capability net_admin;

#!!!! This avc is allowed in the current policy
allow squid_t self:capability2 block_suspend;

#!!!! This avc is allowed in the current policy
allow squid_t unreserved_port_t:tcp_socket name_connect;

मैंने निम्नलिखित बुलियन भी निर्धारित किए हैं:

setsebool squid_connect_any 1
setsebool squid_use_tproxy 1

टूटी हुई IPv6 कनेक्टिविटी

अंततः, TPvXY क्लाइंट (पोर्ट पर LAN क्लाइंट 3128जो WPAD / PAC फ़ाइल का पूरी तरह से IPv6 काम करते हैं) के लिए IPv6 कनेक्टिविटी पूरी तरह से टूट गई है । हालांकि यह प्रतीत होता है कि ट्रैफ़िक को किसी तरह से स्क्वीड बॉक्स में भेजा जा रहा है, TPVXY के माध्यम से IPv6 पर कोई अनुरोध दिखाई नहीं दे रहा है access.log। सभी IPv6 शाब्दिक IPv6 और DNS, टाइमआउट दोनों का अनुरोध करते हैं। मैं आंतरिक IPv6 क्लाइंट तक पहुंच सकता हूं लेकिन फिर भी, यह ट्रैफ़िक लॉग नहीं किया गया है।

मैंने test-ipv6.com का उपयोग करके कुछ परीक्षण किया और पाया कि इसने मेरे आउटगोइंग स्क्वीड IPv6 पते का पता लगाया, लेकिन IPv6 परीक्षण या तो खराब / धीमा या टाइमआउट दिखाया गया। मैंने अस्थायी रूप से हेडर के माध्यम से सक्षम किया और पाया कि स्क्वीड एचटीटीपी हेडर दिखाई दे रहा था, इसलिए ट्रैफ़िक कम से कम स्क्वीड बॉक्स पर पहुंच रहा है, लेकिन वहां एक बार ठीक से रूट नहीं किया जा रहा है।

मैं कुछ समय के लिए इसे प्राप्त करने की कोशिश कर रहा हूं और यह नहीं जान सकता कि समस्या क्या है, मैंने स्क्वीड मेलिंग सूची पर भी पूछा है, लेकिन वास्तविक मुद्दे का निदान करने या इसे हल करने में असमर्थ रहा है। मेरे परीक्षण के आधार पर, मुझे पूरा यकीन है कि इसके निम्नलिखित क्षेत्रों में से एक और स्क्वीड बॉक्स समस्या है:

  • रूटिंग
  • गुठली
  • फ़ायरवॉल

किसी भी विचार और अतिरिक्त कदम जो मैं TPROXY और IPv6 काम करने के लिए ले सकता हूं, की बहुत सराहना की जाएगी!

अतिरिक्त जानकारी

ip6tables नियम:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DIVERT     tcp      ::/0                 ::/0                 socket
TPROXY     tcp      ::/0                 ::/0                 tcp dpt:80 TPROXY redirect :::3129 mark 0x1/0x1

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain DIVERT (1 references)
target     prot opt source               destination
MARK       all      ::/0                 ::/0                 MARK set 0x1
ACCEPT     all      ::/0                 ::/0

IPv6 रूटिंग टेबल (उपसर्ग अस्पष्ट)

unreachable ::/96 dev lo  metric 1024  error -101
unreachable ::ffff:0.0.0.0/96 dev lo  metric 1024  error -101
2001:470:xxxx:xxx::5 dev eno1  metric 0
    cache  mtu 1480
2001:470:xxxx:xxx:b451:9577:fb7d:6f2d dev eno1  metric 0
    cache
2001:470:xxxx:xxx::/64 dev eno1  proto kernel  metric 256
unreachable 2002:a00::/24 dev lo  metric 1024  error -101
unreachable 2002:7f00::/24 dev lo  metric 1024  error -101
unreachable 2002:a9fe::/32 dev lo  metric 1024  error -101
unreachable 2002:ac10::/28 dev lo  metric 1024  error -101
unreachable 2002:c0a8::/32 dev lo  metric 1024  error -101
unreachable 2002:e000::/19 dev lo  metric 1024  error -101
unreachable 3ffe:ffff::/32 dev lo  metric 1024  error -101
fe80::/64 dev eno1  proto kernel  metric 256
default via 2001:470:xxxx:xxxx::1 dev eno1  metric 1

मैंने स्क्वीड (3.5) के बाद के रिलीज़ को अपडेट करने की कोशिश की है, ताकि किसी भी कीड़े / रिलीज के मुद्दों से छुटकारा पाया जा सके लेकिन समस्या बनी हुई है।
जेम्स व्हाइट

1
सिर्फ यह कहने के लिए कि मैंने एक साल पहले एक CentOS 6 बॉक्स पर काम किया है। हालाँकि, यह अचानक एक दिन काम करना बंद कर दिया (कर्नेल अपडेट के बाद मुझे लगता है) और मैंने इसे काम करने में कामयाब नहीं किया। अगर मैं IPv6 TPROXY सेटअप सक्षम करता हूं, तो यह मूल रूप से सभी पोर्ट 80 ट्रैफिक को तोड़ देता है और कुछ भी स्क्वीड तक नहीं पहुंचता है। मैंने फिलहाल इसे छोड़ दिया है। कर्नेल मैं वर्तमान में चल रहा हूँ 2.6.32 - मैंने ध्यान दिया कि wiki.squid-cache.org/Features/Tproxy4 पर , वे 2.6.37 की एक न्यूनतम कर्नेल जेल को सूचीबद्ध करते हैं, इसलिए मैं पहले से ही छोटा हूं। अगर मैं कभी इसे बाहर निकालता हूं, तो मैं अपने निष्कर्षों के साथ यहां अपडेट करूंगा।
पार्कमार्क

इसलिए मुझे आखिरकार यह काम मिल गया। मुद्दा आईपीवी 4 "इंटरसेप्ट" पोर्ट के होने के साथ था, जो स्क्वीड.कॉन्फ़ में आईपीवी 6 "ट्रॉक्सी" पोर्ट के बराबर था - यह डॉक्यूमेंटेशन में विस्तृत है, लेकिन मुझे लगा कि मैं ऐसा नहीं करने के साथ दूर हो सकता हूं, क्योंकि मुझे इन सभी को सुनना था। पोर्ट के साथ-साथ विशिष्ट पते / ढेर, इसलिए कोई विशेष कारण नहीं है कि उन्हें संघर्ष क्यों करना चाहिए? खैर, यह एक गलत अनुमान है। आगे पढ़ें ...
parkamark

मैंने "http_port 192.168.0.1:3128 इंटरसेप्ट" और "http_port [fd00 :: 2]: 3128 tproxy" को स्क्विड.कॉन्फ़ में परिभाषित किया था - यह मत करो! यह बस "http_port 3128 इंटरसेप्ट" और "http_port 3129 tproxy" होना चाहिए। आप IPv6 tproxy पोर्ट को एक विशिष्ट IPv6 पते से बाँध नहीं सकते हैं और फिर सभी फ़ायरवॉल / रूटिंग जादू से काम करने की अपेक्षा करते हैं। आप केवल बंदरगाहों को अकेले निर्दिष्ट कर सकते हैं, जिसका अर्थ है कि स्क्वीड इन बंदरगाहों पर सभी पतों / इंटरफेस को बांध देगा। मैं इन ओपन पोर्ट्स को आवश्यकतानुसार बंद करने के लिए फ़ायरवॉल नियम जोड़ूंगा।
पार्कमार्क

जवाबों:


1

मुझे लगता है कि यह पुराना है, और मेरे पास इसका पूर्ण उत्तर नहीं है, लेकिन, मैं आपके साथ बहुत कुछ कर रहा हूं, और लगभग समान लक्षण हैं।

पहला: test-ipv6.com ने हाल ही में कुछ प्रकार की त्रुटि को संभालने में सक्षम होने के लिए खुद को अपडेट किया है (यह इस साल की शुरुआत में टूट गया था)। इसे फिर से टेस्ट दें।

मेरे मामले में, इसने मुझे एक URL पर भेजा जो एक समस्या का वर्णन करता है जो मुझे लगता है: पथ MTU डिटेक्शन FAQ । वे एक URL प्रदान करते हैं जिसे आप PMTUD परीक्षण करने के लिए cURL के साथ उपयोग कर सकते हैं, और फिर आप अपने ट्रैफ़िक का उपयोग करके tpcdumpया वायरशर्क की जांच कर सकते हैं।

जब स्क्वीड पर ट्रैफिक TPROXY'd है, तो आपके होस्ट पर IPv6 Path MTU डिटेक्शन पूरी तरह से काम नहीं कर रहा है। (मैं अभी भी काम कर रहा हूं कि यह मेरे मेजबान पर काम क्यों नहीं कर रहा है, इसलिए मेरे पास कोई निश्चित समाधान नहीं है)।

एक त्वरित विवरण:

  • IPv6 में ICMP बेहद महत्वपूर्ण है। बहुत सारे लोग ICMP को ब्लॉक करना चाहते हैं, और अच्छे से ज्यादा नुकसान पहुंचाते हैं।
  • यदि आपके कनेक्शन के लिए एक पैकेट "बहुत बड़ा" है, तो पैकेट को गिरा दिया जाता है, और एक ICMP टाइप 2 ("पैकेट बहुत बड़ा") संदेश को मूल सर्वर पर भेजा जाना चाहिए, यह पैकेट आकार को कम करने और फिर से भेजने के लिए कहता है।
  • यदि ICMP संदेश सर्वर पर नहीं आता है, तो सर्वर बड़े पैकेट का आकार बदलता रहता है - जो तुरंत गिरा दिया जाता है क्योंकि यह बहुत बड़ा है।
  • इसे "ब्लैक होल" के रूप में वर्णित किया गया है क्योंकि पैकेट कभी भी अपने गंतव्य तक नहीं पहुंचते हैं।

तो आप यह सुनिश्चित करना चाहते हैं कि आपके फ़ायरवॉल नियम ICMPv6 संदेशों को स्वीकार करने के लिए सेट हैं (RFC4890 को "आवश्यक" ICMP प्रकारों की सूची के लिए देखें)।

मेरे मामले में, मैं ICMP संदेशों की अनुमति दे रहा हूं, और अभी भी समस्या है। मैं तौलिया में फेंकने के लिए बिल्कुल तैयार नहीं हूं और सिर्फ अपने नेटवर्क के एमटीयू (जो परमाणु विकल्प है) को कम करता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.