我想创建一个小型 Web 应用程序,供本地网络之外的计算机(路由器另一侧)访问。几天来我一直在寻找解决方案,也浏览了问题和答案,但都无济于事。
为了实现这一点,我决定使用端口转发功能。然而,尽管我认为所有设置都正确,但不知何故它不起作用。奇怪的是,当我从给定本地网络内的另一台设备访问给定计算机/应用程序时,端口转发可以正常工作。当我尝试从本地网络外访问时,问题就出现了。
我正在使用188.2.XX.XX:9999
(WAN IPv4 地址绑定到端口 9999)。没有响应(无限等待 - ERR_CONNECTION_TIMED_OUT
)。
我迄今所做的事情:
- 我检查了我的 ISP 是否使用 CGNAT - 考虑到 WAN 地址和我使用“whatismyipaddress”获得的地址相同,我认为没有
- 我检查了
ipconfig /all
应用程序正在运行的计算机的 MAC 地址和本地 IP 地址,并在 DHCP 静态租约中设置了我的计算机的 MAC 地址具有该静态地址(以便它不会改变) - 我将端口转发到了端口 9999(我知道有些 ISP 阻止了端口 80,因此我尝试了另一个端口)。
- 我关闭了防火墙。
我的简单 Web 应用程序(Golang):
package main
import (
"fmt"
"net/http"
)
func homeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to the Home Page!")
}
func main() {
http.HandleFunc("/", homeHandler)
port := 9999
fmt.Printf("Server is running on http://192.168.0.11:%d\n", port)
http.ListenAndServe(fmt.Sprintf(":%d", port), nil)
}
我想做的是从本地网络之外访问该应用程序。我通过手机进行测试。也就是说,如果我在 WiFi 下(在本地网络中),则188.2.XX.XX:9999
一切正常,我可以访问该应用程序。
问题是,当我离开本地网络(切换到移动数据)时,188.2.XX.XX:9999
它就不起作用了。它等待了一段时间,然后我收到一条消息,说请求时间已过期
另外,来自该城市另一个地方(来自另一个本地网络)的朋友尝试点击188.2.XX.XX:9999
,但也没有用,与我用手机尝试时的情况相同。
我不知道我错在哪里。