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マシンへのポート転送を行うように設定されています。
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)
唯一目立つのは、「前のセグメントがキャプチャされていません」というメッセージが継続的に表示されることです(そうではありませんでしたか?そこにあるようです)。クライアントからのシーケンス番号は本当に決定論的です。 (ランダムなポイントから開始し、そこからインクリメントすることになっているのではありませんか?)
私のコメントで言ったように。 LAN内でパブリックIPを使用できるようにするには、NAT Loopback
またはNAT hairpinning
とも呼ばれるNAT reflection
と呼ばれるものが必要です。
あなたはそれについて読むことができます ここ
私がインターネットで見つけることができる限り、あなたの作品は...うーん...「SMCネットワークSMCD3G」は「NATループバック」をサポートしていません。
2つのオプションがあります。
ホストファイルに10.1.10.201 fake_or_real_hostname
行を追加できます。ssh me@fake_or_real_hostname
のように接続できます。
独自のローカルDNSサーバーを実行できます。 ここ いくつかの説明です。
非ローカルドメインのOpenDNSに再帰する独自のローカルDNSサーバーを実行し、外部ホスト名をそのホストのLAN IPに解決するローカルDNSAおよびPTRレコードを使用してゾーンを作成することで、同じ問題を解決しました。
どちらの場合も、IPの代わりにホスト名を使用するのが最善です。パブリックIPが大幅に変更された場合は、動的ホスト名サービスを使用してホスト名(myname.dyndns.orgなど)を取得できます。覚えやすいです。また、オプション1を選択した場合は、hostsファイルにこの名前を追加できます。
これらのいくつかは次のとおりです。
DynDNS
FreeDNS
ZoneEdit
No-Ip
私のモデムには、IPの変更をこれらのサービスに自動的に登録するオプションがあります。 IPの変更を公開したときに更新できるデスクトップユーティリティもあります。
あなたが欲しいものは時々呼ばれます ルーターヘアピニング
ルーターがこれをサポートしているかどうか、ルーターの名前、構成方法は、ルーターのメーカーとモデルによって異なります(現在質問されていない情報)。
同じ問題の別の解決策は、 split-horizon DNS を使用し、サーバーを名前で参照することです。ただし、現在、すべてのDHCP + DNSを実行するために一般的なSOHOルーターに依存している場合、これを設定するのは簡単ではありません。
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.201
&a.b.c.d
)しかし、代わりに(10.1.10.201
&10.1.10.11
)があります。ルーターは必要なジョブの半分しか実行していません。
サーバーへの接続は(10.1.10.201
&10.1.10.11
)です。クライアントにとっては、(10.1.10.201
&a.b.c.d
)¹です。クライアントが(10.1.10.201
&10.1.10.11
)のSYN/ACKを取得すると、OSは(当然のことながら)RSTを送信します— that接続の知識がありません。
¹接続を決定する際にはポート番号が重要ですが、簡単にするためにポート番号は省略しています。