NAT Expands the Net
        With everyone jumping on the Internet bandwagon, address space has become hot property. But with NAT as a core function in Windows 2000, even smaller businesses can have their share of the pie.
        
        
			- By Michael Chacon
- March 01, 2001
I can remember when there were arguments over whether a network would 
        be best served with TCP/IP or some other protocol, such as IPX, or even 
        XNS, which were each surely destined to network the world. The emergence 
        of the Internet has solidly resolved this debate in the obvious favor 
        of TCP/IP. This resolution has created a bandwagon — with everyone jumping 
        on board even though the wheels are growing creaky as the participants’ 
        numbers grow. 
      As is now fairly common knowledge, the address space available in the 
        32-bit IPv4 protocol stack doesn’t have enough room to map all of the 
        devices that are rushing to be connected to the Internet. IPv6 is poised 
        to resolve this and other problems with a more robust protocol stack and 
        a 128-bit address space. But wide-scale implementation is down the road, 
        and the movement to IPv6 will be cascading from the backbone with a slow 
        radiation down to the client devices on the edge of the network. 
      Growing Pains 
        While we wait for the long-term solution, the growth of publicly interconnected 
        devices continues to expand relentlessly. The addressing problem has been 
        patched over by reswizzling the allocation of class A and B addresses 
        recovered from entities that couldn’t justify their continued retention. 
        ISPs and ASPs that have the architecture to rationally allocate address 
        space across multiple client entities have acquired many of these addresses. 
        This has stretched the ability for participation on the Internet rather 
        well, but there’s still some expansion to go. This stretching of the address 
        space is particularly useful for small- to medium-size companies that 
        can’t even acquire a public class C address. When they go to their ISPs, 
        they have the opportunity to acquire a rather small block of IP addresses, 
        commonly in the four- to 32-address range. For the most part, this still 
        leaves too few addresses to uniquely identify all of the devices within 
        a given network. 
      What’s become a common resolution is for companies to use a private address 
        space to build their network. These are properly built upon addresses 
        such as 10.0.0.0, 172.16.0.0 or 192.168.0.0, which have been defined and 
        set aside in RFC 1918 for private internal networks. But these addresses 
        can’t be directly connected to the Internet because it would result in 
        duplicate addresses. What makes these private addresses work on the Internet 
        is that the internal addresses are then mapped to the public address space 
        that has been provided to them by InterNIC or leased from their ISP. This 
        mapping is accomplished through a method called Network Address Translation 
        (NAT), which is described in RFC 1631. This RFC description defines the 
        mapping and translation of IP addresses and the port numbers of the TCP 
        and UDP packets as they’re forwarded through a router that supports NAT. 
      
      Windows 2000 NAT to the Rescue 
        NAT mapping has been traditionally handled by specialized routers that, 
        in many cases, are cost prohibitive to small- to medium-size businesses 
        that want to fully participate in the Internet. What Windows 2000 adds 
        to this addressing technique is NAT functionality in the core product 
        — bypassing the need for a specialized, and usually costly, router. Cisco 
        Systems might not be too happy about this Win2K feature; but a lot of 
        small companies are starting to use the added functionality of what used 
        to be considered the simple and often-ridiculed multi-homed computer. 
        A multi-homed computer is simply a PC with two or more NICs installed 
        that have routing tables configured between them to forward traffic. At 
        this point an example would be useful. When a client wants to establish 
        a connection to an IP-identified resource on the network, or the Internet, 
        it initiates that session with the following identity information: 
      
        -  
           Destination IP address — Used to identify 
            the ultimate resource location: 132.14.1.25  
-  
           Destination port number — Used to identify 
            the ultimate resource service at that location: TCP 80  
-  
           Source IP address — Used to identify the 
            client machine: 10.1.1.27 
-  
           Source port number — Used to identify 
            the requesting service on the client machine: TCP 1025  
Normally this packet would simply be routed to its ultimate destination. 
        However, in our scenario, it’s first forwarded to the NAT software, which 
        modifies the source address and port number as shown below: 
      
        -  
           Destination IP address — Used to identify 
            the ultimate resource location: 132.14.1.25  
-  
           Destination port number — Used to identify 
            the ultimate resource service at that location: TCP 80  
-  
           Source IP address — Used to identify the 
            client machine: 204.17.1.23  
-  
           Source port number — Used to identify 
            the requesting service on the client machine: TCP 5001  
Notice that the source address and port number now reflect a public address 
        and a new port number. Any IP device that receives this packet will now 
        consider it to have come from the new public address. The mapping between 
        the internal private address and the external public address is stored 
        in a table on the NAT router. That was, when the response is received 
        from the target resource, the translation can be reversed and it can be 
        forwarded to the machine that initiated the session. 
      When the packets come back to the NAT router’s public interface, the 
        address is compared to the mapping table. The information from the table 
        is translated back to the packet and forwarded to the internal private 
        network. If no matching entry exists in the table, that packet is considered 
        intrusive and discarded. This illustrates one of the advantages of NAT, 
        which is protection from malicious sources trolling for access to machines 
        in your private network. 
      Mapping to the Outside World 
        Two types of mappings are available in the NAT environment: static and 
        dynamic. Static mappings, appropriately enough, create a consistent mapping 
        between a particular private address and a particular public address. 
        This is used most commonly for resources you want exposed to and reachable 
        from external clients, but also available on the internal private network. 
        The most common examples would be a Web or mail server. 
      A dynamic mapping arbitrarily changes each time a session is established. 
        As dynamic mapping is used, it’s refreshed in the mapping table. If a 
        dynamic mapping isn’t used for a specific period of time, it’s flushed 
        from the table. This period of time is configurable with a default time 
        of 24 hours for TCP connections and 60 seconds for UDP packets. 
      Do a Lot with Just a Little 
        NAT variations to consider depend upon whether you have a large public 
        address space to work with or only a handful of addresses. As you can 
        see, the first method I outlined suggests that you have a unique public 
        address available for each private address that requires mapping. 
      If you don’t have a large public address space available — and usually 
        you won’t — you can do what’s referred to as Port Address Translation 
        (PAT). With PAT you only need enough public addresses to map specific 
        resources that you want exposed outside of your network. For example, 
        along with your Web and mail server, you may have a database and a handful 
        of file servers that you want clients to be able to connect to across 
        the Internet. With this example, you could get by with a block of eight 
        public addresses from your ISP to cover these servers — with a little 
        room to grow. You could then create static mappings to these servers and 
        use only one of the remaining addresses for “one direction” traffic. What 
        I mean by this is that outside clients can’t establish a session with 
        internally addressed machines. However, multiple machines in your private 
        network can establish sessions to resources in the public network by sharing 
        one public address in your NAT and uniquely identifying the internal machines 
        using port numbers. This would allow your internal machines to browse 
        the Internet but not be reachable from outside requests. 
      But There’s More 
        As you can see, NAT and PAT are fairly straightforward, but there’s another 
        consideration with this technique. TCP and UDP headers are designed for 
        modification as necessary for fundamental routing. However, some protocols 
        that use IP, such as FTP, ICMP and PPTP, also carry IP addressing information 
        in what IP considers the data portion of the packet. For example, the 
        FTP port command (from RFC 265), which is used to locate the exposed FTP 
        service running on the target machine, stores the dotted decimal notation 
        of the target IP address in the data portion of the packet. If the NAT 
        translates the IP header information but not the address information stored 
        in the FTP packet, they won’t match after the translation that occurs 
        during NAT and, therefore, won’t work properly. 
      This problem is resolved by using a NAT editor. The NAT editor is a software 
        component that modifies the necessary information in the packets so that 
        embedded information is in agreement with the information supplied in 
        the IP packet headers as they’re translated and forwarded during the NAT 
        process. 
      So What Does This All Mean? 
        NAT is a great straightforward technique that not only expands the available 
        address space, particularly for smaller organizations, but also provides 
        another layer of security from external maliciousness. But how does all 
        of this general information relate to Win2K? Now that I’ve provided the 
        overview of how NAT is used and generally functions, next month I’ll discuss 
        how NAT and PAT are implemented in Win2K. Stay tuned.