Eu tenho máquinas locais como servidor web, seu IP é 192.168.1.xxx. No meu roteador ADSL, eu criei porta "NAT" para esta máquina, funciona bem , mas os IPs logados de visitantes da Internet para o meu servidor web sempre são atribuídos ao meu IP público não IPs.
Eu tentei fazer o DMZ para o IP do servidor local e alterar as configurações de NAT das configurações de ADSL do NAPT para o NAT de Cone Completo.
Atualização 1:
O servidor web é Apache no Ubuntu 16.04 e eu uso as seguintes php código para rastrear o IP do usuário:
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']);
}
Atualização 2:
Depois de remover todas as funções NAT mostradas na segunda captura de tela e apenas manter a DMZ mostrada na terceira captura de tela, o código PHP acima conseguiu capturar o IP do cliente corretamente!
A pergunta: o que está errado no NAT que impediu que o servidor ou pelo menos o script em execução capturasse o IP do cliente enquanto o DMZ permitia isso. O problema com o uso da DMZ, que faz com que as portas da máquina do meu servidor sejam abertas para todo o tráfego de entrada na Internet!
A seguir, estão as capturas de tela da configuração do meu roteador: