Redirect port 80 to 8080 and make it work on local machine
Solution 1
You need to use the OUTPUT
chain as the packets meant for the loopback interface do not pass via the PREROUTING
chain. The following should work; run as root
:
iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080
Solution 2
Simple just use iptables allowing both port 80 and 8080 then redirect 80 to 8080 make sure you are assigning to the correct nic.. in example I use 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
Solution 3
This worked for me.
$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Solution 4
Instead of the iptables
, You could try:
sudo ssh -gL 80:127.0.0.1:8080 localhost
Related videos on Youtube
Max
Updated on September 18, 2022Comments
-
Max over 1 year
I redirected traffic for port 80 to 8080 on my machine with
sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080
It works fine for all the world except my own machine. I am a developer and I need to redirect port 80 to 8080 for myself.
My IP is
192.168.0.111
My web server runs on port 8080
I wish to open website from
http://192.168.0.111/
instead ofhttp://192.168.0.111:8080/
from same machine where server runs.-
ma11hew28 over 9 yearsExcuse me for the abberation, but what is the purpose of forwarding port 80 to 8080?
-
Christian about 8 years@mattdipasquale, normal users can't access port 80 so you couldn't run a web service like python flask as a normal user.
-
David Foerster almost 8 yearsWhy don't you just bind the web server to port 80?
-
Pavel K. over 7 yearsi'd guess its because non-root user cannot bind to ports 80/443 and he doesnt want to run his web service as root..
-
-
Max about 10 yearsThat is an option but it is not exactly what I want because I already have web server on port 80. I will prefer to do it with iptables and keep web server on port 80 running. I guess I just have to apply rule to different step instead of
PREROUTING
-
cgseller over 7 yearsYes - this will cause a port conflict if you have something listening that you are port forwarding to as Max suggested. The above answer is the more general case.
-
alper over 6 yearsDoes port 80 required to be gloabally accesible? I tried your solution, my port number 8080 is accessible but 80 is not hence it did not worked. @heemayl
-
diyoda_ about 6 yearsThis did not work, not sure why this is voted up
-
heemayl about 6 years@Diyoda_ Please define did not work.
-
Jerry U about 6 years@Alper I think you didn't read the OPs question.
-
Ahmed Hamdy almost 6 yearsI can confirm that this doesn't work on ubuntu 18.04
-
Christopher Bradshaw over 5 yearsDidn't work for me on Ubuntu 18.10
-
Vladimir Ishenko over 4 yearsThanks! It's working on Ubuntu 19
-
Vladimir Ishenko over 4 yearsAfter would be nice to save iptable changes
sudo apt-get install iptables-persistent
-
hanshenrik over 4 years+1 works for me on Ubuntu 18.04 (at least for TCP), did port 7000->7001 and servers listening on port 7001 received incoming connections from port 7000 :)
-
hanshenrik over 4 yearsmake sure to use the correct network interface tho, it isn't called
eth0
on all systems -
mitchus over 4 yearsI get a "Connection refused" when attempting this solution.
-
M. Volf about 4 yearshow to stop this forwarding? EDIT - FOUND IT: replace -A with -D in that command
-
user3757405 about 4 years@mitchus it sounds like you don't have an SSH service. Try
sudo apt install openssh-server
. -
Nisharg Shah over 3 yearsworks perfectly in 20.04
-
Sunding Wei over 3 yearsnot working on ubuntu 20.04 LTS
-
Sunding Wei over 3 yearsWorks for me on ubuntu 20.04 LTS
-
Dimitar II about 2 yearsProbably we should first enable the port forwarding:
sysctl net.ipv4.ip_forward=1
(orsysctl net.ipv6.conf.all.forwarding=1
). Then make the change persistent, by uncommenting these lines in '/etc/sysctl.conf'.