IPv4 और IPv6 के लिए सभी इंटरफेस को haproxy में बाँधें


13

मैं सभी इंटरफेस (यानी, और ) पर एक के रूप में अच्छी तरह से सॉकेट के लिए बाध्य करने के लिए hproxy कॉन्फ़िगर करना चाहते हैं ।tcptcp60.0.0.0:80:::80

मैं निम्नलिखित सेटिंग्स के साथ इस लक्ष्य तक पहुँचने में सक्षम था:

listen web
  bind :80 v4v6
  bind :::80 v6only

क्या इससे छोटा कोई रास्ता है?

जब मैं इसे अलग व्यवहार करने की उम्मीद करता हूं, तो v4v6कीवर्ड haproxy को केवल v4 सॉकेट से बांधता है।


3
किस बारे में bind :::80 v4v6?
माइकल - sqlbot 21

दरअसल, यह काम करता है। धन्यवाद! क्या आप इसे उत्तर के रूप में दर्ज कर सकते हैं ताकि मैं आपको क्रेडिट दे सकूं?
स्टीफनकिग

जवाबों:


25

IPv6 और IPv4 के लिए समान पोर्ट पर सुनने के लिए, इसका उपयोग करें:

bind :::80 v4v6

बेशक, यह एक सहज अनुमान था जो प्रतीत होता है कि सही है ... लेकिन उत्तर के रूप में सिर्फ "भाग्यशाली" अनुमान पोस्ट करने के बजाय, भले ही यह काम करता है, ऐसा लगता है कि मुझे इसे सही ठहराना चाहिए।

v4v6 कीवर्ड haproxy को v4 सॉकेट से ही बनाता है।

मेरा पहला अंतर्ज्ञान यह था कि यह ( v4v6बल्कि :80, अधिक सटीक रूप से, बिल्कुल नहीं आईपी पते का उपयोग, केवल एक पोर्ट नंबर) का उपयोग है जो इस सॉकेट को केवल आईपीवी 4 पर सुनने का कारण बनता है।

डॉक्स में इसकी पुष्टि की जा रही है bind:

addressवैकल्पिक है और एक होस्ट नाम, एक आईपीवी 4 पता, एक आईपीवी 6 पता या हो सकता है '*'। यह उस पते को दर्शाता है जिस पर फ्रंटएंड सुनेगा। यदि कोई परेशान है, तो सिस्टम के सभी IPv4 पते सुने जाएंगे। '*'सिस्टम के विशेष पते के लिए " 0.0.0.0" ही लागू होगा । IPv6 समकक्ष '::' है।

http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind (जोर दिया गया)

तो निम्नलिखित तीन रूप सभी समतुल्य हैं, और सभी की व्याख्या HAProxy द्वारा IPv4 के रूप में की जाती है:

bind :80
bind *:80
bind 0.0.0.0:80

अगला, डॉक्स में एक वाक्य है जिसे v4v6आइसोलेशन में पढ़ा जा सकता है ताकि यह इंगित किया v4v6जा सके कि IPv6 पर सुनने के लिए उपरोक्त बाँध बयानों में से एक का विस्तार करने के लिए उपयोग करने योग्य हो सकता है ...

v4v6

इसका उपयोग IPv4 और IPv6 दोनों के लिए एक सॉकेट को बांधने के लिए किया जाता है जब वह डिफ़ॉल्ट पते का उपयोग करता है।

... हममम, लेकिन मुझे संदेह है कि यह वास्तव में "v6 डिफ़ॉल्ट पता" ( ::) ...

ऐसा करना कभी-कभी उन प्रणालियों पर आवश्यक होता है जो केवल डिफ़ॉल्ट रूप से IPv6 से बंधते हैं।

... और अब, मुझे इस पर और भी संदेह है ...

गैर-आईपीवी 6 सॉकेट पर इसका कोई प्रभाव नहीं है, और v6onlyविकल्प द्वारा ओवरराइड किया गया है।

http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1

तो, ऐसा प्रतीत होता है कि v4v6केवल bindIPv6 डिफ़ॉल्ट श्रवण पते को निर्दिष्ट करने वाले निर्देशों को संशोधित करता है , जो ::(3 :पता और पोर्ट के बीच विभाजक है), और दूसरों के लिए अनदेखा किया जाता है।


5

स्वीकृत उत्तर मेरे लिए काम नहीं करता है, कम से कम ओपनबीएसडी पर haproxy-1.6.11p0 के साथ। इसके अलावा, टीएल, डॉ। बस करो:

bind 0.0.0.0:80
bind :::80

और यह काम करेगा:

# netstat -an|grep "*.80"
tcp          0      0  *.80                   *.*                    LISTEN
tcp6         0      0  *.80                   *.*                    LISTEN
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.