Rediriger le port 80 vers 8080 et le faire fonctionner sur une machine locale


61

J'ai redirigé le trafic des ports 80 à 8080 sur ma machine avec

sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080

Cela fonctionne bien pour tout le monde sauf ma propre machine. Je suis un développeur et je dois rediriger le port 80 vers 8080.

Mon adresse IP est 192.168.0.111

Mon serveur Web fonctionne sur le port 8080

Je souhaite ouvrir un site Web à la http://192.168.0.111/place de la http://192.168.0.111:8080/même machine sur laquelle le serveur est exécuté.


Excusez-moi pour l'abberation, mais quel est le but de la transmission du port 80 à 8080?
ma11hew28

2
@mattdipasquale, les utilisateurs normaux ne peuvent pas accéder au port 80, vous ne pouvez donc pas exécuter un service Web tel que flacon python en tant qu'utilisateur normal.
Christian

Pourquoi ne pas simplement lier le serveur Web au port 80?
David Foerster

5
Je suppose que c'est parce que l'utilisateur non root ne peut pas se lier aux ports 80/443 et il ne veut pas exécuter son service Web en tant que root.
Pavel K.

Réponses:


80

Vous devez utiliser la OUTPUTchaîne car les paquets destinés à l' interface de bouclage ne passent pas par la PREROUTINGchaîne. Ce qui suit devrait fonctionner. exécuter comme root:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080

1
Le port 80 doit-il être accessible de manière globale? J'ai essayé votre solution, mon numéro de port 8080 est accessible mais 80 n'est pas, donc cela n'a pas fonctionné. @heemayl
alper

2
Cela n'a pas fonctionné,
je

@Diyoda_ Veuillez définir n'a pas fonctionné .
Heemayl

3
Je peux confirmer que cela ne fonctionne pas sur Ubuntu. 18.04
Ahmed Hamdy

2
N'a pas fonctionné pour moi sur Ubuntu 18.10
Christopher Bradshaw le

6

Il suffit d'utiliser iptables en autorisant les ports 80 et 8080, puis de rediriger 80 à 8080, en s'assurant que vous attribuez le bon nic. Dans l'exemple, j'utilise eth0

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

Merci! Il travaille sur Ubuntu 19
Vladimir Ishenko

1
Après, ce serait bien de sauver les changements sudo apt-get install iptables-persistent
iptables

6

Cela a fonctionné pour moi.

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

+1 fonctionne pour moi sur Ubuntu 18.04 (au moins pour TCP), le port 7000-> 7001 et les serveurs écoutant sur le port 7001 ont-ils reçu des connexions entrantes depuis le port 7000 :)
hanshenrik

1
Assurez-vous d'utiliser la bonne interface réseau, elle ne s'appelle pas eth0sur tous les systèmes
hanshenrik

4

Au lieu de iptables, vous pouvez essayer: sudo ssh -gL 80:127.0.0.1:8080 localhost


2
C'est une option, mais ce n'est pas exactement ce que je veux car j'ai déjà un serveur Web sur le port 80. Je préférerais le faire avec iptables et garder le serveur Web sur le port 80 en cours d'exécution. Je suppose que je dois juste appliquer la règle à une étape différente au lieu dePREROUTING
Max

Oui. Cela entraînera un conflit de ports si vous avez une écoute vers laquelle vous redirigez les ports, comme le suggère Max. La réponse ci-dessus est le cas plus général.
cgseller

Je reçois une "connexion refusée" lors de la tentative de cette solution.
Mitchell
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.