web-dev-qa-db-ja.com

ドメイン名を介してSSHポート22に接続しますが、パブリックIPアドレスは使用しません

特定のIPアドレスからのみSSH接続を内部サーバーにポートフォワードするように構成されたDraytekルーターがあります。クライアントと私は、ルーターのパブリック静的IPアドレスに接続できず、ドメイン名にのみ接続できる場合を除いて、外部から正常に接続できます。 router.domain.comルーターにドメイン名を割り当てる必要がありますか?なぜ彼らはドメイン名にしか接続できず、IPには接続できないのかよくわかりません-アドバイスをいただければ幸いです

2
Squid_Vicious

質問の限られた情報に基づいて、ホスト名を使用した接続が機能する理由を確実に言うことはできませんが、IPアドレスを使用してまったく同じサーバーに接続することは機能しません。

ただし、最も可能性の高い説明は、クライアントがサーバーに接続するためにDNS64 + NAT64に依存していることだと思います。 IPv4アドレスがなくなったため、さまざまな種類のCGNソリューションの展開が一般的になりました。そのうちの1つはDNS64 + NAT64であり、クライアントがIPアドレスでIPv4サーバーに接続できないという制限があります。

このようなクライアントがIPv4のみのサーバーに接続すると、次のようになります。

  • クライアントはserver.example.comのAAAAクエリを送信します
  • DNS64サーバーはserver.example.comのAAAAクエリを送信します
  • 権限のあるサーバーはNOANSWERを送信します。
  • DNS64サーバーはserver.example.comのクエリを送信します
  • 権限のあるサーバーは192.0.2.1で応答します
  • DNS64は192.0.2.164:ff9b::192.0.2.1に変換します
  • クライアントはアドレス64:ff9b::192.0.2.1でNAT64に接続します
  • NAT64は64:ff9b::192.0.2.1192.0.2.1に変換します

クライアントがOpenSSHの場合、クライアント側でssh -vを使用して、接続先のIPアドレスを確認できます。サーバーがIPv4のみであり、ホスト名が指定されたときにクライアントがIPv6アドレスに接続する場合、クライアントがDNS64 + NAT64に依存していることがわかります。

NAT64が原因でIPアドレスに接続できない場合に考えられる緩和策:

  • サーバーでIPv6を有効にし、現在のAレコードと一緒にAAAAレコードを作成します。これで、クライアントはサーバーのIPv6アドレスに直接接続できます。これは、クライアントがホスト名による接続を使用し続ける場合でも、NAT64への依存関係を削除するため、推奨される方法です。
  • そのままにしておきます。サーバーのホスト名を使用した接続が機能するとおっしゃいました。したがって、DNS64 + NAT64は意図したとおりに機能しており、すぐに何かを変更する必要はありません。ほとんどの場合、ホスト名を使用した接続は、IPアドレスに直接接続するよりも優れた方法であると考えられているため、ホスト名の使用を停止する本当の理由はありません。
  • クライアントにホスト名を使用して1回接続させ、DNS64がマップされたIPv6アドレスを学習してから、このIPv6アドレスを使用してNAT64を介して接続を続けます。 (動作しますが、少しばかげているようです)
  • クライアントにNAT464を使用してもらいます。これは、クライアントソフトウェアがIPv4のみをサポートしているが、クライアントがIPv6のみのアクセスネットワークに接続されている場合を対象としたソリューションです。ただし、ホスト名による接続がすでに機能している場合は、NAT464は必要ないため、他のソリューションのいずれかを使用することをお勧めします。
2
kasperd