到 docker 容器的 IPv6 数据包似乎来自 docker 网络网关的 IPv4

问题描述

我有一个在 Docker 容器中运行的 HTTP 服务器。我需要能够在此容器中记录请求,包括它们的源 IP,但所有通过 IPv6 的数据包似乎都来自 Docker 网络网关的 IPv4 地址。

这最初是有道理的,因为 Docker 网络没有启用 IPv6,所以我假设 Docker 自动转换为 IPv4,但是在网络上启用了 IPv6,我看不到任何变化。这可能意味着我配置错误,但我似乎无法弄清楚。

我的网络配置如下(由Portainer创建):

    {
        "Name": "aais","Id": "2823152591e7f437244623ba46f66aff7eacba2e92942fbcf681f2f145fff783","Created": "2021-01-11T21:52:27.632515156Z","Scope": "local","Driver": "bridge","EnableIPv6": true,"IPAM": {
            "Driver": "default","Options": null,"Config": [
                {
                    "subnet": "172.18.0.0/16","Gateway": "172.18.0.1"
                },{
                    "subnet": "fd00:1255:2111::/48","Gateway": "fd00:1255:2111::1"
                }
            ]
        },"Internal": false,"Attachable": true,"Ingress": false,"ConfigFrom": {
            "Network": ""
        },"ConfigOnly": false,"Containers": {
            "6931497b76e36992c1ec9d2c6fadf4ed8492f8d7dd1bb4b01b2796f0e5204969": {
                "Name": "caddy","EndpointID": "be6bb2824a3f7c5ddb73ec45c5b37d7c439a461a65d00759e7eab68edb49548c","MacAddress": "02:42:ac:12:00:02","IPv4Address": "172.18.0.2/16","IPv6Address": "fd00:1255:2111::2/48"
            }
        },"Options": {
            "com.docker.network.bridge.enable_icc": "true","com.docker.network.bridge.enable_ip_masquerade": "false","com.docker.network.driver.mtu": "1500"
        },"Labels": {}
    }
]

解决方法

我最终使用了一个半临时解决方案,即:

https://github.com/robbertkl/docker-ipv6nat

这使得在 docker 中配置 IPv6 变得更加简单。然而,类似的功能预计很快就会出现在 Docker 中,如跟踪:

所以这应该是任何未来用户的首选解决方案。