Я создал сеть докеров с:
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). Любой трафик на порт 8080, который поступает на эти IP-адреса, должен быть перенаправлен в контейнер, открывающий 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
все вместе имеют одинаковый нерабочий эффект, но не дают никаких ошибок.