IIS IP Listening (netsh / netstat)

2022-02-16

筆記如何處理 IIS 只回應本機 IP 的連線 (localhost, 127.0.0.1) 但卻不回應 Binding 在站台上的對外 IP;說明如何限制 IIS 只 Listen 本機 IP 而忽略伺服器網路卡上的對外 IP。本次使用 netsh 指令工具來說明與處理。

logo

說明

問題處理

發現網站無法回應的時候,一般根據錯誤訊息來判斷。本次碰到的是無法連上這個網站及網站位址拒絕回應

傷腦筋的錯誤畫面

這個時候應該做的是確認伺服器是否能夠正常服務?

首先使用 Test-NetConnection 測試,發現伺服器是正常服務,同時也可以遠端登入,但 80 及 443 Port 回應失敗。

Test-NetConnection 192.168.112.5              # Works  
Test-NetConnection 192.168.112.5 -port 3389   # Works
Test-NetConnection 192.168.112.5 -port 80     # Fail
Test-NetConnection 192.168.112.5 -port 443    # Fail

遠端登入伺服器後,測試網站在本機是否可以正常連線,發現在本機仍然無法正常連線,使用的網址是 IIS Binding 使用的對外網站名稱,並且有在 DNS 註冊成功。但改使用 DNS 解析後的 IP 仍然是無法連線。

接著改採本機 IP 來連線 (記得 IIS 要綁定本機 IP),使用 localhost (127.0.0.1) 發現網站可以被回應 😮

目前得到的資訊:網站無法被外部連線、在伺服器上使用對外 IP 也無法連線,但使用本機 IP 則可以。


接著確認目前伺服器聆聽中 IP 以及 Port

netstat -aon | findstr "LISTENING"

發現僅有聆聽下列本機 IP,但預期應該是聆聽所有對外 IP

TCP 127.0.0.1:80 0.0.0.0:0 LISTENING

進一步使用 netsh 來確認目前對 IP 的聆聽設定

netsh http show iplisten

顯示如下的結果,參考 John Savill 在 Solve IIS Listener Problems 說明的方式,決定移除掉該設定。

顯示在 IP 接聽清單中的 IP 位址:
-------------------------------------------
127.0.0.1

使用 netsh 來進行移除:

netsh http delete iplisten 127.0.0.1

完成後需要重新啟動 IIS Server 之後再進行測試,網站的對外連線就恢復正常了 😀

iisreset

限制 IIS 對特定 IP 聆聽

如果創造問題的實驗情境或者有限制 IIS 對特定 IP 聆聽的需求,可以使用下列方式加入限制的 Listen IP

netsh http add iplisten 127.0.0.1
netsh http show iplisten
iisreset

並且可以使用 netstat 來確認

netstat -aon | findstr "LISTENING"

心得提取

如果碰到網站連線問題,在確認沒有錯誤訊息問題是指向拒絕連線下,可以先使用 netstat 觀察伺服器對外允許的 IP 及 Port。

netstat -aon | findstr "LISTENING"

參考資料

Solve IIS Listener Problems

相關連結

IIS 筆記整理

IIS 網頁伺服器的安全設定 (IIS Security Configuration)