綁定到 haproxy 中 IPv4 和 IPv6 的所有介面
我想將haproxy配置為綁定到所有介面(即和)上的 a
tcp
和套接字。tcp6``0.0.0.0:80``:::80
我能夠通過以下設置達到這個目標:
listen web bind :80 v4v6 bind :::80 v6only
還有比這更短的方法嗎?
雖然我希望它表現不同,但該
v4v6
關鍵字使haproxy 僅綁定到 v4 套接字。
要在同一埠上偵聽 IPv6 和 IPv4,請使用以下命令:
bind :::80 v4v6
誠然,這是一個直覺的猜測,似乎是正確的……但不是僅僅發布一個“幸運”的猜測作為答案,即使它有效,似乎我應該證明它是合理的。
v4v6 關鍵字使 haproxy 僅綁定到 v4 套接字。
我的第一個直覺是,導致此套接字僅在 IPv4 上偵聽的不是
v4v6
使用:80
(或者更準確地說,根本不使用 IP 地址,只是使用埠號)。這似乎在以下文件中得到證實
bind
:
address
是可選的,可以是主機名、IPv4 地址、IPv6 地址或'*'
. 它指定前端將偵聽的地址。**如果未設置,系統的所有 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 的系統上有時需要這樣做。
……現在,我更加懷疑了……
它對非 IPv6 套接字沒有影響,並被該
v6only
選項覆蓋。http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
因此,似乎
v4v6
只修改bind
了指定 IPv6 預設偵聽地址的指令,即::
(第三個:
是地址和埠之間的分隔符),而其他人則忽略。