RE: How should expose CRM ompremise as public(able to access from internet)
There are two main high-level steps - you need to have your CRM and AD FS servers accessible from the internet via publicly accessible IP addresses. Generally speaking (as far as I've seen, anyway), these servers are usually on private IPs on your local network, so you'll need to have static public IPs from your internet provider, and in your firewall you'll have to do a Network Address Translation saying that if traffic is coming in on X public IP, then send it to Y private IP. Exactly what you need in order to get this working may vary widely depending on your provider, your firewall, your internal network configuration, etc... so it's impossible for me to be any more precise than that.
Once these IP addresses are working, you need to set public DNS entries with your domain name provider so that your external URL (as well as other URLs needed for authentication and the web service) correctly point to those IP addresses. A list of DNS entries can be found here:
technet.microsoft.com/.../gg188591(v=crm.6).aspx