[Docker][network][ipv6] Dockerのcontainerでipv6を使用し、かつ内から外へ疎通する。

     
    • 最終更新日時:2018/06/18 10:26:04

    Embed
    Screenshot-2018-6-16 Docker と IPv6 — Docker-docs-ja 17 06 Beta ドキュメント

    しっかりとDockerのipv6周りについては理解していないです。ドキュメントも読んでみたのですが、私の知識不足がたたってか、あまり呑み込めていないです。
    Dockerを使用する前から、自宅のネットワーク環境にIPv6を整備しつつあったのですが、機能の一部をDockerに移していたところ、IPv6での疎通がうまくいっていないことをTwitterで呟いていたりしました。

    で、改めてチャレンジした次第。

    最も参考になったのは以下のWebページ。

    Dockerで運用しているMastodonのIPv6対応 - Qiita

    Dockerとipv6で調べてみるとよく出てくる情報は、Unique Local AddressとNAT66を併用したパターンになるかと思います。
    ただ、こちらでも書かれているように、Unique Local Addressの場合は、RFC6724で定義されているpolicy tableに従って、IPv4/IPv6 dual stackのインスタンスとの通信ではIPv4が優先される、とのことで、通常とは逆の動作になるかと思います。
    あと、ip6tablesの設定を投入するのが案外面倒な面もあるかもしれません。

    もう一つとしてはGlobal unicast Addressを使用するパターンになるかと思います。
    個人的には、こちらの方が、ホスト側に設定されたIPv6アドレスの拡張の範囲で設定できるので、あまり違うネットワークといえばいいのか、理解のずれ?みたいなものが少ないような気がします。

    今回自分の場合は、後者で設定し、疎通できることを確認しました。

    Dockerでipv6なネットワーク設定を行う場合は以下の方法があると思います。

    ・Docker networkコマンドから、ipv6オプションを付与したうえで作成する。
    ・daemon.jsonにipv6向け設定を追加する。
    ・docker-composeファイルに、都度ipv6を付与するネットワーク設定を追加する。

    というわけで、今回は一番よく使うパターンになる3番目のDocker-composeファイルを使用した形をメモしておこうと思います。
    ちなみにDocker-composeファイルに記述するときは、versionは"3"だとダメなようで、私は"2.1"を使用しています。containerの設定で"3"固有の記述があるのであれば、見直すか、別の設定方法に変更する必要があるはずです。
    version: "2.1"
    services:

    networks:
    default-net:
    driver: bridge
    enable_ipv6: true
    ipam:
    driver: default
    config:
    - subnet: 172.32.0.0/24
    gateway: 172.32.0.1
    - subnet: 240b:zzzz:xxxx:yyyy:1000::/80
    gateway: 240b:zzzz:xxxx:yyyy:1000::1

    ここで設定するsubnetはDocker containerが所属するネットワークアドレス、gatewayはcontainerホストに設定されるipv6アドレスであり、各containerのデフォルトゲートウェイに設定されるアドレスになるはずです。

    これでDockerゲスト?からDockerホスト側へはping6が飛ぶようになると思います。が、グローバルへ確認しても、返答をDockerホストからDockerゲストへ戻してあげることができないため、疎通不能になるはずです。
    これを解消するために、Dockerホスト側にNDP Proxyを有効にします。

    $ sudo vi /etc/sysctl.conf
    net.ipv6.conf.eth0.proxy_ndp=1

    隣接するシステムとして、neighbor addを各containerで設定する必要があるのですが、さすがにこれは現実的ではないので、ndppd - NDP Proxy Daemonを導入する方が早いはずです。
    # apt update
    $ sudo apt install ndppd
    $ cat /etc/ndppd.conf
    proxy eth0 {
    rule 240b:zzzz:xxxx:yyyy:1000::/80 {
    static
    }
    }

    ndppdについては以下を参照してください。

    Ubuntu Manpage: ndppd - NDP Proxy Daemon

    Ubuntu Manpage: ndppd.conf - configuration file for ndppd

    これを設定することで、DockerゲストがDockerホストのneighbor tableに登録されることになるので、グローバルを含めた形で疎通ができるようになるはずです。

    $ docker network inspect docker-env_default-net 
    "Containers": {
    "0c3c9bda23a7768031525ee92ed4b91af4fc42fc8be8ed3533795e6722bc4ee6": {
    "Name": "bind-9",
    "EndpointID": "4609709ec8c06d2f89eb5ecdce8a749134ffdb31ba96027b48a6fb302e6ed531",
    "MacAddress": "02:42:ac:20:00:08",
    "IPv4Address": "172.32.0.8/24",
    "IPv6Address": "240b:zzzz:xxxx:yyyy:1000::8/80"

    $ docker exec -it bind-9 ip -6 a
    1: lo: mtu 65536 state UNKNOWN qlen 1000
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    219: eth0@if220: mtu 1500 state UP
    inet6 240b:zzzz:xxxx:yyyy:1000::8/80 scope global flags 02
    valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe20:8/64 scope link
    valid_lft forever preferred_lft forever

    $ docker exec -it bind-9 ip -6 r
    240b:zzzz:xxxx:yyyy:1000::/80 dev eth0 metric 256
    fe80::/64 dev eth0 metric 256
    ff00::/8 dev eth0 metric 256
    default via 240b:zzzz:xxxx:yyyy:1000::1 dev eth0 metric 1024

    $ docker exec -it bind-9 ping6 -c 3 www.google.com
    PING www.google.com (2404:6800:4004:80b::2004): 56 data bytes
    64 bytes from 2404:6800:4004:80b::2004: seq=0 ttl=51 time=5.824 ms
    64 bytes from 2404:6800:4004:80b::2004: seq=1 ttl=51 time=6.240 ms
    64 bytes from 2404:6800:4004:80b::2004: seq=2 ttl=51 time=6.378 ms

    --- www.google.com ping statistics ---
    3 packets transmitted, 3 packets received, 0% packet loss
    round-trip min/avg/max = 5.824/6.147/6.378 ms


    Compose ファイル・リファレンス - Docker-docs-ja 17.06.Beta ドキュメント

    理解そのものの間違い等はあると思いますので、気が付いた方はご指摘いただければと思います。
    関連記事


    Pagination

    Trackback

    Trackback URL

    https://kometchtech.blog.fc2.com/tb.php/2131-c88bc21d

    Comment

    Post Your Comment

    コメント登録フォーム
    公開設定

    Utility

    Profile

    kometchtech

    Author:kometchtech
    なんちゃってエンジニアです。
    2009年10月から業務都合により大阪勤務になりました。
    2010年1月、HYBRID W-ZERO3を購入しました。
    2010年11月、HTC Desire HDを購入しました。
    2012年2月、都内の会社に転職しました。
    2012年5月、HTC One Xを購入しました。
    2012年8月、事情により休職しました。
    2012年8月、SONY Xperia SXを購入しました。
    2013年1月、一身上の都合により退職しました。
    2014年3月、都内の会社に就職しました。
    2016年8月、HPC系の会社に転職しました。
    2018年6月、Xperia XZ1 compactに機種変。

    Amazonほしい物リスト
    何か問題などありましたら、こちらまで。 Twitter:@kometchtech follow us in feedly

    カレンダー

    08 | 2018/09 | 10
    - - - - - - 1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30 - - - - - -

    全記事(数)表示

    全タイトルを表示

    バロメーター

    カテゴリー

    カテゴリークラウド

    アーカイブ

    検索フォーム

    FCカウンター

    オンライン

    現在の閲覧者数:

    Amazonアソシエイト

    スポンサードリンク

    月間ページランキング

    ブログパーツ

    サイトランキング