端口转发到我的网络服务器的机器,将访问者的 IP 作为我的公共 IP

端口转发到我的网络服务器的机器,将访问者的 IP 作为我的公共 IP

我有一台本地机器作为 Web 服务器运行,其 IP 为 192.168.1.xxx。在我的 ADSL 路由器上,我已为这台机器创建了端口转发“NAT”,它工作正常但是从 Internet 到我的 Web 服务器的访问者的记录 IP 始终被分配给我的公共 IP,而不是他们的 IP。

我已尝试将 DMZ 设为本地服务器 IP,并将 NAT 设置从 ADSL 设置从 NAPT 更改为 Full Cone NAT。

更新 1:

Web 服务器是 Ubuntu 16.04 上的 Apache,我使用以下内容跟踪用户IP的代码:

public function handle(Login $event)
    {
        //Perform login tracking
        $log = new Loginlog();
        $log->created_at = date('Y-m-d H:i:s');
        $log->user_id = \Auth::user()->id;
        $log->ip = $_SERVER['REMOTE_ADDR'];
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        $log->est_ip = $ip;
        $log->save();
        $nowDate = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s',date('Y-m-d H:i:s'));        
        $deletedRows = \App\Loginlog::where('created_at','<', $nowDate->subDays(config('fox.clearBeforeDays')))->delete();
        // dd(\Auth::user()->id,$_SERVER['REMOTE_ADDR']);

    }

更新 2:

删除第二个屏幕截图中显示的所有 NAT 角色并仅保留第三个屏幕截图中显示的 DMZ 后,上述 PHP 代码成功正确捕获了客户端的 IP!

问题是:NAT 出了什么问题,导致服务器或至少是服务器上运行的脚本无法获取客户端的 IP,而 DMZ 只允许这样做。使用 DMZ 的问题是,它使我的服务器的机器端口向所有 Internet 入站流量开放!

以下是我的路由器配置相关的屏幕截图:

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

答案1

您应该避免使用 DMZ,因为它太危险,会让 Internet 上的每个人都直接访问您的所有端口。

您应该使用端口转发。

请参阅端口转发文章:
如何在华为 HG531 V1 路由器上设置端口转发的简单说明

相关内容