Исходящий IP-адрес двух контейнеров Docker IPv6 должен быть одинаковым.

Исходящий IP-адрес двух контейнеров Docker IPv6 должен быть одинаковым.

У меня есть подсеть 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

Связанный контент