Підключіться до VPN (OpenVPN) з докерної служби на рій


11

У мене працює сервер OpenVPN, який відкриває деякі приватні IP-адреси, я хотів би, щоб мої сервіси докерних роїв отримували доступ до цих адрес.

В ідеалі не було б клієнта OpenVPN "всередині" контейнерів, оскільки очікується, що зображення будуть розміщені в середовищі, де VPN не буде необхідним.

Що я намагався поки що

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

Я успішно запустив інший контейнер, використовуючи цей контейнер як свою мережу, використовуючи --net=container:my-vpn-clientпрапор.

Зараз я намагаюся створити послугу докера, яка матиме доступ до моїх приватних IP-адрес, і що я знайшов:

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

Так ось я, будь-яка ідея?

PS Якщо це може допомогти, це головним чином для встановлення деяких автоматизованих тестів, які запускатимуть сервіси на одній докерній машині в режимі рій, як в рій init> стек розгортання> тести запуску> рой залишити. Тож якщо для цього є "хак" ... мені може бути цікаво;)

Відповіді:


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-recovery

На хості докера додайте наступне до / etc / network / інтерфейсів

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) забезпечення того, що програмне забезпечення, яке працює в середовищі Докер, знає, що маршрут існує. Ви можете також повинні сказати OpenVPN , як маршрутизировать трафік, використовуючи ccrфайл , як якщо б ви мали справу з локальною мережею. Як і у всіх маршрутизаторах TCP / IP, " tracerouteваш найкращий друг, як це tcpdumpабо WireShark."
Майк Робінсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.