Haproxy'de IPv4 ve IPv6 için tüm arabirimlere bağlanma


13

Ben tüm arabirimler (yani, ve ) bir yanı sıra sokete bağlamak için haproxy yapılandırmak istiyorum .tcptcp60.0.0.0:80:::80

Bu hedefe aşağıdaki ayarlarla erişebildim:

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

Bundan daha kısa bir yol var mı?

Ben farklı davranmasını beklerken , v4v6anahtar kelime sadece v4 soketine haproxy bağlama yapar .


3
Ne olmuş bind :::80 v4v6?
Michael - sqlbot

Aslında, bu işe yarıyor. Teşekkürler! Size kredi verebilmem için lütfen cevap olarak dosyalayabilir misiniz?
StephenKing

Yanıtlar:


25

IPv6 ve IPv4 için aynı bağlantı noktasını dinlemek için şunu kullanın:

bind :::80 v4v6

Kuşkusuz, bu doğru gibi görünen sezgisel bir tahmindi ... ama sadece cevap olarak "şanslı" bir tahmin göndermek yerine, işe yarıyor olsa bile, bunu haklı çıkarmalıyım gibi görünüyor.

v4v6 anahtar sözcüğü, haproxy'yi yalnızca bir v4 soketine bağlar.

İlk sezgim, bu soketin sadece IPv4'te dinlemesine neden v4v6olan değil :80(ya da daha kesin olarak hiçbir IP adresi kullanılmaması, sadece bir port numarası) kullanılması değil.

Bu, dokümanlar için aşağıdakiler için onaylanmış gibi görünüyor bind:

addressisteğe bağlıdır ve bir ana bilgisayar adı, IPv4 adresi, IPv6 adresi veya olabilir '*'. Ön ucun dinleyeceği adresi belirler. Ayarlanmazsa, sistemin tüm IPv4 adresleri dinlenir. Aynısı '*'veya sistemin " 0.0.0.0" özel adresi için de geçerlidir . IPv6 eşdeğeri '::' dir.

http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2- bağlama (vurgu eklendi)

Dolayısıyla, aşağıdaki üç formun hepsi eşdeğerdir ve hepsi HAProxy tarafından IPv4 olarak yorumlanır:

bind :80
bind *:80
bind 0.0.0.0:80

Daha sonra, IPv6'da dinlemek için yukarıdaki bağlama ifadelerinden birini genişletmek için kullanılabilir olabileceğini v4v6belirtmek için dokümanlarda ayrı ayrı okunabilecek bir cümle var v4v6...

v4v6

Varsayılan adresi kullandığında bir soketi hem IPv4 hem de IPv6'ya bağlamak için kullanılır.

... hmmm, ama bunun aslında "v6 varsayılan adresi" ( ::) anlamına geldiğinden şüpheleniyorum ...

Bunu yapmak IPv6'ya yalnızca varsayılan olarak bağlanan sistemlerde bazen gereklidir.

... ve şimdi daha da şüpheliyim ...

IPv6 olmayan soketler üzerinde hiçbir etkisi yoktur ve v6onlyseçenek tarafından geçersiz kılınır .

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

Bu nedenle, v4v6yalnızca bindIPv6 varsayılan dinleme adresini belirten yönergeleri değiştirir ::(3. :, adres ile bağlantı noktası arasındaki ayırıcıdır) ve diğerleri için yoksayılır.


5

Kabul edilen cevap benim için çalışmıyor, en azından OpenBSD'deki haproksi-1.6.11p0 ile. Ayrıca TL; DR. Sadece yap:

bind 0.0.0.0:80
bind :::80

ve işe yarayacak:

# netstat -an|grep "*.80"
tcp          0      0  *.80                   *.*                    LISTEN
tcp6         0      0  *.80                   *.*                    LISTEN
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.