好的,我有 1 台带有 pfSense 的服务器和许多虚拟服务器。我正在使用 Nginx 上游功能在同一公共 IP 上运行多个 WEB 服务器。当然,我需要知道真实用户的IP,而不是Nginx代理,即192.168.2.2,但是切换到pfSense(最近有简单的消费者路由器)之后,Web服务器无法看到真实用户的IP。
我尝试更改系统/高级/防火墙和 NAT 中的各种设置,例如:端口转发的 NAT 反射模式启用反射的自动出站 NAT
另外,在防火墙/NAT/出站中尝试了每种模式,但没有任何帮助,但每个用户仍然拥有我的代理服务器的 IP。
那么如何禁用伪装,或者如何传递真实的客户端IP。
更新
好吧,看来问题出在子域而不是域上。现在的情况:
如果客户端访问domain.com - 一切都很好后端服务器可以看到真实的客户端IP
如果客户端访问 subdomain.domain.com - 后端服务器查看代理服务器 IP
所有域A记录都指向外部IP,然后pfSense将80端口转发给代理,然后代理根据域转发到相应的内部服务器。
我有 2 台物理服务器,1 台 - pfSense 路由器,另一台带有运行许多虚拟机的 virtualbox,在此示例中为 4 台虚拟机
另一件有趣的事情是,当我尝试从本地网络内部访问麻烦的 subdomain.domain1.com 时,我得到以下信息:
同样,domain1.com 和domain2.com 等都没有问题......
答案1
转发端口基本上有两种方法: 一种是 pfSense 现在正在执行的操作(“完整”NAT,Linux 中的 conntrack):当客户端发起新连接时,pfSense 在其 NAT 表中创建一个新映射,交换出源地址与它自己的,更改源端口(如果适用)并将修改后的数据包发送到您的网络服务器。您的网络服务器将自动将其答案发送给 pfSense 机器,然后 pfSense 机器可以再次交换字段并将数据包发送到客户端。这种方法的优点是您的网络服务器不需要意识到它,它就可以工作。据我记得,如果将 NAT 模式切换为“AON”并禁用 (webserverip, targetport) 的 NAT,则可以在 pfSense 中禁用此功能。
您的消费者路由器执行了简单的端口转发(Linux 中的 DNAT):数据包到达时,它只是交换目标地址并将数据包发送到您的网络服务器。由于数据包现在仍然具有真实的源地址,因此网络服务器可以看到客户端的真实地址。不幸的是,当它发送答案时,它会将自己的(私有)地址放入源字段中,路由器必须在出去时将其与您的公共 IP 进行交换(Linux 中的 SNAT)。由于网络服务器直接将数据包寻址到客户端,因此路由器只有在也是默认网关的情况下才能执行此操作! (或者当您在网络服务器上设置相当时髦的路由策略时)
答案2
好吧,问题不在 pfSense 中,也不在代理中,问题出在特定的后端服务器(绿色方块)配置中。我不小心禁用了“在标头中使用客户端 IP”选项,我确定它已启用,我知道这个选项,所以它是后端服务器配置错误。后端服务器是Litespeed。