我来自印度,我正在尝试在我的 Raspberry Pi 上的 Nginx 代理服务器后面托管我的音乐服务器(Navidrome)。
音乐服务器在局域网上运行得很好(已经用了一段时间了)。现在我想通过互联网访问它。
我已经在路由器上设置了虚拟服务器,最初将外部 IP 上的 4533 转发到我的 Raspberry Pi 的端口 4533(托管音乐服务器)。192.168.1.42
是我给 Raspberry Pi 的静态 IP。失败后,我还使用此设置了 Nginx 反向代理Reddit 帖子现在将端口 80 转发到 Raspberry Pi 上的 80 和 4533。
第一张图片是我的路由器配置:
第二张图片是我访问我的外部 IP 的 80 端口时得到的结果:
令我困惑的是,我没有 MikroTik 路由器(我有一个 Digisol 路由器),但它将我引导到端口 80 的 MikroTik 路由器操作系统配置页面,而不连接任何其他端口。
我在某处读到,这可能是双重 NAT 的标志,可以使用 traceroute 进行检查。检查前 2 个跳转是私有的还是公共的。
我的第一跳来自我的网关192.168.1.1
,第二跳是我的公共 IP 地址。
我还检查了路由器的开放端口nmap -p4533 192.168.1.1
和外部 IP,两者都告诉我端口已关闭。
我还可以尝试什么?
笔记:所有服务都可以在 LAN 上完美运行 - 现在是 Navidrome、SyncThing、Transmission、JellyFin 和 Nginx(我知道很多适用于 1GB Raspberry PI 3B 的服务)。
编辑:这是我的路由器上的 WAN IPv4 信息。
默认网关和辅助 IP 地址与我的外部 IO 不同,但具有相同的第一个字节,即直到第一个:
x:*:*:* 两个 ip 和我的 ip 有相同的 x - (3 位数字)
路由器上的 WAN 信息:
答案1
您的 Digisol 路由器将其“WAN”IP 地址报告为 172.16.xx(私有 IP 地址),这实际上表明发生了两级 NAT。更重要的是,它表明 CGNAT – 即由您的 ISP 执行且不受您控制的 NAT。
如果你很幸运可以是 1:1 NAT,这仍然允许您的服务从互联网访问 - 只是不能从里面。(即使没有 CGNAT 或一般没有两级 NAT,由于 NAT 的工作方式,你无法从内部访问自己的 IP 地址的情况仍然很常见,所以这不是一个新问题;人们使用分割视图 DNS 和类似方法解决这个问题。)
但最有可能的是“通常的”1:多 NAT,在这种情况下,您的服务器将永远无法从互联网访问……除非您可以让您的 ISP 为您设置专用 IP 地址。一些 ISP 会根据要求提供该服务(有或无额外费用)。
如果 ISP 不帮助你,剩下的唯一选择就是使用通过出站连接工作的外部中继到中继服务器;例如,租用运行 Nginx 反向代理的 VPS,您的 Raspberry Pi 会与其保持有效的 VPN 连接。一些 CDN 提供商提供类似的服务(我记得 CloudFlare 有“cloudflared”,又名 Argo Tunnel;还有 Ngrok;可能还有其他一些)。
默认网关和辅助 IP 地址与我的外部 IO 不同,但具有相同的第一个字节,即直到第一个
这无关紧要;“辅助 IP 地址”只是你的 DNS 解析器的地址,与你的整个 Internet 连接无关(并且它与你自己的外部 IP 地址不同也是完全正常的和与您的网关地址不同)。
拥有相同的第一个字节也绝对没有任何意义(除非地址位于极其罕见的 /8 网络中);例如,有数千个 IPv4 网络以“192”作为第一个八位字节。