情況:美國各地的幾台 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容器runig(我不向主機公開3306埠)。如何從筆記型電腦連接到 dockerized mysql 伺服器而不將 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
你可以做的是,你可以只在內部IP上公開你的連接埠(3306),可以透過wireguard訪問,例如隧道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伺服器,但無法從網路存取。