모든 인터페이스 ( 및 및 )의 소켓 뿐만 아니라 소켓에 바인딩 하도록 haproxy 를 구성하고 싶습니다 .tcp
tcp6
0.0.0.0:80
:::80
다음 설정으로이 목표에 도달 할 수있었습니다.
listen web
bind :80 v4v6
bind :::80 v6only
이보다 더 짧은 방법이 있습니까?
나는 다르게 행동하기를 기대하지만 v4v6
키워드는 haproxy 를 v4 소켓에만 바인딩합니다.
모든 인터페이스 ( 및 및 )의 소켓 뿐만 아니라 소켓에 바인딩 하도록 haproxy 를 구성하고 싶습니다 .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
다음으로, 문서 에서 IPv6을 수신하기 위해 위의 바인드 명령문 중 하나를 확장하는 데 사용할 수 있음 v4v6
을 나타 내기 위해 단독으로 읽을 수있는 한 문장 v4v6
이 있습니다 ...
v4v6
기본 주소를 사용할 때 소켓을 IPv4 및 IPv6 모두에 바인딩하는 데 사용됩니다.
... 음, 그러나 이것이 실제로 "v6 기본 주소"( ::
)를 의미하는 것 같습니다 .
기본적으로 IPv6에만 바인드 된 시스템에서는 그렇게하는 것이 때때로 필요합니다.
... 그리고 지금, 나는 그것을 훨씬 더 의심합니다 ...
비 IPv6 소켓에는 영향을 미치지 않으며
v6only
옵션으로 대체됩니다 .http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
따라서 IPv6 기본 청취 주소를 지정하는 지시문 v4v6
만 수정 하는 것으로 보입니다 (세 번째 는 주소와 포트를 구분하는 구분 자임).bind
::
:
bind :::80 v4v6
?