我在一台台式电脑上设置了一个小型网络服务器,供公司内部和外部使用。公司网络由D-Link DSL-6740U路由器连接到TP-Link TL-SG1016 交换机,办公室里的所有机器都连接到交换机。路由器的 IP 地址是10.0.0.138
,桌面都在 中10.0.0.0 - 10.0.0.20 range
。服务器恰好是10.0.0.10
。此外,我已将路由器上的端口 80 从外部请求转发到托管服务器的机器。我们的外部 IP 地址是1.2.3.4
为了讨论目的。
我注意到,所有来自 LAN 并以我们的外部 IP 地址 ( 1.2.3.4
) 为目标的请求在服务器中都显示为来自 IP 地址10.0.0.138
(路由器),而不是来自发出请求的桌面的内部 IP 地址。如果桌面通过地址(服务器的 LAN 地址)发出请求,10.0.0.10
我们会看到它的 LAN 地址(即10.0.0.6
)。
为什么所有对外部地址的请求都显示来自10.0.0.138
(路由器),而不是显示来自 LAN 地址(即10.0.0.6
甚至我们的外部地址1.2.3.4
)?这是路由器的“功能”吗?假设我无法更改路由器的配置(实际上,我可以),我能做些什么(在服务器上或客户端上)让 IP 地址显示为 LAN 上的原始地址?
笔记:在此问题的原始版本中,我错误地指出,即使对服务器 LAN 地址的调用也会在日志中显示为来自10.0.0.138
。从那时起,我学会了仔细检查用户向我报告的有关他们如何访问服务器的信息!
答案1
对于“为什么所有请求都显示来自路由器?”这个问题的答案是:
因为路由器正在进行NAT。
如果我们想确定流量为何要流经路由器并进行 NAT,我们需要补充更多细节。听起来客户端和服务器“应该”位于同一子网中,因此流量不应流经路由器并进行 NAT。
流量通过路由器的可能原因:
- 服务器和客户端的 IP 地址/子网掩码配置将它们放在不同的子网中
- 客户端通过外部 IP 地址访问服务器,路由器执行 u-turn NAT(源 NAT 和目标 NAT)
- 编辑:
回答更新后的问题:
为什么所有对外部地址的请求都显示来自 10.0.0.138(路由器),而不是显示来自 LAN 地址(即 10.0.0.6 甚至我们的外部地址 1.2.3.4)?
这很可能是因为正在进行某种类型的 DNAT 和 SNAT 或端口转发。这是路由器的一个功能。