Ich habe ein /64 IPv6-Subnetz auf einem Server. Ich habe Docker so konfiguriert, dass es einen standardmäßigen /80-Teil davon verwendet, und ich habe eine Anwendung, die aus 2 abhängigen Containern besteht. Diese beiden Container befinden sich in einem abcd:1::/80-Netzwerk. Es werden möglicherweise 100 Instanzen dieser Anwendung ausgeführt.
Das Problem ist, dass beide Container die gleiche IP haben müssen. Zumindest muss ich die Anwendung dazu bringen, das zu glauben. Sie bestehen aus zwei Ports app
und stellen monitor
diese derzeit app
zur Verfügung. Einer davon wird monitor
von externen Quellen vom anderen aufgerufen. monitor
kommuniziert mit externen Quellen und muss dies mit der gleichen IP tun wieapp
Im Moment ist es wie folgt konfiguriert: app
verwendet abcd:1::2
und monitor
verwendet. abcd:1::3
Was ich tun muss, ist, dass die Netzwerkbrücke, die über erstellt wird, den docker network create
gesamten Datenverkehr über eine gemeinsame IP-Adresse leitet. Diese IP-Adresse kann eine beliebige des Subnetzes sein. Ich denke, der einfachste Weg wäre, zu zu routen abcd:1:3
. abcd:1:2
Am Ende ruft man
dig +short myip.opendns.com @resolver1.opendns.com
aus den Containern müssen den gleichen Wert zurückgeben. Kann dies irgendwie mit IP-Tabellen erreicht werden, indem die Brücke nach ihrer Erstellung geändert wird? Das aktuelle Hostsystem ist Debian.
Antwort1
Ich bezweifle, dass dies die beste Möglichkeit ist (vielleicht sollte „Monitor“ Anfragen stattdessen über „App“ weiterleiten), aber höchstwahrscheinlich können Sie auf dem Host reguläres ip6tables SNAT verwenden, wie bei IPv4:
-A PREROUTING -s abcd:1::3 -j SNAT --to-source abcd:1::2
Möglicherweise lässt sich NETMAP
SNAT für alle Adressen automatisieren:
-A PREROUTING -s abcd:1::/80 -j NETMAP --to ::2/::f