11

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

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

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

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

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

Теперь я пытаюсь настроить службу Docker, которая будет иметь доступ к моим частным IP-адресам, и я нашел следующее:

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

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

PS Если это может помочь, это в основном для настройки некоторых автоматических тестов, которые будут запускать сервисы на машине с одним докером в режиме роя, как в swarm init> стек развертывания> запускать тесты> отпуск роя. Так что, если есть "взлом" для этого ... мне может быть интересно;)

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .