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.

  • Débranché la connection lors du renvoi de port sur Cisco 1841
  • Comment get un server Web local à mon ip externe
  • Solution pour configurer le FTP d'un NAS via des ports bloqués
  • Renvoi de port pour Rsync
  • Puis-je transférer vers l'avant un tunnel inversé de ssh inversé
  • Routage du trafic depuis VPN vers différents périphériques réseau
  • Comment configurer mon routeur sous un autre pour éviter les problèmes de NAT?
  • Le service No-IP ddns prend-il un certain time ou ai-je configuré de manière incorrecte?
  • Le renvoi de port à distance ne fonctionne pas
  • Impossible SSH dans une machine virtuelle Vagrant
  • Déboguer le renvoi de port pour utiliser le bloc-notes Jupyter à distance
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.