| Configuring NAT on your network. | 
 | ================================ | 
 |  | 
 | To start setting up NAT, we need to define which is your "internal" interface | 
 | and which is your "external" interface.  The "internal" interface is the | 
 | network adapter connected to the network with private IP addresses which | 
 | you need to change for communicating on the Internet.  The "external" | 
 | interface is configured with a valid internet address. | 
 |  | 
 | For example, your internal interface might have an IP# of 10.1.1.1 and be | 
 | connected to your ethernet, whilst your external interface might be a PPP | 
 | connection with an IP number of 204.51.62.176. | 
 |  | 
 | Thus your network might look like this: | 
 |  | 
 | <Internal Network> | 
 |  [pc]      [pc] | 
 |   |         | | 
 | +-+---------+------+ | 
 |                    | | 
 |                [firewall] | 
 |                    | | 
 |                    | | 
 |                Internet | 
 | <External Network> | 
 |  | 
 |  | 
 | Writing the map-rule. | 
 | --------------------- | 
 | When you're connected to the Internet, you will either have a block of IP | 
 | addresses assigned to you, maybe several different blocks, or you use a | 
 | single IP address, i.e. with dialup PPP.  If you have a block of addresses | 
 | assigned, these can be used to create either a 1:1 mapping (if you have | 
 | only a few internal IP addresses) or N:1 mappings, where groups of internal | 
 | addresses map to a single IP address and unless you have enough Internet | 
 | addresses for a 1:1 mapping, you will want to do "portmapping" for TCP and | 
 | UDP port numbers. | 
 |  | 
 | For an N:1 situation, you might have: | 
 |  | 
 | map ppp0 10.1.0.0/16 -> 209.23.1.5/32 portmap tcp/udp 10000:40000 | 
 | map ppp0 10.1.0.0/16 -> 209.23.1.5/32 portmap | 
 |  | 
 | where if you had 16 addresses available, you could do: | 
 |  | 
 | map ppp0 10.1.0.0/16 -> 209.23.1.0/28 portmap tcp/udp 10000:40000 | 
 | map ppp0 10.1.0.0/16 -> 209.23.1.0/28 portmap | 
 |  | 
 | Or if you wanted to allocate subnets to each IP#, you might do: | 
 |  | 
 | map ppp0 10.1.1.0/24 -> 209.23.1.2/32 portmap tcp/udp 10000:40000 | 
 | map ppp0 10.1.2.0/24 -> 209.23.1.3/32 portmap tcp/udp 10000:40000 | 
 | map ppp0 10.1.3.0/24 -> 209.23.1.4/32 portmap tcp/udp 10000:40000 | 
 | map ppp0 10.1.1.0/24 -> 209.23.1.2/32 portmap | 
 | map ppp0 10.1.2.0/24 -> 209.23.1.3/32 portmap | 
 | map ppp0 10.1.3.0/24 -> 209.23.1.4/32 portmap | 
 |  | 
 | *** NOTE: NAT rules are used on a first-match basis only! | 
 |  | 
 |  | 
 | Filtering with NAT. | 
 | ------------------- | 
 | IP Filter will always translate addresses in a packet _BEFORE_ it checks its | 
 | access list for inbound packets and translates addresses _AFTER_ it has | 
 | checked the access control lists for outbound packets. | 
 |  | 
 | For example (using the above NAT rules), if you wanted to prevent all hosts | 
 | in the 10.1.2.0/24 subnet from using NAT, you might use the following rule | 
 | with ipf: | 
 |  | 
 | block out on ppp0 from 10.1.2.0/24 to any | 
 | block in on ppp0 from any to 10.1.2.0/24 | 
 |  | 
 | and use these with ipnat: | 
 |  | 
 | map ppp0 10.1.0.0/16 -> 209.23.1.0/28 portmap tcp/udp 10000:40000 | 
 | map ppp0 10.1.0.0/16 -> 209.23.1.0/28 portmap |