Назад | Перейти на главную страницу

Предварительная маршрутизация IPv6-трафика Docker в другой контейнер с IP-таблицами

Я создал сеть докеров с:

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 все вместе имеют одинаковый нерабочий эффект, но не дают никаких ошибок.