У меня есть подсеть IPv6 /64 на сервере. Я настроил docker на использование ее части по умолчанию /80, и у меня есть приложение, состоящее из 2 зависимых контейнеров. Эти два контейнера находятся внутри сети abcd:1::/80. Потенциально запущено 100 экземпляров этого приложения.
Проблема в том, что оба контейнера должны иметь одинаковый IP. По крайней мере, мне нужно обмануть приложение, заставив его так думать. Они состоят из app
и monitor
прямо сейчас app
предоставляют два порта. Один из которых будет вызываться monitor
другим внешними источниками. monitor
взаимодействует с внешними источниками и должен делать это с тем же IP, что иapp
Сейчас он настроен следующим образом: app
использует abcd:1::2
и monitor
использует abcd:1::3
то, что мне нужно сделать, это чтобы сетевой мост, который создается через docker network create
маршрутизировал весь трафик через общий IP. Этот IP может быть любым из подсети. Я думаю, что самым простым способом было бы направить abcd:1:3
на abcd:1:2
. В конце концов, вызывая
dig +short myip.opendns.com @resolver1.opendns.com
из контейнеров должно возвращать то же значение. Можно ли это как-то сделать с помощью таблиц ip, изменяющих мост после его создания? Текущая хост-система — Debian.
решение1
Я сомневаюсь, что это лучший способ сделать это (возможно, «monitor» должен вместо этого проксировать запросы через «app»), но, скорее всего, вы можете использовать обычный ip6tables SNAT на хосте, как в IPv4:
-A PREROUTING -s abcd:1::3 -j SNAT --to-source abcd:1::2
Возможно, можно использовать use NETMAP
для автоматизации SNAT для всех адресов:
-A PREROUTING -s abcd:1::/80 -j NETMAP --to ::2/::f