This is easy to explain, difficult to fix.
You're answering public queries with private addresses.
Forward lookup provides an Internal IP address, 192.168.1.150. No routing exists to that so the DNS is uncontactable.
Direct queries to your DNS server provide internal addressing for services like www.
Indirect queries to your DNS fail because reverse lookup can't possibly work.
Now the hard part.
1. The DNS server must have an entry for itself on the public IP address. Without this reverse lookup fails. That is it must see itself as a public server.
2. Each service must have an entry for itself on the public IP address. Without this forward lookup is meaningless in that it provides an internal IP address.
3. Using a public domain name as an internal active directory domain name is a bad plan. Switching the internal domain name to mncgp.local would allow you greater control over the mncgp.com domain - this would have also allowed the port mapping to work.
At this point I would make the following recommendations - this will create the least work for you, or the fastest results.
Create a second DNS server. This server is to sit in a DMZ area outside your normal production LAN.
Leave your internal DNS server as it is, leave the DNS entries you have there.
On the External DNS server create another entry for mncgp.com and set up the correct entries, pointing to the public IP address.
This system is a bit of a pain since you now have two servers, but you can't answer queries with both the internal and external addresses with your current server without significant changes to your internal DNS records.