IPv6 로컬 호스트에 대한 컬 요청이 멈춤


9

내 Docker 컨테이너는 포트 8500에서 HTTP 포트를 노출하며 호스트 포트 8500에 매핑됩니다 . IPv6을 사용할 수 없습니다 . 이것은 여전히 ​​localhost : 8500에서 액세스 할 수 있어야한다는 의미입니다. IPv6이 선호되므로 [:: 1] : 8500에 대한 요청으로 끝납니다. 이것은 갇히고 결코 돌아 오지 않습니다.

curl로 이것을 재현하면이 명령이 중단됩니다.

curl -g -6 "http://[::1]:8500"

curl의 --verbose 옵션은 --ascii-trace도 표시하지 않습니다. 동시에 IPv4의 로컬 호스트에 대한 요청이 성공합니다.

curl http://127.0.0.1:8500

예상 HTML을 제공합니다. 루프백에서 IPv4 HTTP 서버를 실행하는 경우

python -m SimpleHTTPServer 4001

그런 다음 IPv4의 로컬 호스트에 대한 많은 HTML을 얻습니다.

curl http://127.1:4001

IPv6에 대한 올바른 연결 실패 :

curl -g -6 "http://[::1]:4001"
curl: (7) Failed to connect to ::1 port 4001: Connection refused

참고 사항 : Docker 1.7.1. IPv6은되어 있지 따라서 더 IPv6를 먼저, iptable 규칙이없는, 컨테이너를 사용할. (ip6tables -v -L은 아무것도 제공하지 않습니다)

내 질문은 : 왜 요청이 멈추고 무엇을합니까?


1
"netstat -6 -an"의 결과를 보여 주시겠습니까?
Rui F Ribeiro

도커는 그 포트에서 듣고있다 : tcp6 0 0 :::8500 :::* LISTEN 1648/docker 매혹적인. 왜? 왜 차단 되나요?
mknecht

수신 및 구성되지 않았거나 sysctl에서 IPv6을 사용하지 않도록 설정 한 것 같습니다. nginx, apache, lighthttp, 문제의 웹 서버를 게시물에 추가 하시겠습니까?
Rui F Ribeiro

컨테이너 내부에서 구성을위한 키-값 저장소 인 Consul이 청취 중입니다. 그러나 컨테이너가 IPv6을 지원하지 않는 것은 관련이 없다고 생각합니다. 그 요청은 절대 영사에 도달해서는 안됩니다. 그래도 어떤 레이어에 붙어 있지는 않습니다. 호스트에서 /proc/sys/net/ipv6/conf/all/disable_ipv60을 생성하므로 IPv6을 활성화해야합니다.
mknecht

2
별로 의미가 없습니다. 프로그램이 IPv6 소켓에 바인딩되는 한 sysctl 및 최신 커널에서도 IPv6을 비활성화 할 수 있습니다. IPv6을 지원하는 각 데몬을 거치고 IPv6 구성을 비활성화해야하기 때문에 엉덩이가 아프다.
Rui F Ribeiro

답변:


0

ipv6 및 ebable 전달을 활성화하십시오.

# cat /etc/sysctl.conf | grep ipv6
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0

1
분명히 OP는 무언가를 만들려고하지 않습니다. 실제 질문은 "요청이 중단되는 이유는 무엇입니까?"입니다. 당신의 대답은 그것에 대한 설명을 제공합니까? 그렇다면 어떻게 설명 하시겠습니까?
fra-san
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.