例えばサーバ構築時、Windows Firewall を有効にしたままアプリケーションを構成するとうまくいかないことがあります。
アプリケーションの前提条件には使用するポートが必ず記載されているはずなので、そのポートを開けてあげればいいんですが、使用するポートが複数あった場合はどれが原因なのかがわかりません。
そのため、以下の2つを確認する必要があります。
- アプリケーションは本当にそのポートで LISTEN しているのか
- LISTENしていたとして、Firewall は開いているのか
それぞれの確認方法を記載します。
ポートが LISTEN しているかを確認
以下のコマンドを実行します。実行後、何か1行でも出力があれば何かしらのサービスがそのポートで待ち受けています。
> netstat -ano | find “ポート番号”
例え Firewall でポートが適切に穴あけされていたとしても、そもそもそのポートで何も待ち受けていなければ何も起きません。
ファイアウォールでポートが穴あけされているか
方法はいくつかあります。以下に2つを紹介します。
ftp を使用する方法
以下のコマンドを実行します。
> ftp
> open IPアドレス ポート番号
もし Firewall で許可されていてそのポートに到達できれば「接続しました」というメッセージが出力されます。
telnet を使用する方法
以下のコマンドを実行します。
> telnet IPアドレス ポート番号
ポートが開いている場合、ブランク スクリーンが表示されます。接続に成功したということです。
ただし、Windows は telnet が標準で有効になっていないため、[プログラムと機能] -[Windows の機能の有効化または無効化] から telnet を有効にする必要があります。面倒なので ftp の方がお勧めです。
Firewall で通信を許可する
塞がっているポートを見つけたら許可してしまえばいいのですが、手動でルールを作る前に「アプリに Windows ファイアウォール経由の通信を許可する」の設定を確認して下さい。通常アプリケーションはインストール時にここにルールが追加されます。
特に注意しないといけないのがプロファイルの違いです。例えばドメインプロファイルでは許可されているがパブリックプロファイルでは拒否されている、みたいな状態はよくあります。アプリをインストールすれば勝手にポートを開けてくれると思い込んでしまわないようにしてください。
例えば Arcserve UDP 7.0 というバックアップソフトの場合、以下のようにドメインプロファイルでは許可されていますが、パブリックプロファイルでは拒否になっています。これを許可するとバックアップジョブが正常に走り出したということがありました。