将端口80重定向到8080,并使其在本地计算机上工作


61

我将计算机上端口80的流量重定向到8080

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

除我自己的机器外,它对全世界都适用。我是一名开发人员,我需要自己将端口80重定向到8080。

我的IP是 192.168.0.111

我的Web服务器在端口8080上运行

我希望从运行服务器的同一台计算机上http://192.168.0.111/而不是http://192.168.0.111:8080/从同一台计算机上打开网站。


对不起,请问将端口80转发到8080的目的是什么?
ma11hew28

2
@mattdipasquale,普通用户无法访问端口80,因此您不能以普通用户身份运行python flask之类的Web服务。
基督教徒

为什么不将Web服务器仅绑定到端口80?
David Foerster

5
我猜它是因为非root用户无法绑定到端口80/443和他不希望运行自己的网络服务为根..
帕维尔K.

Answers:


79

您需要使用OUTPUT链,因为用于回送接口的数据包不会通过PREROUTING链传递。以下应该工作;运行为root

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

1
端口80是否必须是全球通用的?我尝试了您的解决方案,我的端口号8080是可访问的,但80无法访问,因此它没有用。@heemayl
alper

2
这行不通,不确定为什么要投票通过
diyoda_

@Diyoda_请定义无效
heemayl

3
我可以确认这不适用于ubuntu 18.04
Ahmed Hamdy

2
在Ubuntu 18.10上对我不起作用
Christopher Bradshaw

6

只需使用允许端口80和8080都使用的iptables,然后将80重定向到8080即可确保您分配给了正确的NIC。在示例中,我使用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

谢谢!它正在Ubuntu 19上运行
Vladimir Ishenko于

1
之后,可以很好地保存iptable更改sudo apt-get install iptables-persistent
Vladimir Ishenko

6

这对我有用。

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

+1在Ubuntu 18.04(至少对于TCP)上为我工作,端口7000-> 7001以及侦听端口7001的服务器是否从端口7000接收了传入连接:)
hanshenrik

1
确保使用正确的网络接口,并非eth0在所有系统上都使用它
hanshenrik

4

除了iptables,您可以尝试: sudo ssh -gL 80:127.0.0.1:8080 localhost


2
这是一个选项,但这并不是我想要的,因为我已经在端口80上安装了Web服务器。我将更喜欢使用iptables来保持Web服务器在端口80上运行。我想我只需要将规则应用于其他步骤即可,而不是PREROUTING
2014年

是的-如果您正在监听某些内容(如Max建议的那样),则这将导致端口冲突。上面的答案是更一般的情况。
cgseller

尝试此解决方案时,我收到“拒绝连接”的提示。
mitchus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.