Подключитесь к VPN (OpenVPN) из службы Docker на Swarm


11

У меня есть сервер OpenVPN, работающий с некоторыми частными IP-адресами, и я хотел бы, чтобы мои службы Docker Swarm получили доступ к этим адресам.

В идеале, не было бы клиента OpenVPN «внутри» контейнеров, поскольку предполагается, что образы будут развернуты в среде, где VPN не потребуется.

Что я пробовал до сих пор

Я успешно подключил контейнер к своему VPN с dperson / OpenVPN-клиент образ.

Я успешно запустил другой контейнер, используя этот контейнер в качестве своей сети, используя --net=container:my-vpn-client флаг.

Сейчас я пытаюсь создать сервис докеров это будет доступ к моим частным IP-адресам и что я нашел:

  • Я не могу запустить клиент openVPN в сервисе, так как он не может быть предоставлен cap-add: NET_ADMIN, Есть открытые проблемы с Докером, обсуждающим этот вопрос, но они все еще открыты.
  • Я подумал, что мог бы запустить клиентский контейнер openVPN «рядом» с кластером роя, но я не могу использовать network_mode: "container:my-vpn-client" поскольку он не поддерживается и имеет смысл, так как я не мог заставить произвольный контейнер присутствовать на каждом узле роя, если бы он не был самой службой.
  • Я попытался создать подключаемую сеть (мост / оверлей) и просто вставить свой клиентский контейнер OpenVPN в него и ожидать, что другие члены этой сети волшебным образом пройдут через этот канал ... и я был разочарован.

Итак, я здесь, любая идея?

Постскриптум Если это может помочь, это в основном для настройки некоторых автоматических тестов, которые будут запускать сервисы на односкоростном компьютере в режиме роя, как в swarm init & gt; развертывание стека & gt; запустить тесты & gt; Рой уйти. Так что, если есть «взлом» для этого ... я может быть заинтересованным ;)

Ответы:


1

Я делаю то же самое, на вашем док-клиенте openvpn вам нужно будет настроить NAT

iptables -t nat -A POSTROUTING -s 172.18.0.0/24 -o tun0 -j SNAT --to-source 10.8.0.10
iptables -t nat -A POSTROUTING -d 172.18.0.50/32 -o eth1 -j SNAT --to-source 172.18.0.100

Для меня я настроил это для запуска при загрузке через iptables-restore

На вашем хосте Docker добавьте следующее в / etc / network / interfaces

post-up ip rule add from 172.18.0.0/16 table 200
post-up ip route add 192.168.11.222 via 172.18.0.100 table 200

NB Это то, что вы используете, где

  • 172.18.0.0 - это ваша докерная сеть
  • 172.18.0.50 - это один из ваших докеров
  • 172.18.0.100 - ваш докер openvpn клиент
  • 192.168.11.222 - это частный IP-адрес, к которому ваши докеры должны иметь доступ
  • tun0 - это интерфейс OpenVPN вашего докера
  • eth1 - это сеть 172.18.0.0 интерфейс вашего докер-клиента openvpn

Отличный ответ ... проголосовал. Обратите внимание, как есть два проблемы, которые необходимо решить: (1) обеспечение того, чтобы трафик направлялся в нужное место, и (2) обеспечение того, что программное обеспечение, работающее в среде Docker, знает, что маршрут существует. Ты можешь также необходимо указать OpenVPN, как маршрутизировать трафик, используя ccr файл, как если бы вы имели дело с локальной сетью. Как со всей маршрутизацией TCP / IP, " traceroute твой лучший друг, как есть tcpdump или WireShark. "
Mike Robinson
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.