如何使用 iptables 劫持某个端口的流量

如何使用 iptables 劫持某个端口的流量

我有一个在端口 2000 上监听的应用程序。我想将所有到此端口的流量(源自本地)代理到另一个端口,比如 4000。

现在我正在做类似的事情。

iptables -t nat -A OUTPUT -p tcp --dport 2000 -d 127.0.0.1 -j DNAT --to-destination 127.0.0.1:4000

只要 2000 上没有任何监听,此方法就有效。如果我远程登录到 2000,流量将按预期路由到 4000。但如果 2000 上有监听,流量就不会被劫持/代理。有办法实现这一点吗?

答案1

看起来nc您使用的版本默认使用 IPv6。当您nc监听端口 2000 时,客户端会绕过仅 IPv4 的 DNAT 规则连接到该端口。

当没有任何内容监听端口 2000 时,它仍会尝试使用 IPv6 连接到该端口但会失败,然后回退到 IPv4,DNAT 规则会将其发送到监听端口 4000 的实例。

目前我能想到的最佳解决方案就是为 IPv4 和 IPv6 创建等效规则:

iptables -t nat -A OUTPUT -p tcp --dport 2000 -d 127.0.0.1 -j DNAT --to-destination 127.0.0.1:4000
ip6tables -t nat -I OUTPUT -p tcp --dport 2000 -d ::1 -j DNAT --to-destination '[::1]:4000'

相关内容