我想将所有流量从端口 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”> / proc / sys / net / ipv4 / ip_forward
- 在 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