web-dev-qa-db-ja.com

NATの背後にあるが、特定のTCPポートを介して到達可能なコンピュータである。

一部のポートを使用して到達できるNATの背後にあるリモートコンピュータの内部IPを取得したい、myhost.farfar.awayポート11122TCPと言います。

C:\>telnet myhost.farfar.away 11122
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2

ご覧のとおり、その上にSSHサーバーがありますが、接続ユーザーデータはありません。

ルートを追跡する(もちろん偽のIP)を試してみると:

C:\>tracert -d myhost.farfar.away

Trace route to address myhost.farfar.away [103.56.5.30]
maximum 30 Hops:

  1    <1 ms    <1 ms    <1 ms  192.168.11.1
  2    <1 ms    <1 ms    <1 ms  192.168.10.1
  3    47 ms    47 ms    47 ms  80.58.67.85
  4    81 ms    86 ms    80 ms  103.56.5.30

Trace route complete.

myhost.farfar.awayにIP 103.56.5.30があることを知っていますが、内部IPを取得するために11122TCPポートがこのマシンにリダイレクトされることがわかったので、このNATを介してkeep hopingを行うことが可能です(NATをバイパス) ?

注:私はその内部IPが172.26.5.5であることを知っているので、理論的には次のようなものに到達したいと思います

  3    47 ms    47 ms    47 ms  80.58.67.85
  4    81 ms    86 ms    80 ms  103.56.5.30
  5   101 ms    106 ms  100 ms  172.26.5.5

もちろんnetstatでも同じ結果になります。

私はtcpdumpをテストしましたが、自分のコンピューターに入る接続に関する情報しか提供できないと思うので、リモートマシンでこの行を実行するとうまくいきます。

tcpdump -i any port 11122

しかし、それはローカルの「スキャン」コンピュータで実行できますか? WindowsとLinuxの両方を使用できます。

@vahidに同意しないでください。 NATと、接続がポート転送されているホストとの間に複数のホップがある場合、実際にはICMP TIMEXメッセージを引き出すことができる場合があります。

ご存知かもしれませんが、すべてのIPv4パケットには1バイトのTTLフィールドがあります。NAT(たとえば10ホップ)までの距離を特定すると、ホストは実際には12ホップ(またはそれ以上)離れています。NAT TTL値が11のポート転送ポートにSYNを送信できます。 (リバースプロキシとして機能するのではなく)単にアドレスを書き換えている場合、TTLはunmolestedになります。これは、TTL = NATヘッディングインバウンドは1になります。次のルーターはデクリメントしてゼロになり、ICMP存続可能時間超過(TIMEX)メッセージが送信者に返されます。

アウトバウンドパケットはNAT処理されますが、すべてのICMPエラーメッセージ(これは1つです)には、その中に埋め込まれたプロトコルヘッダーが含まれます。つまり、元のNAT解除された宛先ホストは、エラーで返される埋め込みIPヘッダーとしてICMPペイロードに表示されるようになります。

この手法が成功するには非常に具体的な要件があることは確かですが(ICMPが送信を許可している、NATのローカルLANにない実際のポート転送ホストなど)、確実に機能します。つまり、 -どうしても不可能です。

7
David Hoelzer

設計上、達成しようとしていることは不可能です。これを実現する唯一の方法は、ゲートウェイまたはホストマシンにアクセスすることです。 NATデバイスは、インターネット接続を内部ネットワークと共有し、従来のファイアウォールと同様に内部ネットワークを保護するという二重の目的を果たします。

[編集]私は修正された立場です。 IETFは、上記のDavidの応答で概説された仮定を前提として、実際にこれを可能にします。

2
Vahid