我正在阅读有关端口转发的信息,因为正在考虑使用 RaspberryPi 来托管 Web 服务器。
我想到的一件事是这样的。某个端口上的所有请求都会转发到特定的内部 IP 地址。响应是否以相同的方式转发?因为这肯定会阻止网络上的其他计算机访问互联网,因为访问过的网站的所有响应都会发送到服务器。
答案1
为了回答这个问题,您需要了解客户端和服务器之间的网络流量是如何运作的。
当您有一个客户端-服务器程序时,服务器会设置一个监听端口。
然后,任何客户端都可以连接到此监听端口并请求连接。由于您只能与一个端口建立一次连接,因此一旦服务器接受连接(一瞬间完成),服务器就会启动与客户端的新连接(通常通过 uPNP,可选择指定它将使用哪个端口)以进行实际的数据传输。从客户端到服务器的初始端口将被删除以释放监听端口。
由于服务器位于 NAT(路由器)后面,因此当客户端使用端口号连接到公共 IP 时,路由器会应答,而不是后面的服务器。由于路由器没有服务器(在您的例子中是 Web 服务器)的软件,因此它不知道如何应答,并且连接失败,因为路由器只是忽略了请求。
通过添加端口转发,您可以告诉路由器当有人尝试使用指定端口连接到公共 IP 时该做什么。 在您的例子中,规则是:将流量中继到 Raspberry Pi。
现在,正如您所看到的,唯一发生的事情是路由器了解当向公共 IP 和端口发出请求时该做什么。网络内的 PC 不会通过公共 IP 请求访问,而是通过私有 IP 请求访问。此外,路由器允许设置它监听哪个公共端口。因此,如果您有 3 个 Raspberry Pi,每个都有自己的 IP 地址,您可以设置 3 条规则:
- port 8081 to pi1, port 80
- port 8082 to pi2, port 80
- port 8083 to pi3, port 80
然后,客户端连接到您的公共 IP,并附加:8081 以打开该端口,一切仍能正常工作。
没有铺设物理链路,因此所有端口都保持原样。路由器只是知道现在该如何处理端口,以及流量应该流向何处。
请注意,并非所有路由器都具有环回流量的能力,这意味着,它们期望具有公共 IP 地址的 NAT 上的连接来自 WAN 端口,而不是任何 LAN 端口,因此可能无法从网络内部测试路由器上的转发规则。
答案2
我不是网络专家,但端口 80 只是服务器正在监听的端口。客户端在 1024 以上的随机端口上监听服务器响应。
例子:
You --> asdf.com:Port 80
asdf.com --> you:Port 12345 (response)
因此将端口 80 转发到树莓派,在正常使用网络时不会影响网络中的其他 PC。
当然,您只能将端口转发到家庭网络中的一台 PC,因此您一次只能运行一个 raspberry 服务器。
在您的家庭网络内部,所有服务器仍然可以通过其本地 IP 地址访问。
当然这适用于所有端口,不仅仅是 80
答案3
因此,当你设置家用路由器将端口 80 转发到 Raspberry Pi 时,你实际上是在转发你的民众IP 地址。此地址由您的 ISP 分配给您的路由器。外部(互联网)的任何人都看不到路由器后面(您的内部 LAN)的内容。因此,当外部发出网页请求时,路由器会将其转发到您的 Raspberry Pi。响应将发送回您的路由器,路由器知道请求来自何处并做出响应。内部没有什么不同。您可以通过端口 80 上的内部 IP 地址访问您的 Raspberry Pi。