V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
godall
V2EX  ›  Docker

有谁在 docke 上启用 ipv6 成功过?

  •  
  •   godall · 299 天前 · 591 次点击
    这是一个创建于 299 天前的主题,其中的信息可能已经有所发展或是发生改变。
    按照文档在/etc/docker/daemon.conf 文件添加一下内容:

    {
    "ipv6": true,
    "fixed-cidr-v6": "2001:db8:1::/64",
    "experimental": true,
    "ip6tables": true
    }
    上面 v6 地址根据自己机器配置。

    重启后,还是不正常啊,发现只有 ipv4 可以访问

    docker run -p 80:80 traefik/whoami
    Ggmusic
        1
    Ggmusic  
       299 天前 via iPhone
    fixed-cidr-v6 的掩码大于 64 ,比如设置成 80 。这样宿主机才能设置路由指向 docker0 (这个路由需要确认下是不是 docker 能自行管理)。如果是需要让公网能通过 ipv6 访问容器服务,还需要在宿主机上配置 proxy_ndp 。有个内核参数,搭配 ip -6 neigh add 命令;或者试试 systemd-networkd 提供的用户态 proxyndp 。
    rebecca554owen
        2
    rebecca554owen  
       269 天前
    `cat /etc/docker/*`
    ```
    {
    "experimental": true,
    "fixed-cidr-v6": "fd10::/80",
    "ip6tables": true,
    "ipv6": true,
    "registry-mirrors": [
    "https://ghcr.io"
    ]
    }
    ```
    这个地方一定不能写/64 ,然后新建子网的时候,还需要重新弄一个 ipv6 子网即可。
    给一个 docker compose 示例你看看。
    ```
    version: '3'
    services:
    openppp1: # 服务名,openppp2 对应 appsettings2.json ,多开的时候用上。
    image: rebecca554owen/ppp:latest
    container_name: openppp1 # 容器名,openppp2 对应 appsettings2.json ,多开的时候用上。
    restart: always
    cap_add:
    - NET_ADMIN
    devices:
    - /dev/net/tun:/dev/net/tun
    volumes:
    - ./appsettings1.json:/app/appsettings.json # appsettings1.json ,用于区别接入多个服务端。
    ports:
    - "7891:8080" # bridge 模式,7891 端口对接第一个服务端,7892 端口对接第二个服务端互不干扰,也不会全局代理。
    networks:
    - openpppnetwork
    command: ppp --mode=client --tun-static=yes --block-quic=no --set-http-proxy=yes # --tun-static=yes 或者 no ,按需修改,服务端未开启 udp 则不要选 yes 。

    networks:
    openpppnetwork:
    driver: bridge
    # enable_ipv6: true # docker 是否启用 ipv6 ,需要提前设置修改 /etc/docker/daemon.json 以便于支持 ipv6 。
    ipam:
    driver: default
    config:
    - subnet: 172.20.0.0/24 # 新建的 docker 桥接网络 ipv6 子网
    # - subnet: 2001:db8:1::/64 # 新建的 docker 桥接网络 ipv6 子网
    ```
    godall
        3
    godall  
    OP
       258 天前
    @rebecca554owen 谢谢,我发现在 ipv6 下面 docker run -p 88:80 xxx ,端口在 ipv6 下有问题的

    命令:curl localhost:88 返回正常
    Hostname: abc2
    IP: 127.0.0.1
    IP: ::1
    IP: 172.17.0.3
    IP: fd10::242:ac11:3
    IP: fe80::42:acff:fe11:3
    RemoteAddr: [fd10::1]:40854
    GET / HTTP/1.1
    Host: localhost:88
    User-Agent: curl/7.29.0
    Accept: */*

    命令:curl localhost , 返回失败
    curl: (7) Failed connect to localhost:80; Connection refused

    命令 :curl -g [::1]:88 ,返回正常
    命令 :curl -g [::1]:80 ,返回失败

    ----奇怪的来了------------
    命令:curl -g [fd10::242:ac11:3]:88 , 返回失败
    命令:curl -g [fd10::242:ac11:3]:80 , 返回是正常的!相当于去掉了端口映射,直接端口访问了。!!!
    godall
        4
    godall  
    OP
       258 天前
    同样
    命令:curl 172.17.0.3:88 , 返回失败
    命令:curl 172.17.0.3:80 , 返回是正常的!相当于去掉了端口映射,直接端口访问了。!!!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2414 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:34 · PVG 10:34 · LAX 18:34 · JFK 21:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.