Remote-MySQL-Server im Docker-Container – Zugriff über MacVLAN und Wireguard?

Remote-MySQL-Server im Docker-Container – Zugriff über MacVLAN und Wireguard?

Situation: Mehrere VPS-Server in den USA sind über das Wireguard-Mesh-Netzwerk mit meinem Laptop verbunden. Für das Wireguard-Mesh-Netzwerk verwende ich ein Tool namens Innernet (https://github.com/tonarino/innernet).

Im Grunde ist es so, als ob mein Laptop und die VPS-Server sich im selben internen Netzwerk befinden.

VPS ip    = 10.32.89.1
laptop ip = 10.32.90.1

Sieht aus, als ob für VPS und Laptop diese virtuelle Schnittstelle definiert ist (ich bin nicht sicher, ob das wichtig ist):

innernet

Auf dem VPS-Server läuft ein MySQL-Container (ich stelle den Port 3306 nicht für den Host bereit). Wie kann ich von meinem Laptop aus eine Verbindung zu diesem dockerisierten MySQL-Server herstellen, ohne den MySQL-Port für den Host bereitzustellen?

Argumentation:
Warum möchte ich das so?
Weil ich ihn (den MySQL-Server) nicht für das gesamte Internet und damit für Angreifer sichtbar machen möchte, gleichzeitig aber von meinem Laptop aus einfachen Zugriff auf die MySQL-Daten haben möchte.

Mögliche Lösung:
Ist das der Zweck von Docker Macvlan? Muss ich auf VPS ein Netzwerk erstellen, das eine Innernet-Schnittstelle als übergeordnetes Element oder so etwas hat? Und dann meinen MySQL-Container an dieses Netzwerk anhängen?

Ich habe Folgendes versucht:

docker network create \
-d macvlan \
--attachable \
--subnet=172.40.110.0/24 \
--gateway=172.40.110.1 \
-o parent=innernet \
infranet2

Und dann habe ich versucht, einen MySQL-Container damit zu verbinden:

docker network connect infranet2 mysql-server

Aber ich bekomme nur einen Fehler:
root@vps:~$ sudo docker network connect infranet2mysql-server Fehlerantwort vom Daemon: Der Macvlan-Port konnte nicht erstellt werden: ungültiges Argument

Antwort1

Sie können Ihren Port (3306) nur auf der internen IP-Adresse freigeben, die über Wireguard erreichbar ist, z. B. die Tunnel-IP-Adresse (anstatt ihn auf allen IP-Adressen (0.0.0.0/0) freizugeben, wie dies standardmäßig geschieht). Wenn Ihre Tunnel-IP-Adresse 192.168.0.1 ist, gehen Sie folgendermaßen vor:

docker run --name mysql-server \
-p 192.168.0.1:3306:3306 \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-d mysql

Dann können Sie auf Ihren Remote-MySQL-Server zugreifen, der Zugriff aus dem Internet wäre jedoch nicht möglich.

verwandte Informationen