Renvoi d'un port sur l'interface de bouclage vers un IP / port distant

J'ai deux conteneurs Docker que j'essaie de networking set d'une manière spécifique. Le conteneur A exécute un server Redis sur le port 6379. Le conteneur B exécute un shell interactif et doit accéder à Redis. En utilisant la fonction de binding Docker, un user à l'intérieur du conteneur B peut se connecter à Redis à partir du 10.1.0.2:6379, qui parcourt l'interface eth0 virtuelle configurée par Docker.

Il existe un programme qui fonctionnera dans le conteneur B qui s'attend à ce que Redis soit disponible au port 6379 sur l'interface de bouclage. Supposons que ce programme ne puisse pas être configuré pour pointer vers une adresse IP différente.

J'aimerais transférer le trafic vers 127.0.0.1:6379 vers 10.1.0.2:6379. J'ai essayé plusieurs variantes de règles iptables sur la table NAT, mais je reçois soit la "connection refusée" lorsque je tente de me connecter à l'adresse / port local, soit la connection se raccroche pour toujours. Quelles règles iptables puis-je utiliser pour réaliser cet effet?

Voici l'une des choses que j'ai essayé:

$ sudo iptables -t nat -S -P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A INPUT -d 10.1.0.2/32 -p tcp -m tcp --dport 6379 -j SNAT --to-source 127.0.0.1 -A OUTPUT -p tcp -m tcp --dport 6379 -j DNAT --to-destination 10.1.0.2:6379 

Tenter de se connecter à Redis avec redis-cli utilisant les règles ci-dessus se raccroche pour toujours. J'ai essayé une version de ceci qui utilise PREROUTING / POSTROUTING au lieu de INPUT / OUTPUT et qui a abouti à une "connection" immédiate.

One Solution collect form web for “Renvoi d'un port sur l'interface de bouclage vers un IP / port distant”

J'utiliserais socat pour ça:

 socat TCP-LISTEN:6379,fork TCP:10.1.0.2:6379 

Vous voudrez peut-être utiliser ce superviseur ou un outil similaire. Sur Ubuntu:

 apt-get install socat supervisor cat > /etc/supervisor/conf.d/redis-socat.conf << EOF [program:redis-socat] command = socat TCP-LISTEN:6379,fork TCP:10.1.0.2:6379 autorestart = true user = nobody EOF supervisorctl reload 

Maintenant, vous pouvez démarrer / arrêter le process redis-socat en utilisant:

 supervisorctl start redis-socat supervisorctl stop redis-socat 

Il démarrera également automatiquement au démarrage.

  • IPTables + SSH renvoi de port dynamic = BLOQUÉ
  • Le tunnel SSH (renvoi de port) ralentissent beaucoup mes requêtes mysql
  • Port Forwarding à OpenVPN se connecte une fois puis arrête de se connecter
  • Est-il possible de pointer un sous-domaine sur une adresse de port?
  • Créer une règle NAT et des règles de security pour le port 443/80 sur un Cisco ASA 5510
  • Transférer les ports aux invités dans libvirt / KVM
  • Utilisation du renvoi de port pour se connecter au server distant mysql
  • ssh au réseau local derrière un IP public (transfert TCP)
  • Je ne peux pas accéder à mon server Web local avec l'IP externe
  • Port Forwarding
  • Envoi par port SSH - ne fonctionne plus
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.