Since ns1 and ns2 belong to you and your registrar is already pointing to them, there is likely something wrong with your DNS zone. Find your zone under forward lookup in the DNS snap-in, and fire up properties. Under the name servers tab, do you see ns1 and ns2 in there? Make sure it is a FQDN like ns1.mydomain.com. Under the general tab make sure it is a primary zone, since I am assuming you do not have active directory installed. Under the security tab, make sure the 'everyone' person has read access.
For the A records, you are right to have public IP's in here since this is your public authoritative DNS server (and web server, but that's not as important).
If you go to the properties of the DNS server itself in the DNS snap in, go to forwarders and remove them. You want to check the box to use root hints. If you have NS1 and NS2 listed as forwarders, that means they forward to themselves when they can't look something up and that is bad. Under the monitoring tab do a simple query test and recursive query test and let me know what you find.
It sounds like you have DNS setup fine on the server, but where is the authoritative name server? Say you are using GoDaddy, you would need to specify the public IP of your new windows server as the authoritative name server. Make sure you have port 53 open on your firewall, as that is what DNS uses.
To expand upon the authoritative name server, it is the one that says that example.yoursite.com should point to 18.104.22.168 (or whatever). For my domains, the authoritative name servers are owned by GoDaddy and Network Solutions. Given that, I use their DNS edit page to specify my A records. I've found it takes about an hour to update if the TTL is set at 3600. It won't go any faster.
If a workstation in my network wants to do a DNS lookup, it first asks the local windows server. Say I am looking up google.com. My local server isn't the authoritative name server and let's also say it has never seen google.com before so it hasn't cached the DNS record. It will then use the forwarder you have specified to ask the next DNS server up the tree what the IP is. If that server isn't authoritative, it will continue upwards until it gets the official answer. I am guessing that this scenario is what you have, which means your fix is to add all those A records to your domain registrar's DNS page since they are probably the authoritative name server.
As an aside, don't put public IP's on the A records for your subdomains on your DNS server, unless you have your firewall setup for proper loopback NAT rules. Use local IP's (like 192.168.x.x) so internal workstations that do a DNS query for another internal server will get the local answer and not have to make an extra trip to the internet.