Почему не видит внешний ip адрес пользователя?
Это нормально, так NAT (Network Address Translation, сетевая трансляция адресов) и работает - подменяет в заголовках пакета один адрес на другой, поэтому у Вас и получается проброс портов и сокрытие внутренней сети от внешнего наблюдателя. 
Вы будете видеть правильные удаленные адреса в случае с маршрутизируемой сетью, т.е. когда не будет NAT, а будет просто проброс трафика с одного интерфейса на другой. Ну или прокси-сервер ставить. Еще есть варинат с VPN-сервером, но тогда каждому клиенту нужно будет ставить vpn-клиента и все будут в одной виртуальной подсети, но все же на конечном сервере Вы будете видеть серые адреса, хотя на VPN-сервере сможете соотнести белый-серый. Наверное других способов тут нет.
Правила в INPUT не работают, можете их убрать. И рекомендуется MASQUERADE менять на SNAT, если внешний адрес постоянный.
вот ваша причина, у вас весь трафик маскарадится, т.е в любом пакете проходящем через этот сервер ip будет подменён на ip сервераiptables -t nat -A POSTROUTING  -j MASQUERADE