도커 컨테이너에서 IPv6 연결이 없음


11

Docker에서 IPv6을 활성화하는 데 심각한 문제가 있습니다.

환경

  • 호스트는 Debian Jessie를 실행하고 있습니다.
  • 가상 서버 (KVM)입니다.
  • eth0에는 w : xy : z :: / 64와 같은 네트워크에서 w : x : y : z :: 1과 같이 정적으로 구성된 주소가 있으며,이 주소는 호스팅 회사에서 할당 한 것입니다.
  • 내 호스트는 아무런 문제없이 IPv6를 사용할 수 있습니다. 외부 세계에 Ping을 수행하면 컨테이너에서 실행되는 웹 사이트 (포트 80에 호스트 : 80)가 ipv6을 통해 액세스 할 수 있습니다.

문제

그러나 컨테이너 내에서 외부 세계에 액세스 할 수 없습니다! 아래 매개 변수를 사용하여 docker를 다시 시작한 후 docker0 브리지에 IPv6 주소가 없습니다. 경로도없고 게이트웨이도 없습니다 (ipv6 주소가 없으면 의미가 없습니다).

내 Docker 설정 : DOCKER_OPTS에서 이러한 매개 변수로 Docker가 시작됩니다.

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ipv6 --fixed-cidr-v6=w:x:y:z:a::/80"

일부 ipv6 호스트 구성 매개 변수 :

net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.forwarding = 1

여기 내가 만든 네트워크 중 하나가 있습니다.

root@wopr:~# docker network inspect wopr6
[
    {
        "Name": "wopr6",
        "Id": "ddc192d4af2a8edc809975e84cf3e4cb82c24d4cfe970dd8e3fc7d6ff31e20ee",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": true,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.23.0.0/16",
                    "Gateway": "172.23.0.1/16"
                },
                {
                    "Subnet": "w:x:y:z:a:0:0:0/80",
                    "Gateway": "w:x:y:z:a::1"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "dff30ab1496a4c3689ad6da0837fdb6cf7ea1a5b32312116214313b5b14ed07e": {
                "Name": "happy_varahamihira",
                "EndpointID": "8cd4ed4b91d8421171ec8cc771bbe7b7d81f05dc9f4679f20c642c2e828ec475",
                "MacAddress": "02:42:ac:17:00:02",
                "IPv4Address": "172.23.0.2/16",
                "IPv6Address": "w:x:y:z:a::2/80"
            }
        },
        "Options": {},
        "Labels": {}
    }
]

위에서 언급 한 컨테이너 내부의 일부 정보는 다음과 같습니다.

구애

root@dff30ab1496a:/# ip -6 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
332: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    inet6 2a03:4000:6:2158:a::2/80 scope global nodad
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe17:2/64 scope link
       valid_lft forever preferred_lft forever

노선

root@dff30ab1496a:/# ip -6 r
2a03:4000:6:2158:a::/80 dev eth0  proto kernel  metric 256
fe80::/64 dev eth0  proto kernel  metric 256
default via 2a03:4000:6:2158:a::1 dev eth0  metric 1024

PING ipv6.l.google.com (2a00:1450:4001:811::200e): 56 data bytes, id 0x0011 = 17
--- ipv6.l.google.com ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss

내가 무엇을 놓치고 있습니까?

답변:


5

그래서 2 주 동안 답변을 기다린 후 현상금을 연 후 몇 시간을 더 연구 한 결과 해결책을 찾았습니다.

  1. 새로운 IPv6 지원 네트워크를 설정하고 사용 가능한 서브넷을 할당합니다 (/ 64의 / 80).

    docker network create --ipv6 --subnet=w:x:y:z:aaaa::/80 myfancynetwork
    

    이제 컨테이너를 시작하고 새 네트워크에 연결하십시오. IP 주소를 찾으십시오. 이 예에서 w : x : y : z : aaaa :: 5라고 가정하겠습니다.

  2. proxy_ndp 사용

    sysctl net.ipv6.conf.eth0.proxy_ndp=1
    

    /etc/sysctl.conf를 통해이 설정을 구성하여 영구적으로 만들 수도 있습니다.

  3. 이웃 광고 메시지 ( " 나야! ").

    ip -6 neigh add proxy w:x:y:z:aaaa::5 dev eth0
    

    ndppd는 네트워크의 모든 호스트를 자동으로 알리는 데 도움이 될 수 있습니다.

밤, 그게 다야.


ndppd이를 자동화하기 위해 데몬을 설치할 수 있습니다 .
Michael Hampton

1
@ MichaelHampton : 그것이 내가 제안한 바로 그 것입니다.
lajuette
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.