使用 IP 表将 Docker IPv6 流量预先路由到不同的容器

使用 IP 表将 Docker IPv6 流量预先路由到不同的容器

我使用以下命令创建了一个 Docker 网络:

SUBNET=/64 network segment
docker network create docker network create --ipv6 --subnet ${SUBNET}:d::/80 --gateway ${SUBNET}:d::1 mynet

现在我正在运行${SUBNET}:d::2一个${SUBNET}:d::[3-X]容器

docker run --rm --net mynet --ip6 ${SUBNET}:d:2 --name nginx -p 8080:80 nginx:latest
docker run --rm --net mynet --ip6 ${SUBNET}:d:3 --name alp -it alpine:latest ash

[3-X] 上的容器不会公开任何端口,但它们将接收该端口上的连接(实际上是套接字,但使用 nginx 测试更容易)。来自这些 IP 的端口 8080 上的任何流量都应重定向到公开 8080 的容器${SUBNET}:d::2

我尝试添加这样的 DNAT 规则:

ip6tables -t nat -A PREROUTING -p tcp -d ${SUBNET}:d::3 --dport 9033 -j DNAT --to-destination [${SUBNET}:d::2]:9033

然后telnet ${SUBNET}:d::3 9033它不起作用,尽管它可以在 上运行::2。还尝试在 -d 地址上使用括号,如下所示,这会导致错误,我怀疑这是根本原因:

ip6tables -t nat -A PREROUTING -p tcp -d [${SUBNET}:d::3] --dport 9033 -j DNAT --to-destination [${SUBNET}:d::2]:9033
---> 
ip6tables v1.8.2 (nf_tables): host/network `[$SUBNET:d::3]' not found
Try `ip6tables -h' or 'ip6tables --help' for more information.

删除-d所有参数会产生相同的无效效果,但不会产生任何错误。

相关内容