Kết nối với VPN (OpenVPN) từ dịch vụ docker trên swarm


11

Tôi có một máy chủ OpenVPN đang chạy để lộ một số địa chỉ IP riêng tư, tôi muốn các dịch vụ của docker của tôi truy cập vào các địa chỉ đó.

Lý tưởng nhất là sẽ không có ứng dụng khách OpenVPN "bên trong" các thùng chứa vì hình ảnh dự kiến ​​sẽ được triển khai trong môi trường không cần VPN.

Những gì tôi đã cố gắng cho đến nay

Tôi đã kết nối thành công một container với VPN của mình với hình ảnh dperson / openvpn-client .

Tôi đã khởi chạy thành công một container khác bằng cách sử dụng container đó làm mạng của nó bằng --net=container:my-vpn-clientcờ.

Bây giờ tôi đang cố gắng thiết lập một dịch vụ docker sẽ truy cập các địa chỉ IP riêng của tôi và những gì tôi tìm thấy là:

  • Tôi không thể chạy ứng dụng khách openVPN trong một dịch vụ vì nó không thể được cung cấp cap-add: NET_ADMIN. Có những vấn đề mở với Docker thảo luận về vấn đề này nhưng chúng vẫn mở.
  • Tôi hình dung tôi có thể có bộ chứa máy khách openVPN chạy "bên cạnh" cụm swarm, nhưng tôi không thể sử dụng network_mode: "container:my-vpn-client"vì nó không được hỗ trợ và không có ý nghĩa vì tôi không thể buộc một thùng chứa tùy ý có mặt trên mọi nút của swarm mà không phải là một dịch vụ chính nó.
  • Tôi đã thử tạo một mạng có thể đính kèm (cầu / lớp phủ) và chỉ cần gắn thùng chứa ứng dụng khách OpenVPN của mình vào đó và hy vọng các thành viên khác của mạng đó sẽ đi qua đường ống đó ... và tôi đã thất vọng.

Vì vậy, tôi ở đây, bất kỳ ý tưởng?

PS Nếu có thể giúp, điều này chủ yếu là để thiết lập một số thử nghiệm tự động sẽ chạy các dịch vụ trên máy docker đơn ở chế độ swarm, như trong swarm init> stack triển khai> chạy thử nghiệm> rời khỏi swarm. Vì vậy, nếu có một "hack" cho điều đó ... tôi thể quan tâm;)

Câu trả lời:


1

Tôi làm điều này chính xác tương tự, trên máy khách docker openvpn của bạn, bạn sẽ cần phải cấu hình 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

Đối với tôi, tôi thiết lập tính năng này để chạy khi khởi động thông qua iptables-restore

Trên máy chủ docker của bạn, thêm phần sau vào giao diện / 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 Đây là những gì bạn sử dụng ở đâu

  • 172.18.0.0 là mạng docker của bạn
  • 172.18.0.50 là một trong những container docker của bạn
  • 172.18.0.100 là ứng dụng khách openvpn docker của bạn
  • 192.168.11.222 là IP riêng mà bạn muốn máy khách docker của mình có thể truy cập
  • tun0 là giao diện OpenVPN của máy khách docker của bạn
  • eth1 là giao diện mạng 172,18.0.0 của máy khách docker openvpn của bạn

Một phản ứng tuyệt vời ... được nâng cấp. Lưu ý cách xử lý có hai vấn đề: (1) đảm bảo lưu lượng được chuyển đến đúng nơi và (2) đảm bảo rằng phần mềm chạy trong môi trường Docker biết rằng tuyến đường tồn tại. Bạn cũng có thể cần cho OpenVPN biết cách định tuyến lưu lượng, sử dụng ccrtệp như thể bạn đang xử lý một mạng cục bộ. Như với tất cả các định tuyến TCP / IP, " traceroutelà người bạn tốt nhất của bạn, như là tcpdumphoặc WireShark."
Mike Robinson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.