मुझे परेशानी हो रही है कि 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 विकी से अनुकूलित
- http://wiki.squid-cache.org/ConfigExamples/Intercept/IptablesPolicyRoute
http://www.dd-wrt.com/wiki/index.php/Squid_Transparent_Proxy
ip6tables -t mangle -A PREROUTING -i "$CLIENTIFACE" -s "$PROXY_IPV6" -p tcp --dport 80 -j ACCEPT ip6tables -t mangle -A PREROUTING -i "$CLIENTIFACE" -p tcp --dport 80 -j MARK --set-mark $FWMARK ip6tables -t mangle -A PREROUTING -m mark --mark $FWMARK -j ACCEPT ip6tables -t filter -A FORWARD -i "$CLIENTIFACE" -o "$CLIENTIFACE" -p tcp --dport 80 -j ACCEPT ip -f inet6 rule add fwmark $FWMARK table 2 ip -f inet6 route add default via "$PROXY_IPV6" dev "$CLIENTIFACE" table 2
यह स्क्वीड बॉक्स में ट्रैफ़िक पास करने के संदर्भ में ठीक काम करता प्रतीत होता है। एक अतिरिक्त नियम जो मुझे डीडी-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_address
Privoxy के कारण किसी भी निर्देश का उपयोग नहीं कर रहा हूं, इसके बजाय मैं 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