web-dev-qa-db-ja.com

WAN IPアドレスを使用してSSHサーバーに接続できません

NATルーターの背後にSSHサーバーがあります。SSHサーバーと同じ(NATされた)ネットワーク上のマシンは、LAN IPを使用してのみSSHサーバーに接続できます。 WAN IP。なぜですか?

私のネットワークは次のようになります。

(the Internet, via Comcast)
      |
      | (cable line)
  comcast modem. ← External IP of a.b.c.d,
      |            internal IP of 10.1.10.1 on 10.1.10.0/24
      |
      |
   box running sshd  (10.1.10.201)

NATを実行するComcastルーターの背後でSSHサービスを実行しています。上記で取得したIPアドレスを使用すると、インターネット上のどこからでもssh me@«that IP»を実行でき、SSHサービスを利用できます。ルーター内の10.1.10.0/24ネットワーク内から同じコマンドを実行すると、接続がタイムアウトします。

Comcastルーターは、標準ポートでSSHマシンへのポート転送を行うように設定されています。

  • Comcastルーターは、内部IPと外部IPの両方でpingに応答します。
  • sshdを実行しているボックスがpingに応答します

デバイスは ポンコツ SMCネットワークSMCD3G。

ssh 10.1.10.201を試行しながら、sshdマシンでwiresharkを実行すると、通常のトラフィックが得られます。 ssh a.b.c.dを試行すると、次のようになります。

Source       Destination  Info
10.1.10.11   10.1.10.201  39946 > ssh [SYN] Seq=0 Win=14600 Len=0 MSS=1460
10.1.10.201  10.1.10.11   ssh > 39946 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0
10.1.10.11   10.1.10.201  39946 > ssh [RST] Seq=1 Win=0 Len=0

10.1.10.11     10.1.10.201  39946 > ssh [SYN] Seq=0 Win=14600 Len=0 MSS=1460
10.1.10.201  10.1.10.11   [TCP Previous segment lost] ssh > 39946 [SYN, ACK] Seq=46941561
10.1.10.11   10.1.10.201  39946 > ssh [RST] Seq=1 Win=0 Len=0

(the last three lines repeat)

パケットはそこに到達しているように見えますが、接続マシンはRSTを送信しています。どうして?

クライアント側(SSHを実行しているマシン)からは、後の試行は次のようになりました。

Source       Destination  Info
10.1.10.11   a.b.c.d      40212 > ssh [SYN] Seq=0 Win=14600 Len=0 MSS=1460
10.1.10.201  10.1.10.11   ssh > 40212 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460
10.1.10.11   10.1.10.201  40212 > ssh [RST] Seq=1 Win=0 Len=0

10.1.10.11   a.b.c.d      [TCP Retransmission] 40212 > ssh [SYN] Seq=0 Win=14600 Len=0 MSS=1460
10.1.10.201  10.1.10.11   [TCP Previous segment not captured] ssh > 40212 [SYN, ACK] Seq=15635206
10.1.10.11   10.1.10.201  40212 > ssh [RST] Seq=1 Win=0 Len = 0

(the last three lines repeat)

唯一目立つのは、「前のセグメントがキャプチャされていません」というメッセージが継続的に表示されることです(そうではありませんでしたか?そこにあるようです)。クライアントからのシーケンス番号は本当に決定論的です。 (ランダムなポイントから開始し、そこからインクリメントすることになっているのではありませんか?)

5
Thanatos

私のコメントで言ったように。 LAN内でパブリックIPを使用できるようにするには、NAT LoopbackまたはNAT hairpinningとも呼ばれるNAT reflectionと呼ばれるものが必要です。

あなたはそれについて読むことができます ここ

私がインターネットで見つけることができる限り、あなたの作品は...うーん...「SMCネットワークSMCD3G」は「NATループバック」をサポートしていません。

2つのオプションがあります。

  1. ホストファイルに10.1.10.201 fake_or_real_hostname行を追加できます。
    ssh me@fake_or_real_hostnameのように接続できます。

  2. 独自のローカルDNSサーバーを実行できます。 ここ いくつかの説明です。

非ローカルドメインのOpenDNSに再帰する独自のローカルDNSサーバーを実行し、外部ホスト名をそのホストのLAN IPに解決するローカルDNSAおよびPTRレコードを使用してゾーンを作成することで、同じ問題を解決しました。


どちらの場合も、IPの代わりにホスト名を使用するのが最善です。パブリックIPが大幅に変更された場合は、動的ホスト名サービスを使用してホスト名(myname.dyndns.orgなど)を取得できます。覚えやすいです。また、オプション1を選択した場合は、hostsファイルにこの名前を追加できます。

これらのいくつかは次のとおりです。
DynDNS
FreeDNS
ZoneEdit
No-Ip

私のモデムには、IPの変更をこれらのサービスに自動的に登録するオプションがあります。 IPの変更を公開したときに更新できるデスクトップユーティリティもあります。

3
Rik

あなたが欲しいものは時々呼ばれます ルーターヘアピニング

ルーターがこれをサポートしているかどうか、ルーターの名前、構成方法は、ルーターのメーカーとモデルによって異なります(現在質問されていない情報)。


同じ問題の別の解決策は、 split-horizo​​n DNS を使用し、サーバーを名前で参照することです。ただし、現在、すべてのDHCP + DNSを実行するために一般的なSOHOルーターに依存している場合、これを設定するのは簡単ではありません。

0
RedGrittyBrick

Rikの答えに追加すると、私の特定の問題はここにあります。それは部分的に正しいことをしているだけであり、最終的にはNATを台無しにしています。

10.1.10.11   a.b.c.d      40212 > ssh [SYN] Seq=0 Win=14600 Len=0 MSS=1460
10.1.10.201  10.1.10.11   ssh > 40212 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460
10.1.10.11   10.1.10.201  40212 > ssh [RST] Seq=1 Win=0 Len=0

ここでの接続に注意してください。まず、10.1.10.11(sshクライアント、これは正常です)からa.b.c.d(これも正常)へのSYN(予想)が表示されます。ただし、サーバーはこれを10.1.10.11 → 10.1.10.201として受け取ります。宛先IPはルーターに置き換えられました、NATファッション、正しいです。ただし、送信元IPは置き換えられませんでした。ここで、接続が必要です(10.1.10.201a.b.c.d)しかし、代わりに(10.1.10.20110.1.10.11)があります。ルーターは必要なジョブの半分しか実行していません。

サーバーへの接続は(10.1.10.20110.1.10.11)です。クライアントにとっては、(10.1.10.201a.b.c.d)¹です。クライアントが(10.1.10.20110.1.10.11)のSYN/ACKを取得すると、OSは(当然のことながら)RSTを送信します— that接続の知識がありません。

¹接続を決定する際にはポート番号が重要ですが、簡単にするためにポート番号は省略しています。

0
Thanatos