我把 next.js 網站架在 win10 的 WSL2 內,可以用localhost:3000
瀏覽,為了讓對外 ip 可以連到 WSL2 的網站,一開始是使用 IIS + Url Rewrite + Application Request Routing,中華電信的路由器 NAT 設為 10030 連接埠(外部)對應到 80 連接埠(內部),在 WSL2 自動建立監聽127.0.0.1:3000
的時候可以從外部 ip 連到網站
然後過了幾天,不知道什麼原因 WSL2 不再監聽127.0.0.1:3000
,而是變成監聽[::1]:3000
後就沒辦法使用對外 ip 連到網站了
目前變通的作法是移除 IIS,改成使用
netsh interface portproxy add v4tov6 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=[::1]
跟
netsh interface portproxy add v4tov6 listenport=10032 listenaddress=0.0.0.0 connectport=3000 connectaddress=[::1]
就能成功從外部 ip 連到 WSL2 內的網站
上面的內部listenport=3000
跟listenport=10032
都已經有使用 NAT 與對外的連接埠進行對應
雖然省事許多,但唯獨
netsh interface portproxy add v4tov6 listenport=80 listenaddress=0.0.0.0 connectport=3000 connectaddress=[::1]
不能從對外 ip 連到網站
我使用netstat -aon | findstr "LISTENING"
查看0.0.0.0:80
跟 0.0.0.0:3000
跟 0.0.0.0:10032
都是同一個 PID 在監聽,在工作管理員裡面這個 PID 的處理程序名稱是服務主機: IP HELPER
,代表這三個內部連接埠應該都能從外部 IP 連到才對,但只有 3000 跟 10032 內部連接埠所對應的對外連接埠可以成功連上網站,80 內部連接埠所對應的對外連接埠就連不上網站
使用 Firefox 無法連上網站出現的訊息是連線已逾時,伺服器 [對外IP] 花了太久時間還是無回應
,Edge 則是嗯...無法連線到此頁面[對外IP] 的回應時間過長
想請教即使有 IP HELPER 監聽0.0.0.0:80
,也已經在路由器將對外連接埠與 80 連接埠對應,卻無法像其他被監聽的內部連接埠一樣成功轉發封包的原因可能有哪些呢?
或是有人知道要怎麼避免讓 WSL2 從原本監聽的127.0.0.1:3000
自動跳去監聽[::1]:3000
嗎?以及讓 WSL 2 從監聽[::1]:3000
改回監聽127.0.0.1:3000
的方法嗎?