一部のポートを使用して到達できる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にない実際のポート転送ホストなど)、確実に機能します。つまり、 -どうしても不可能です。
設計上、達成しようとしていることは不可能です。これを実現する唯一の方法は、ゲートウェイまたはホストマシンにアクセスすることです。 NATデバイスは、インターネット接続を内部ネットワークと共有し、従来のファイアウォールと同様に内部ネットワークを保護するという二重の目的を果たします。
[編集]私は修正された立場です。 IETFは、上記のDavidの応答で概説された仮定を前提として、実際にこれを可能にします。