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?

Nohsib
la source
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
Thomas Vincent
la source
+1
Alexander Pogrebnyak
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.

alfetopito
la source
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
    }
}
Tilo
la source
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