IIS IP Listening (netsh / netstat)
2022-02-16
筆記如何處理 IIS 只回應本機 IP 的連線 (localhost, 127.0.0.1) 但卻不回應 Binding 在站台上的對外 IP;說明如何限制 IIS 只 Listen 本機 IP 而忽略伺服器網路卡上的對外 IP。本次使用 netsh
指令工具來說明與處理。
說明
問題處理
發現網站無法回應的時候,一般根據錯誤訊息來判斷。本次碰到的是無法連上這個網站及網站位址拒絕回應。
這個時候應該做的是確認伺服器是否能夠正常服務?
首先使用 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"