ไม่มีการเชื่อมต่อ IPv6 จากคอนเทนเนอร์นักเทียบท่า


11

ฉันมีปัญหาร้ายแรงที่จะเปิดใช้งาน IPv6 ในตัวเชื่อมต่อ

สิ่งแวดล้อม

  • โฮสต์กำลังเรียกใช้ Debian Jessie
  • มันเป็นเซิร์ฟเวอร์เสมือน (KVM)
  • eth0 มีที่อยู่ที่กำหนดค่าแบบคงที่เช่น w: x: y: z :: 1 ในเครือข่ายเช่น w: xy: z :: / 64 ซึ่ง บริษัท โฮสติ้งของฉันมอบหมายให้ฉัน
  • โฮสต์ของฉันสามารถใช้ IPv6 ได้โดยไม่มีปัญหาใด ๆ : การปิงงานนอกโลกเว็บไซต์ที่ทำงานบนคอนเทนเนอร์ (พอร์ต 80 ที่เชื่อมต่อกับโฮสต์: 80) สามารถเข้าถึงได้ผ่าน ipv6

ปัญหา

อย่างไรก็ตามฉันไม่สามารถเข้าถึงโลกภายนอกจากภายในภาชนะ! สะพาน docker0 ของฉันไม่มีที่อยู่ IPv6 หลังจากรีสตาร์ท Docker ด้วยพารามิเตอร์ด้านล่าง ไม่มีเส้นทางและไม่มีเกตเวย์ (ไม่มีเหตุผลหากไม่มีที่อยู่ ipv6)

การตั้งค่าตัวเชื่อมต่อของฉัน: ตัวเชื่อมต่อเริ่มต้นด้วยพารามิเตอร์เหล่านี้ใน DOCKER_OPTS

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

ดังนั้นหลังจากรอสองสัปดาห์สำหรับคำตอบและค้นคว้าอีกสองสามชั่วโมงหลังจากเปิดรับรางวัลฉันพบวิธีแก้ปัญหา

  1. ตั้งค่าเครือข่ายที่เปิดใช้งาน IPv6 ใหม่และกำหนดเครือข่ายย่อยให้ฉัน (a / 80 ของฉัน / 64)

    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. เพิ่มพร็อกซีเพื่อทำให้โฮสต์ของฉัน (เปิดใช้งาน IPv6) เพื่อตอบสนองต่อข้อความการชักชวนเพื่อนบ้านจากเราเตอร์ของฉัน (เช่น: "เฮ้, ผู้ที่โฮสต์ w: x: y: z: aaaa :: 5?") ด้วยข้อความโฆษณาเพื่อนบ้าน (" เป็นฉัน!").

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

    ndppd อาจช่วยให้คุณประกาศโฮสต์ใด ๆ ในเครือข่ายของคุณโดยอัตโนมัติ

แบมนั่นแหล่ะ


คุณสามารถติดตั้งndppddaemon เพื่อทำสิ่งนี้โดยอัตโนมัติ
Michael Hampton

1
@MichaelHampton: นั่นคือสิ่งที่ฉันแนะนำ
lajuette
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.