Transférer un Localhost: Port vers un ExternalIP: NewPort

Nous avons une application en cours d'exécution sur notre server Linux. À partir de cette application, lorsque nous essayons d'accéder à localhost (127.0.0.1): localport, il doit être transféré vers une adresse IP externe. Les users essaieront d'accéder à l'hôte local sur un certain port qui sera automatiquement transféré. Je lis sur la table nat iptables, mais PREROUTING et POSTROUTING ne seront pas applicables si je suis juste depuis que j'accède à un port sur localhost de localhost lui-même qui ne touche pas du tout l'interface réseau. Vous vous requestz si la table OUTPUT peut être utile, mais lorsque j'ai essayé certaines combinaisons, cela n'a pas fonctionné. Est-ce que j'utilise la bonne chose ou n'est-il pas possible de le faire?

Quelqu'un peut me diriger dans la bonne direction?

J'ai pensé à le faire moi-même.

2 règles et un drapeau devrait être défini pour atteindre cet objective.

Exemple utilisé ici pour "telnet localhost XXXX", devrait transmettre les packages à Ext.er.nal.IP: YYYY.

sysctl -w net.ipv4.conf.all.route_localnet = 1

Ce drapeau n'existe malheureusement que sur les tout derniers kernelx linux et n'est pas disponible sur un ancien kernel (il n'y a pas de drapeau alternatif aussi dans l'ancien kernel). Je ne suis pas sûr de quel kernel exact est le drapeau disponible. Je crois qu'il est disponible sur les versions du kernel 3.XX. Ce drapeau doit considérer les adresses de bouclage comme une source ou une adresse de destination appropriée. Source: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

iptables -t nat -A OUTPUT -p tcp –port XXXX -j DNAT –to-destination Ext.er.nal.IP: YYYY

La command ci-dessus va modifier les packages qui est à localhost: XXXX avec l'IP de destination comme Ext.er.nal.IP: AAAA

iptables -t nat -A POSTROUTING -j MASQUERADE

La command modifiera l'IP source en tant qu'IP publique de votre machine.

Vous pouvez rendre vos règles un peu plus ssortingctes en ajoutant des adresses IP et des interfaces source et destination appropriées en utilisant -s, -d, -i et -o. Voir "man iptables".

Merci à John WH Smith et Wurtel. Les suggestions ont été très utiles.

La façon la plus simple d'y parvenir est d'installer netcat et inetd (Debian a ceci dans openbsd-inetd ).

Ajoutez une ligne à /etc/inetd.conf :

 127.0.0.1:1234 stream tcp nowait root /bin/nc nc ex.ter.nal.ip 1234 

Remplacez le 1234 par le numéro de port réel et ex.ter.nal.ip par l'adresse IP externe réelle. Vous devrez peut-être append .1000 ou un plus grand nombre à l'option nowait si plus de 128 connections par minute doivent être effectuées; ceci afin d'éviter que des connections fugitives ne chargent votre système inutilement.

J'ai aussi -q 4 -w 10 comme options nc que cela aide dans ma situation, mais vous pourriez ne pas en avoir besoin.

Rechargez inetd après avoir modifié le file inetd.conf .

Faire cela de cette façon utilise nc commencé par inetd comme un process de relais, ce qui fonctionne très bien.