将数据包的目标 IP 更改为 localhost 并将其重定向到另一个端口

将数据包的目标 IP 更改为 localhost 并将其重定向到另一个端口

以下是要求

  1. 首先,将本地生成的请求/数据包目标 IP 更改为localhost.举个例子172.17.0.1:7199 -> 127.0.0.1:7199 

  2. 然后将此请求/数据包重定向到本地代理端口(例如socks-proxy端口/redsocks 12345端口) 

我如何使用iptables或任何其他工具来做到这一点?


以下是一些更详细的解释。

我有两台服务器server1 - 172.17.0.1server2 - 172.17.0.2。我需要访问来自 的JMX端口 ( 7199) 。由于我在 上禁用了远程 JMX ,因此我无法通过 SSH 本地转发访问它(需要使用from访问端口)。所以我创建了 SSHocks 代理并配置它server1server2server1server27199localhostserver2红袜队工具。运行良好。

# run socks proxy from service2
ssh -v -N -D 9999 [email protected]

# configure socks proxy with Redsocks in service2
redsocks {
    // redsocks listening port
    local_ip = 127.0.0.1;
    local_port = 12345;

    // socks proxy 
    ip = 127.0.0.1;
    port = 9999;

    type = socks5;
}

# configure iptable rules to route the packets to Redsocks in service2
sudo iptables -t nat -N REDSOCKS
sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
sudo iptables -t nat -A OUTPUT -p tcp --dport 7199 -j REDSOCKS
sudo iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner <user id> -j REDSOCKS

现在,如果我连接到127.0.0.1:7199from service2(例如telnet localhost 7199),它将连接到 的 JMX 端口(7199server1。 Redsocks 将数据包正确路由到server1viaocks 代理。 

我还有另一个要求。当带有 IP 地址service1(例如172.17.0.1:7199)的数据包到来时,我需要将它们重定向到 localhost(127.0.0.1:7199)。例如,如果我连接172.17.0.1:7199from service2,我需要将其重定向到,127.0.0.1:7199以便service1通过袜子代理访问 JMX 端口。通常可以使用以下 iptables规则之一来完成 IP 地址重定向。由于存在其他iptables规则(与红袜相关),因此它不起作用。

# redirect with host
iptables -t nat -A OUTPUT -p tcp -d 172.17.0.1 -j DNAT --to-destination 127.0.0.1

# redirect with host and port
iptables -t nat -A OUTPUT -p tcp -d 172.17.0.1 --dport 7199 -j DNAT --to-destination 127.0.0.1:7199

localhost在这种情况下如何进行 IP 地址重定向?

相关内容