我想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输出包。