Назад | Перейти на главную страницу

Как создать сетевое соединение IPv6 в Docker?

Примечание: IPv6 здесь не настоящий IP.

Создать сеть

docker network create -d bridge --ipv6 --subnet=123c:d0f0:202:1920::/64 awx

Установлены AWX с костомизированным файлом docker-compose.yaml

version: '2'
services:
  web:
    ...
    networks:
      - awx_internal
      - awx
  task:
    ...
    networks:
      - awx_internal
      - awx
  postgresql:
    ...
    networks:
      - awx_internal
  rabbitmq:
    ...
    networks:
      - awx_internal
  memcached:
    ...
    networks:
      - awx_internal

networks:
  awx_internal:
    driver: bridge
  awx:
    external: true

Проверьте eth0 внутри контейнера

# docker exec awx_web ip -6 addr show dev eth0
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
    inet6 123c:d0f0:202:1920::2/64 scope global nodad
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe12:2/64 scope link
       valid_lft forever preferred_lft forever

Добавьте IP-адрес в контейнере к прокси-серверу гостевого хоста (на гостевом хосте не существует eth0)

ip -6 neigh add proxy 123c:d0f0:202:1920::2 dev lan0

Однако проверьте ip -6 neighbor show и ip -6 route на гостевом сервере не могу его найти.

Проверьте docker exec awx_web ip -6 route получил

123c:d0f0:202:1920::/64 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
default via 123c:d0f0:202:1920::1 dev eth0 metric 1024 pref medium

Это отличается от 123c:d0f0:202:1920::2. Зачем?

Добавлен прокси

sysctl net.ipv6.conf.lan0.proxy_ndp=1
ip -6 neigh add proxy 123c:d0f0:202:1920::2 dev lan0

Я проверил awx сеть

# docker network inspect awx
[
    {
        "Name": "awx",
        "Id": "3e92ba7c786e0bbda691685014dcee748a21d31f021b957c4f0ab324b2d1a188",
        "Created": "2020-05-04T13:01:50.841196671+09:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": true,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                },
                {
                    "Subnet": "123c:d0f0:202:1920::/64",
                    "Gateway": "123c:d0f0:202:1920::1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "2e2f7954d7699c5d785efe9eefc0e44bb07f9bf4b12ffd1fb37e8a61d881258a": {
                "Name": "awx_web",
                "EndpointID": "8fa5679c45a1b364f53e5562756ff13cdb4ac005e485a56c50f2c201410f19a3",
                "MacAddress": "13:02:ao:22:09:03",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": "123c:d0f0:202:1920::2/64"
            }
        },
        "Options": {},
        "Labels": {}
    }
]

Не нашел "com.docker.network.enable_ipv6": "true" в Options блок.

Наконец, я не могу выполнить ping6 с гостевого хоста до контейнера докеров ни с контейнера докеров на гостевой хост.

ping6 123c:d0f0:202:1920::2

Как сделать их общими? Делает eth0 сетевой интерфейс необходим на гостевом сервере, на котором запущены контейнеры докеров?