以下是要求
首先,將本地產生的請求/封包目標 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 位址重新導向?