Dockerコンテナネットワーク

コンテナIPv6サポート

以下IPv6のサブネット(任意)を指定したデーモン設定ファイルを新規作成し再起動。

/etc/docker/daemon.json

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}

注) 2001:db8:1::/64 はドキュメント内の例示として使用される予約されたIPアドレス

通常は以下のルール等を用いて作成 (LAN内プリフィックス:FC00::/7

再起動

$ sudo systemctl restart docker

ブリッジモードのIPv6の有効化を確認
注) ホストマシンにルータからIPv6アドレスが割当てられている場合

$ docker network inspect bridge
[
    {
        "Name": "bridge",
        ........
        ........
        "Driver": "bridge",
        "EnableIPv6": true,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                },
                {
                    "Subnet": "2001:db8:1::/64",
                    "Gateway": "2001:db8:1::1"
                }
            ]
        },
.....
.....

IPv4, IPv6対応ブリッジネットワークの作成

Docker Composerで使用するIPv6にも対応したカスタムブリッジネートワークを作成。

$ docker network create --gateway 172.20.0.1 --gateway 2001:db8:1:1::1 --subnet 172.20.0.0/24 --subnet 2001:db8:1:1::0/80 --ipv6 custom_network

注) ホストマシンのデフォルトのブリッジネットワークのサブネットを /64 で割当てたので、カスタムブリッジネットワークに割当てるサブネットは、これより一段低い(16ビット分) /80 とすること。

作成したネットワークの確認

$ docker network inspect custom_network
[
    {
        "Name": "custom_network",
        "Id": "912997c445af3a4718039d304c3b613aa0524659ca17bba5d87b5063a7ca795d",
        "Created": "2023-02-12T22:13:25.210491863+09:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": true,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/24",
                    "Gateway": "172.20.0.1"
                },
                {
                    "Subnet": "2001:db8:1:1::0/80",
                    "Gateway": "2001:db8:1:1::1"
                }
            ]
        },

注) コンテナに上記IPv6に対応したブリッジネットワークを使用する場合、ホスト側でip6tables(nftablesへ移行)によるルールを追加する必要があります。

$ sudo ip6tables -t nat -A POSTROUTING -s  2001:3984:3989::/64 ! -o docker0 -j MASQUERADE

IPv6アドレスの開放ポートの確認


DNS AAAAレコード(IPv6)確認

hostコマンド

$ host -t AAAA google.com
google.com has IPv6 address 2a00:1450:4009:81d::200e

digコマンド

$ dig google.com AAAA

; <<>> DiG 9.16.1-Ubuntu <<>> google.com AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37561
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;google.com.			IN	AAAA

;; ANSWER SECTION:
google.com.		101	IN	AAAA	2a00:1450:4009:823::200e

;; Query time: 3 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Mon Feb 13 12:18:19 UTC 2023
;; MSG SIZE  rcvd: 67