StephenKing Asked: 2016-01-10 10:32:09 +0800 CST2016-01-10 10:32:09 +0800 CST 2016-01-10 10:32:09 +0800 CST 绑定到 haproxy 中 IPv4 和 IPv6 的所有接口 772 我想将haproxy配置为绑定到所有接口(即和)上的 atcp和套接字。tcp60.0.0.0:80:::80 我能够通过以下设置达到这个目标: listen web bind :80 v4v6 bind :::80 v6only 还有比这更短的方法吗? 虽然我希望它表现不同,但该v4v6关键字使haproxy 仅绑定到 v4 套接字。 haproxy 4 个回答 Voted Best Answer Michael - sqlbot 2016-01-11T05:08:52+08:002016-01-11T05:08:52+08:00 要在同一端口上侦听 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 默认侦听地址的指令,即::(第三个:是地址和端口之间的分隔符),而其他人则忽略。 foobar 2017-09-28T20:37:07+08:002017-09-28T20:37:07+08:00 接受的答案对我不起作用,至少在 OpenBSD 上使用 haproxy-1.6.11p0。此外,TL; DR。做就是了: bind 0.0.0.0:80 bind :::80 它会起作用: # netstat -an|grep "*.80" tcp 0 0 *.80 *.* LISTEN tcp6 0 0 *.80 *.* LISTEN Private_Citizen 2021-05-20T08:41:04+08:002021-05-20T08:41:04+08:00 我知道我迟到了。我不允许发表评论,所以我不得不添加这个答案。 如果您不喜欢三冒号 ::: 的方式,我只是想补充一下 bind :::80 您始终可以将 IPv6 地址括在括号中。 bind [::]:80 cherouvim 2022-05-31T02:03:47+08:002022-05-31T02:03:47+08:00 我这样配置它: bind *:80,[::]:80 v6only bind *:443,[::]:443 v6only ssl crt ...
要在同一端口上侦听 IPv6 和 IPv4,请使用以下命令:
诚然,这是一个直观的猜测,似乎是正确的......但不是仅仅发布一个“幸运”的猜测作为答案,即使它有效,似乎我应该证明它是合理的。
我的第一个直觉是,导致此套接字仅在 IPv4 上侦听的不是
v4v6
使用:80
(或者更准确地说,根本不使用 IP 地址,只是使用端口号)。这似乎在以下文档中得到证实
bind
:所以下面三种形式都是等价的,都被HAProxy解释为IPv4:
接下来,文档中有一句话
v4v6
可以单独阅读,以表明v4v6
可能可用于扩展上述绑定语句之一以侦听 IPv6......嗯,但我怀疑这实际上意味着“v6 默认地址”(
::
)...……现在,我更加怀疑了……
因此,似乎
v4v6
只修改bind
了指定 IPv6 默认侦听地址的指令,即::
(第三个:
是地址和端口之间的分隔符),而其他人则忽略。接受的答案对我不起作用,至少在 OpenBSD 上使用 haproxy-1.6.11p0。此外,TL; DR。做就是了:
它会起作用:
我知道我迟到了。我不允许发表评论,所以我不得不添加这个答案。
如果您不喜欢三冒号 ::: 的方式,我只是想补充一下
您始终可以将 IPv6 地址括在括号中。
我这样配置它: