我有一个在 8100 上运行的 Apache 服务器。打开时http://本地主机:8100在浏览器中我们将看到网站正确运行。
现在我想把所有 80 上的请求都转发到 8100,这样就可以不用端口号访问网站了。我对 iptables 不熟悉,所以我在网上搜索了解决方案。这是我尝试过的方法之一:
用户@ubuntu:~$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT 用户@ubuntu:~$ sudo iptables -A INPUT -p tcp --dport 8100 -j ACCEPT 用户@ubuntu:~$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8100
它不起作用。该网站在 8100 上可以工作,但在 80 上却不行。如果使用“iptables -t nat -L -n -v”打印出规则,我看到的是这样的:
用户@ubuntu:~$ sudo iptables -t nat -L -n -v 链 PREROUTING(策略接受 14 个数据包,2142 字节) pkts 字节数 目标 协议 选择加入 退出 源 目标 0 0 重定向 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 重定向端口 8100 链输入(策略接受14个数据包,2142字节) pkts 字节数 目标 协议 选择加入 退出 源 目标 链输出(策略接受 177 个数据包,13171 字节) pkts 字节数 目标 协议 选择加入 退出 源 目标 链 POSTROUTING(策略接受 177 个数据包,13171 字节) pkts 字节数 目标 协议 选择加入 退出 源 目标
操作系统是 VMware 上的 Ubuntu。我以为这应该是一项简单的任务,但我已经为此工作了几个小时却没有成功。 :( 我遗漏了什么?
答案1
尝试:sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8100
答案2
“PREROUTING”链仅适用于从网络接收的流量。如果您想重定向本地生成的流量,则需要使用“OUTPUT”链。
您可能还希望对目标 IP 地址进行一些匹配。
答案3
我会选择
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8100