Terhubung ke VPN (OpenVPN) dari layanan buruh pelabuhan saat berkerumun

11

Saya memiliki server OpenVPN yang menjalankan mengekspos beberapa alamat IP pribadi, saya ingin layanan galangan buruh pelabuhan saya untuk mengakses alamat-alamat itu.

Idealnya, tidak akan ada klien OpenVPN "di dalam" wadah karena gambar diharapkan akan digunakan dalam lingkungan di mana VPN tidak akan diperlukan.

Apa yang saya coba sejauh ini

Saya berhasil menghubungkan wadah ke VPN saya dengan gambar dperson / openvpn-client .

Saya berhasil meluncurkan wadah lain menggunakan wadah itu sebagai jaringannya menggunakan --net=container:my-vpn-clientbendera.

Sekarang saya mencoba untuk mengatur layanan buruh pelabuhan yang akan mengakses alamat IP pribadi saya dan apa yang saya temukan adalah:

  • Saya tidak bisa menjalankan klien openVPN dalam layanan karena tidak dapat diberikan cap-add: NET_ADMIN. Ada masalah terbuka dengan Docker yang membahas masalah ini, tetapi masih terbuka.
  • Saya pikir saya bisa menjalankan kontainer klien openVPN "di samping" cluster swarm, tapi saya tidak bisa menggunakan network_mode: "container:my-vpn-client"karena tidak didukung dan masuk akal karena saya tidak mungkin memaksa wadah sewenang-wenang untuk hadir di setiap node dari berkerumun tanpa menjadi layanan itu sendiri.
  • Saya mencoba membuat jaringan yang dapat dilampirkan (jembatan / hamparan) dan hanya menempelkan wadah klien OpenVPN saya di dalamnya dan secara ajaib mengharapkan anggota lain dari jaringan itu untuk melalui pipa itu ... dan saya kecewa.

Jadi, inilah saya, ada ide?

PS Jika dapat membantu, ini terutama untuk mengatur beberapa tes otomatis yang akan menjalankan layanan pada mesin docker tunggal dalam mode swarm, seperti dalam swarm init> stack deploy> run tes> swarm leave. Jadi jika ada "retasan" untuk itu ... saya mungkin tertarik;)


sumber

Jawaban:

1

Saya melakukan hal yang sama persis ini, pada klien docker openvpn Anda, Anda perlu mengkonfigurasi 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

Bagi saya, saya mengatur ini untuk dijalankan saat boot melalui iptables-restore

Di host buruh pelabuhan Anda, tambahkan berikut ini ke / 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 Inilah yang Anda gunakan di mana

  • 172.18.0.0 adalah jaringan buruh pelabuhan Anda
  • 172.18.0.50 adalah salah satu wadah buruh pelabuhan Anda
  • 172.18.0.100 adalah klien openvpn buruh pelabuhan Anda
  • 192.168.11.222 adalah IP pribadi yang Anda inginkan agar dapat diakses oleh klien buruh pelabuhan Anda
  • tun0 adalah antarmuka OpenVPN dari klien buruh pelabuhan Anda
  • eth1 adalah antarmuka jaringan 172.18.0.0 dari klien docker openvpn Anda
bunga api
sumber
Respons yang sangat baik ... ditingkatkan. Perhatikan bagaimana ada dua masalah yang harus dihadapi: (1) memastikan bahwa lalu lintas diarahkan ke tempat yang tepat, dan (2) memastikan bahwa perangkat lunak yang berjalan di lingkungan Docker tahu bahwa rute ada. Anda juga mungkin perlu memberi tahu OpenVPN cara merutekan lalu lintas, menggunakan ccrfile seolah-olah Anda berurusan dengan jaringan lokal. Seperti semua perutean TCP / IP, " tracerouteadalah teman terbaik Anda, seperti halnya tcpdumpWireShark."
Mike Robinson