パケットの宛先IPをlocalhostに変更し、別のポートにリダイレクトします。

パケットの宛先IPをlocalhostに変更し、別のポートにリダイレクトします。

要件は次のとおりです

  1. まず、ローカルで生成されたリクエスト/パケットの宛先IPを に変更しますlocalhost。例:172.17.0.1:7199 -> 127.0.0.1:7199 

  2. 次に、このリクエスト/パケットをローカルプロキシポート(例:socks-proxyport/ redsocks 12345port) にリダイレクトします。

iptablesまたは他のツールを使用してこれを行うにはどうすればよいですか?


以下にさらに詳しい説明を記します。

2台のサーバーがありますserver1 - 172.17.0.1。から のポート ( )server2 - 172.17.0.2にアクセスする必要があります。 でリモートJMXを無効にしているため、SSHローカル転送経由ではアクセスできません(からでポートにアクセスする必要があります)。そこで、SSH socksプロキシを作成し、次のように設定しました。JMX7199server1server2server1server27199localhostserver2レッドソックスツール。正常に動作しています。

# 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ここで、からservice2(例: )に接続すると、のtelnet localhost 7199JMX ポート ( 7199)に接続されます。Redsocks は、SOCKS プロキシ経由で server1パケットを に正しくルーティングします。server1

別の要件があります。 の IP アドレスservice1(例172.17.0.1:7199) を持つパケットが到着した場合、それらを localhost( 127.0.0.1:7199) にリダイレクトする必要があります。 たとえば、172.17.0.1:7199からで接続する場合、SOCKS プロキシ経由での JMX ポートにアクセスするには、service2にリダイレクトする必要があります。 通常、IP アドレスのリダイレクトは、次のいずれかのルールで実行できます 。 他のルールが存在するため(Redsocks に関連)、機能しません。127.0.0.1:7199service1iptablesiptables

# 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

このシナリオでは、 IP アドレスのリダイレクトはどのようにlocalhost実行できますか?

関連情報