问题描述:
我正在尝试使用 FastAPI 服务器在我的 Raspberry Pi 和 Ubuntu 桌面之间设置文件传输。这是我的设置:
FastAPI 服务器设置:
- 在 Ubuntu 桌面上部署了 FastAPI。
- 服务器监听端口
2121
。
静态 IP 设置:
- 我的 ISP 为我分配了静态 IP
172.168.4.50
(通过路由器设置确认)。 - 在我的路由器上启用端口转发,以便将端口转发
2121
到 Ubuntu 桌面的本地 IP。
- 我的 ISP 为我分配了静态 IP
测试设置:
- FastAPI 服务器可在本地访问(例如
http://localhost:2121/
)。 - 但是,当我尝试
http://172.168.4.50:2121/
从网络外部访问时,请求失败。
- FastAPI 服务器可在本地访问(例如
采取的故障排除步骤:
- 验证路由器上的端口转发规则。
- 检查 FastAPI 服务器是否正在运行并监听正确的端口。
- 通过暂时禁用 Ubuntu 桌面上的防火墙来测试可访问性。
忧虑:
经过一番研究,我发现它172.168.4.50
属于私有 IP 范围(172.16.0.0
到172.31.255.255
)。据我所知,私有 IP 在公共互联网上不可路由。
问题:
- 我的 ISP 是否可能提供了私有静态 IP 而不是公共静态 IP?
- 如果是这样,这是否意味着即使启用了端口转发,也无法通过互联网访问 API?
- 我是否应该要求我的 ISP 分配一个面向公众的静态 IP?
系统详细信息:
- 服务器操作系统: Ubuntu 桌面
- ISP 提供的静态 IP: 172.168.4.50
- 端口转发: 2121
- FastAPI:基于 Python 的 API 服务器
预期行为:
应该可以从任何地点使用 ISP 分配的静态 IP 和端口来访问该 API 2121
。
实际行为:
即使配置了端口转发,请求仍然会http://172.168.4.50:2121/endpoint
失败并超时。
从某种程度上来说,是的。这在住宅 ISP 中非常常见(甚至在小型商业计划中也越来越常见),因为 ISP 的 IPv4 地址已经用完,而且没有办法获得更多地址。
尽管您的 ISP 使用了错误的范围(正如其他人所提到的,ISP 混淆了两个不同的私有 IP 范围,或者可能将“172.16”错误地输入为“172.168”,最终使用了微软的一部分公共地址空间)但最终结果在功能上是相同的:您拥有的地址不会通过 Internet 路由给您,并且仅在 ISP 的网络内起作用。
(对于实际的私有地址,互联网根本没有路由。对于“172.168”,互联网确实有路由,但方向完全不同 - 朝向合法拥有这些地址的 Microsoft Azure 网络 - 最终结果是一样的,即来自其他 ISP 的数据包没有机会到达您。在这两种情况下,您的传出互联网访问之所以有效,是因为 ISP 会将所有数据包 SNAT 到其实际公共地址之一。)
是的。
是的。
我最初对分配的 IP 地址是私有的还是公共的感到困惑。经过进一步调查,我发现该 IP 地址确实是私有 IP 地址。路由器使用运营商级 NAT (CGNAT) 进行路由,这就是为什么 IP 地址出现在私有范围内并且无法从互联网直接访问的原因。