Connettiti a una VPN (OpenVPN) da un servizio docker su sciame


11

Ho un server OpenVPN in esecuzione che espone alcuni indirizzi IP privati, vorrei che i miei servizi sciami docker accedessero a quegli indirizzi.

Idealmente, non ci sarebbe un client OpenVPN "all'interno" dei contenitori poiché le immagini dovrebbero essere distribuite in un ambiente in cui non sarà necessaria una VPN.

Quello che ho provato finora

Ho collegato correttamente un contenitore alla mia VPN con l'immagine dperson / openvpn-client .

Ho lanciato con successo un altro contenitore usando quel contenitore come sua rete usando la --net=container:my-vpn-clientbandiera.

Ora sto cercando di impostare un servizio docker che accederà ai miei indirizzi IP privati ​​e quello che ho trovato è:

  • Non riesco a eseguire il client openVPN in un servizio in quanto non può essere fornito cap-add: NET_ADMIN. Ci sono problemi aperti con Docker che discutono di questo argomento ma sono ancora aperti.
  • Ho pensato che avrei potuto far girare il container client openVPN "accanto" al cluster swarm, ma non posso usarlo network_mode: "container:my-vpn-client"perché non è supportato e ha senso dal momento che non potrei forzare la presenza di un container arbitrario su ogni nodo del brulicare senza che sia un servizio stesso.
  • Ho provato a creare una rete collegabile (bridge / overlay) e ho semplicemente inserito il mio contenitore client OpenVPN in esso e mi aspetto magicamente che altri membri di quella rete passino attraverso quella pipe ... e sono rimasto deluso.

Quindi eccomi qui, qualche idea?

PS Se può essere d'aiuto, si tratta principalmente di impostare alcuni test automatici che eseguiranno i servizi su una singola macchina docker in modalità sciame, come in swarm init> impila stack> esegui test> scia di sciami. Quindi, se c'è un "hack" per questo ... io possa essere interessato;)

Risposte:


1

Faccio esattamente la stessa cosa, sul tuo client docker openvpn dovrai configurare 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

Per me, ho impostato questo per l'esecuzione all'avvio tramite un ripristino di iptables

Sull'host docker, aggiungere quanto segue a / 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 Questo è quello che usi dove

  • 172.18.0.0 è la tua rete docker
  • 172.18.0.50 è uno dei contenitori della finestra mobile
  • 172.18.0.100 è il client openvpn docker
  • 192.168.11.222 è l'IP privato a cui i client docker possono accedere
  • tun0 è l'interfaccia OpenVPN del client docker
  • eth1 è l'interfaccia di rete 172.18.0.0 del client docker openvpn

Un'ottima risposta ... votata. Si noti come ci siano due problemi da affrontare: (1) garantire che il traffico venga instradato nella posizione corretta e (2) assicurarsi che il software in esecuzione nell'ambiente Docker sia a conoscenza dell'esistenza del percorso. Potrebbe anche essere necessario indicare a OpenVPN come instradare il traffico, utilizzando un ccrfile come se si trattasse di una rete locale. Come per tutto il routing TCP / IP, " tracerouteè il tuo migliore amico, così come è tcpdumpo WireShark".
Mike Robinson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.