Ситуация: Несколько VPS-серверов по всей территории США подключены к моему ноутбуку через сеть Wireguard Mesh. Для сети Wireguard Mesh я использую инструмент под названием innernet (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 с интерфейсом 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
Что вы можете сделать, так это открыть свой порт (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, но доступ из Интернета будет невозможен.