Comment transférer le port 80 vers un autre port de la samemachine?


39

Comment puis-je transférer les demandes arrivant sur le port 80 vers un autre port de la même machine Linux?

J'avais l'habitude de faire cela en changeant nat.conf, mais cette machine que j'utilise n'a pas de NAT. Quelle est l'alternative?


Pas de NAT, ni de nat.conf? Avez-vous essayé des règles iptables utilisant NAT?
Ben Swinburne

Réponses:


47

Vous pouvez effectuer la redirection avec iptables:

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080


1
Que diriez-vous de Windows Server?
Luc

Oh mec c'est exactement ce que je cherchais, bravo!
Neurosnap

N'a pas fonctionné pour moi au début, mais c'était bien quand j'ai utilisésudo
medisenza

1
que faire si aucune interface eth0? pourquoi ne pas utiliser l'interface de bouclage?
harschware

15

Je viens juste de me trouver dans cette question et je ne pouvais pas trouver un moyen facile. Je ne veux pas installer Nginx sur ma machine pour effectuer ce transfert de port simple.

Rinetdn'a pas fonctionné pour moi, pas de paquet de travail pour ma distribution. Je suis allé à la socatplace. Super simple:

socat TCP-LISTEN:80,fork TCP:127.0.0.1:5000

Doit être exécuté supour pouvoir écouter sur le port 80.


La configuration de Rinetd est plus facile je pense.
johnshen64

socat fonctionne parfaitement!
Viv le

10

Vous devriez envisager d'utiliser un proxy inverse , tel que Nginx . Par exemple, vous pourriez mettre quelque chose comme ceci dans votre nginx.conffichier:

server {
    listen         80;

    server_name    your_ip_address your_server_name

    access_log   /var/log/nginx/your_domain/access.log ;
    error_log    /var/log/nginx/your_domain/error.log info ;

    location / {
        proxy_pass  http://127.0.0.1:3000;   # pass requests to the destination
    }
}

2
Pourquoi? Je ne suis pas nécessairement en désaccord, mais y a-t-il une bonne raison pour laquelle vous ne voudriez pas que cela se produise simplement dans la pile de mise en réseau?
Oli

@Oli Cette méthode de proxy inverse n'affectera pas de nombreux autres hôtes virtuels sur le serveur, ce qui se produirait si iptables le ferait, car iptables ne sait rien des hôtes virtuels.
cendres
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.