以下是要求
首先,将本地生成的请求/数据包目标 IP 更改为
localhost
.举个例子172.17.0.1:7199
->
127.0.0.1:7199
然后将此请求/数据包重定向到本地代理端口(例如
socks-proxy
端口/redsocks
12345
端口)
我如何使用iptables
或任何其他工具来做到这一点?
以下是一些更详细的解释。
我有两台服务器server1 - 172.17.0.1
,server2 - 172.17.0.2
。我需要访问来自 的JMX
端口 ( 7199
) 。由于我在 上禁用了远程 JMX ,因此我无法通过 SSH 本地转发访问它(需要使用from访问端口)。所以我创建了 SSHocks 代理并配置它server1
server2
server1
server2
7199
localhost
server2
红袜队工具。运行良好。
# 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:7199
from service2
(例如telnet localhost 7199
),它将连接到 的 JMX 端口(7199
)server1
。 Redsocks 将数据包正确路由到server1
viaocks 代理。
我还有另一个要求。当带有 IP 地址service1
(例如172.17.0.1:7199
)的数据包到来时,我需要将它们重定向到 localhost(127.0.0.1:7199
)。例如,如果我连接172.17.0.1:7199
from 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 地址重定向?