同一网络的客户端使用公网 IP/域请求服务器时,服务器会将客户端 IP 视为路由器 IP

同一网络的客户端使用公网 IP/域请求服务器时,服务器会将客户端 IP 视为路由器 IP

我已经为上述问题苦苦挣扎了无数个小时,但无法在这个网站或任何其他网站上找到这种行为的解释。不过可能是我使用了错误的查询。这是我在 Stack Overflow 上的第一个问题,所以请多包涵 ;)

我正在使用的设置:

我的路由器后面有一台服务器(其内部 IP 为 192.168.2.254),并使用端口转发将公共端口 80 和 443 转发到我的(ubuntu)服务器。我可以通过输入其公共 IP(例如 80.81.82.83)或转到 A 记录包含相同公共 IP 的域(例如 example.org)来访问该服务器,或者在同一个网络上输入其内部 IP(例如 192.168.2.1)。我在该服务器上使用 NGINX 作为反向代理,将请求委托给同一服务器上的相应(Web)应用程序。路由器是我从互联网提供商那里获得的标准路由器。

我有两个客户端连接到该服务器,客户端 A与服务器在同一个网络(例如 192.168.2.2),而客户端 B不是在同一个网络上,但在世界任何其他地方(例如 90.91.92.93)。

当我使用客户端 B(即不在同一网络上)连接到我的服务器(使用公共 IP 或域名)并检查客户端 IP(即 $remote_addr)的 NGINX 访问日志时,显示正确/预期的 IP 地址:90.91.92.93。

现在我不明白的部分:

当我使用服务器的内部 IP(192.168.2.1)将客户端 A(与服务器位于同一网络)连接到服务器时,访问日志显示客户端的正确/预期 IP 地址:192.168.2.2。 但是,当我使用公共 IP 地址或域名从同一客户端连接到服务器时,NGINX 访问日志显示来自路由器的 IP 地址:192.168.2.254。

为什么会发生这种情况?这样我就无法记录(并采取行动)哪些内部客户端连接到了服务器。

答案1

但是,当我使用公共 IP 地址或域名从同一客户端连接到服务器时,NGINX 访问日志显示来自路由器的 IP 地址:192.168.2.254。

为什么会发生这种情况?这样我就无法记录(并采取行动)哪些内部客户端连接到了服务器。

发生这种情况的原因是,当你连接到公网 IP 地址(或使用公网 IP 地址的公网域名)时,连接从你的客户端(192.168.2.2)转到路由器(192.168.2.254),然后路由器将连接的源地址 NAT 到它自己的接口,即距离目标最近的接口的 IP 地址

相关内容