Docker

docker容器中的遠端mysql伺服器-使用macvlan和wireguard訪問?

  • August 10, 2021

情況:美國各地的幾台 VPS 伺服器通過wireguard 網狀網路連接到我的筆記型電腦。對於線保護網狀網路,我使用稱為內部網(https://github.com/tonarino/innernet)的工具。

所以基本上它就像我的筆記型電腦和 vps 伺服器在同一個內部網路上。

VPS ip    = 10.32.89.1
laptop ip = 10.32.90.1

看起來 VPS 和筆記型電腦定義了這個虛擬介面(不確定這是否重要):

innernet

VPS 伺服器有 mysql 容器 runig(我不向主機公開 3306 埠)。如何在不將 mysql 埠安裝到主機的情況下從我的筆記型電腦連接到該 dockerized 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 埠:無效參數

您可以做的是您只能在內部 ip 上公開您的埠(3306),可通過wireguard 訪問,例如隧道ip(而不是在所有ips(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 伺服器,但無法從 Internet 訪問。

引用自:https://serverfault.com/questions/1073750