Ситуация: Несколько серверов VPS по всему США подключены к моему ноутбуку через сеть wireguard mesh. Для wireguard mesh network я использую инструмент под названием 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 с моего ноутбука.
Possible solution:
Для этого нужен 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
Error response from daemon: failed to create the macvlan port: invalid argument
Что вы можете сделать, так это открыть свой порт (3306) только для внутреннего IP-адреса, доступного через wireguard, например, для туннельного IP-адреса (вместо того, чтобы открывать его для всех IP-адресов (0.0.0.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, но доступ из Интернета будет невозможен.