状況を説明するために、3台のマシンを定義する必要があります。ローカルネットワーク上に、マシン(LAPTOP)とマシン(SERVER)がそれぞれWANとLANを介してルーターに接続されています。3番目のマシンは外部vps(VPS)です。
明示的なIPアドレスを使用してラップトップからサーバーにSSHで接続しようとしています。これを実現するために、ポート22をリッスンするopensshサーバー(すべてのマシンがUbuntuを実行しています)をセットアップしました。ルーターで、予約済みIPアドレスをSERVERに指定し、着信ポート22のポート転送ルールをSERVERのポート22に追加しました。
動作しているもの:-VPSからサーバーへのSSH-ローカルネットワーク内部のローカルホスト名を使用したラップトップからサーバーへのSSH
動作していないもの:-明示的なIPアドレスを使用してラップトップからサーバーにSSH接続します。
デバッグを試みるために、nmapを実行して、ポートがフィルタリングされているかどうかを確認しました。 VPSとラップトップの両方で次のコマンドを実行しました
nmap -sS -p 22 xx.xx.xx.xx
ここで、xは、ローカルネットワークのルーターの文字通りの外部IPを示します。結果は次のとおりです。
VPS:22/tcp open ssh
ラップトップ:22/tcpフィルター処理されたssh
LAPTOPのローカルホスト名を使用しているかどうかを再確認するために、ポートは正常に開いています。明示的な外部IPを使用しているときにLAPTOPからSSHで接続するときに、ポートがフィルタリングされるのはなぜですか?発信リクエストはルーターによってフィルタリングされていますか?
問題は、ルーターがNAT(iptablesのDNAT
チェーン)の前にポート転送ルール(iptablesのSNAT
チェーン)を適用している可能性があるという事実に起因します。
このstackexchangeの投稿 問題を詳細に説明し、tcpdump
を使用して問題を確認する方法を示します。基本的に、SYN
パケットを外部IPに送信し、SERVER
の内部IPからSYN/ACK
を受信することを確認する必要があります。
編集:修正方法:内部ネットワーク内から外部IPに接続しないでください。 SERVER
の内部IPを直接使用します。