Eu tenho uma sub-rede /64 IPv6 em um servidor. Configurei o docker para usar uma parte /80 padrão dele e tenho um aplicativo que consiste em 2 contêineres dependentes. Esses dois contêineres estão dentro de uma rede abcd:1::/80. Há potencialmente 100 instâncias deste aplicativo em execução.
O problema é que ambos os containers precisam ter o mesmo IP. Pelo menos preciso enganar o aplicativo fazendo-o pensar isso. Eles consistem app
e monitor
agora app
expõem duas portas. Um dos quais será chamado pelo monitor
outro por fontes externas. monitor
se comunica com fontes externas e precisa fazê-lo com o mesmo ip queapp
No momento está configurado da seguinte forma: app
usa abcd:1::2
e monitor
usa abcd:1::3
o que preciso fazer é que a ponte de rede que é criada via docker network create
roteia todo o tráfego através de um ip comum. Este ip pode ser qualquer uma da sub-rede. Acho que a maneira mais fácil seria rotear abcd:1:3
para abcd:1:2
. No final ligando
dig +short myip.opendns.com @resolver1.opendns.com
dos contêineres deve retornar o mesmo valor. Isso pode ser feito de alguma forma com tabelas IP modificando a ponte após ela ter sido criada? O sistema host atual é o debian.
Responder1
Duvido que esta seja a melhor maneira de fazer isso (talvez 'monitor' deva fazer proxy de solicitações por meio de 'app'), mas provavelmente você pode usar ip6tables SNAT regular no host, como em IPv4:
-A PREROUTING -s abcd:1::3 -j SNAT --to-source abcd:1::2
Pode ser possível usar NETMAP
para automatizar o SNAT para todos os endereços:
-A PREROUTING -s abcd:1::/80 -j NETMAP --to ::2/::f