问题描述
我有一个在 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 中,如跟踪:
所以这应该是任何未来用户的首选解决方案。