状況: 米国各地の複数の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 サーバーにアクセスできるようになりますが、インターネットからのアクセスはできなくなります。