iptables 端口重定向不适用于本地主机

iptables 端口重定向不适用于本地主机

我想将所有流量从端口 443 重定向到内部端口 8080。我对 iptables 使用以下配置:

iptables -t nat -I PREROUTING --source 0/0 --destination 0/0 -p tcp \
         --dport 443 -j REDIRECT --to-ports 8080

这适用于所有外部客户端。但如果我尝试从同一台机器访问端口 443,则会收到连接被拒绝错误。

wget https://localhost

我如何扩展 iptables 规则以重定向本地流量?

答案1

由于环回接口不使用 PREROUTING,因此还需要添加 OUTPUT 规则:

iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8080
iptables -t nat -I OUTPUT -p tcp -o lo --dport 443 -j REDIRECT --to-ports 8080

答案2

要将数据包从本地主机重定向到另一台机器,规则如下:

 iptables -t nat -A OUTPUT -o lo -d 127.0.0.1 -p tcp --dport 443 -j DNAT  --to-destination 10.x.y.z:port

可以工作,但是您还需要在内核中启用此选项:

sysctl -w net.ipv4.conf.all.route_localnet=1

如果没有该内核设置它将无法工作。

答案3

这个怎么样?

iptables -t nat -A OUTPUT -d 127.0.0.1 -p tcp --dport 443 -j REDIRECT --to-port 8080

答案4

我也发现了这个问题。尝试了所有这些方法后仍然不起作用

  1. 回显“ 1”> / proc / sys / net / ipv4 / ip_forward
  2. 在 iptables 中使用“OUTPUT”进行本地主机重定向

终于找到原因了!因为iptables里的REDIRECT总是REDIRECT到localhost,而不是eth0或者其他网络设备。所以请求会被重定向到localhost,如果你的服务器绑定了eth0,就没有办法接收。

您还应该添加此行:

iptables -t nat -A OUTPUT -p tcp -d 0.0.0.0 --dport 443 -j DNAT --to-destination 0.0.0.0:8080

相关内容