Туннель S SH в контейнере docker - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть клиент, работающий в контейнере docker, который подписывается на брокера MQTT и затем записывает данные в базу данных. Для подключения к MQTT Broker мне потребуется настроить переадресацию портов.

При разработке клиента на моей локальной машине все работало нормально:

SSH -L <mqtt-port:1883>:localhost:<9000> <user>@<ip-of-server-running-broker>

Затем клиент настраивается для подписки на брокер MQTT через localhost: 9000. Все это прекрасно работает на моей локальной машине.

В контейнере это не будет, если я не запусту контейнер с --net=host, но я бы предпочел этого не делать из-за проблем безопасности.

I попробовал следующее:

  1. Создать docker сеть "testNetwork"
  2. Запустить контейнер ssh_tunnel внутри "testNetwork" и реализовать переадресацию портов внутри этого контейнера.
  3. Запустите контейнер database_client в "testNetwork" и подпишитесь на брокер mqtt через мостовую сеть, например ("ssh_tunnel.testNetwork:")

(я хочу 2 отдельных контейнера для этого потому что IP-адрес придется менять довольно часто, и я не хочу постоянно перестраивать клиентский контейнер)

Но все мои попытки пока не увенчались успехом. Пересылка, кажется, работает (я могу получить доступ к оболочке на сервере в контейнере s sh), но я не нашел способа фактически подписаться на брокер mqtt из контейнера клиента.

Возможно на самом деле это довольно просто, и я просто не понимаю, как это работает, но я уже несколько часов застрял в этой проблеме ... Любая помощь или советы приветствуются!

1 Ответ

1 голос
/ 17 февраля 2020

Решение было довольно простым и работает без использования -net=host. Мне нужно было привязаться к 0.0.0.0 и использовать опцию переадресации шлюза, чтобы позволить удаленным хостам (клиенту базы данных) подключаться к перенаправленным портам.

ssh -L -g *:<hostport>:localhost:<mqtt-port/remote port> <user>@<remote-ip>

Другие контейнеры в том же Docker мостовая сеть может затем просто использовать строку подключения <name-of-ssh-container>:<hostport>.

...