情况:美国各地的几台 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 端口)。如何才能从我的笔记本电脑连接到该 dockerized mysql 服务器,而无需将 mysql 端口安装到主机?
推理:
为什么我要这样做?
因为我不想让它(mysql 服务器)对整个互联网可见,从而让攻击者看到,但同时我想从我的笔记本电脑轻松访问 mysql 数据。
可能的解决方案:
docker macvlan 就是用来干这个的吗?我是否需要在 VPS 上创建一个以 innernet 接口为父级的网络?然后将我的 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
您可以做的是,仅在可通过 wireguard 访问的内部 ip 上公开您的端口 (3306),例如隧道 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 服务器,但是无法从互联网进行访问。