Удаленный сервер MySQL в контейнере докеров – доступ с помощью macvlan и Wireguard?
Ситуация: несколько VPS-серверов в США подключены к моему ноутбуку через ячеистую сеть Wireguard. Для ячеистой сети Wireguard я использую инструмент Internalnet (https://github.com/tonarino/innernet).
По сути, мой ноутбук и VPS-серверы находятся в одной внутренней сети.
VPS ip = 10.32.89.1
laptop ip = 10.32.90.1
Похоже, что на VPS и ноутбуке определен этот виртуальный интерфейс (не уверен, имеет ли это значение):
innernet
На VPS-сервере работает контейнер MySQL (я не открываю хосту порт 3306). Как я могу подключиться к этому доккеризованному серверу 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 ответ
Что вы можете сделать, так это открыть свой порт (3306) только для внутреннего IP-адреса, доступного через 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, но доступ из Интернета будет невозможен.