iptables端口redirect不适用于本地主机

我想redirect从端口443到内部端口8080的所有stream量。我使用iptables的这个configuration:

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

这适用于所有外部客户。 但是,如果我试图从同一个maschine访问端口443,我会得到一个连接拒绝错误。

 wget https://localhost 

如何扩展iptables规则来redirect本地stream量?

    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 

    要将数据包从本地主机redirect到另一台计算机,规则如下:

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

    将工作,但你也需要在内核中启用这个选项:

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

    没有内核设置它不会工作。

    这个怎么样?

    iptables -t nat -A OUTPUT -d 127.0.0.1 -p tcp –dport 443 -j REDIRECT – 到端口8080

    你说你得到连接拒绝错误。 这意味着在您尝试连接的端口上没有本地进程正在侦听! 要检查侦听进程,请使用以下命令:

     $ sudo netstat -lnp | grep 8080 

    应用规则后,您应该有一个进程在8080端口上侦听以进行连接。

    看来你应该有以下规则:

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

    请记住,您正在从本地主机发送。 所以,你需要redirect输出包。