情况:美国各地的几台 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,您将这样做:
然后您可以访问您的远程 mysql 服务器,但无法从 Internet 访问。