Você está usando o NAT hairpin, que deve reescrever o endereço IP de origem. Se você for se conectar a um endereço IP externo por dentro, o endereço IP de origem sempre terá que ser o endereço IP do gateway. Caso contrário, os pacotes de retorno nunca retornariam à máquina de origem.
Meu conselho para você é simplesmente não fazer isso. Se você deseja se conectar a uma máquina local, use seu endereço IP local.
Esta resposta explica o mesmo problema.
Aqui, o que aconteceria se você não usasse o SNAT:
-
A solicitação é originada em uma máquina com apenas um endereço IP privado, portanto, ela possui um endereço IP de origem privada.
-
O destino não é local, portanto, a solicitação é enviada ao gateway.
-
O gateway reescreve apenas o destino (isso está errado!) e envia o pacote para o servidor.
-
O servidor vê uma consulta de um endereço IP local, então envia a resposta para um endereço IP local.
-
A máquina local vê uma resposta de um endereço IP local para um pacote enviado para um endereço IP remoto e ignora a resposta.
Hairpin NAT é uma forma de NAT duplo, usando SNAT e DNAT. Não pode funcionar sem SNAT. As respostas também devem ser NATted, o que significa que a fonte tem que ser NATted para obter as respostas para o gateway.