The problem here is, that your router does not NAT your internal client's address. Thus, the TCP handshake fails.
Let's assume following IPs
Client: 192.168.1.3
Server: 192.168.1.2
Router internal: 192.168.1
Router external: 123.123.123.1
Here is what is happening:
Client (192.168.1.3) sends TCP-SYN to your external IP, Port 80 (123.123.123.1:80)
Router sees port forwarding rule and forwards the packet to the server (192.168.1.2:80) without changing the source IP (192.168.1.3)
Client waits for a SYN-ACK from the external IP
Server send his answer back to the client directly, because it's on the same subnet. It does not send the packet to the router, which would reverse the NAT.
Client recieves a SYN-ACK from 192.168.1.2 instead of 123.123.123.1. And discards it.
Client still waits for a SYN-ACK from 123.123.123.1 and times out.