Docker コンテナ内のリモート MySQL サーバー - macvlan と wireguard を使用してアクセスしますか?

Docker コンテナ内のリモート MySQL サーバー - macvlan と wireguard を使用してアクセスしますか?

状況: 米国各地の複数のVPSサーバーがWireguardメッシュネットワーク経由で私のラップトップに接続されています。Wireguardメッシュネットワークにはinnernetというツールを使用しています(https://github.com/tonarino/innernet)。

つまり、基本的には私のラップトップと VPS サーバーが同じ内部ネットワーク上にあるようなものです。

VPS ip    = 10.32.89.1
laptop ip = 10.32.90.1

VPS とラップトップにはこの仮想インターフェースが定義されているようです (これが重要かどうかはわかりません)。

innernet

VPS サーバーには、実行中の MySQL コンテナがあります (3306 ポートをホストに公開していません)。ホストに MySQL ポートをマウントせずに、ラップトップからその Docker 化された MySQL サーバーに接続するにはどうすればよいでしょうか?

推論:
なぜこのようにしたいのでしょうか?
MySQL サーバーをインターネット全体、つまり攻撃者から見えるようにしたくないのですが、同時にラップトップから MySQL データに簡単にアクセスできるようにしたいからです。

考えられる解決策:
それが docker macvlan の目的ですか? インナーネット インターフェイスを親として持つ VPS 上にネットワークを作成し、そのネットワークに mysql コンテナを接続する必要がありますか?

私はこれを試しました:

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

そして、mysql コンテナをそれに参加させようとしました:

docker network connect infranet2 mysql-server

しかし、次のエラーしか発生しません:
root@vps:~$ sudo docker network connect infranet2mysql-server デーモンからのエラー応答: macvlan ポートの作成に失敗しました: 引数が無効です

答え1

できることは、ポート (3306) を、Wireguard 経由でアクセス可能な内部 IP (トンネル IP など) にのみ公開することです (デフォルトで行われるように、すべての IP (0.0.0.0/0) に公開するのではなく)。トンネル IP が 192.168.0.1 の場合、次のように実行します。

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

その後、リモート MySQL サーバーにアクセスできるようになりますが、インターネットからのアクセスはできなくなります。

関連情報