xref: /freebsd/usr.sbin/ppp/README.nat (revision 05248206f720394d95c2a7475429311df670a2e9)
1de97d73dSBrian SomersCopyright (c) 2001 Charles Mott <cm@linktel.net>
2057fee78SBrian SomersAll rights reserved.
3057fee78SBrian Somers
4057fee78SBrian SomersRedistribution and use in source and binary forms, with or without
5057fee78SBrian Somersmodification, are permitted provided that the following conditions
6057fee78SBrian Somersare met:
7057fee78SBrian Somers1. Redistributions of source code must retain the above copyright
8057fee78SBrian Somers   notice, this list of conditions and the following disclaimer.
9057fee78SBrian Somers2. Redistributions in binary form must reproduce the above copyright
10057fee78SBrian Somers   notice, this list of conditions and the following disclaimer in the
11057fee78SBrian Somers   documentation and/or other materials provided with the distribution.
12057fee78SBrian Somers
13057fee78SBrian SomersTHIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14057fee78SBrian SomersANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15057fee78SBrian SomersIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16057fee78SBrian SomersARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17057fee78SBrian SomersFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18057fee78SBrian SomersDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19057fee78SBrian SomersOR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20057fee78SBrian SomersHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21057fee78SBrian SomersLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22057fee78SBrian SomersOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23057fee78SBrian SomersSUCH DAMAGE.
24057fee78SBrian Somers
25057fee78SBrian SomersUser PPP NAT (Packet Aliasing)
26a9f484e5SJordan K. Hubbard
276db75539SBrian Somers
286db75539SBrian Somers
29a9f484e5SJordan K. Hubbard0. Contents
30a9f484e5SJordan K. Hubbard    1. Background
31a9f484e5SJordan K. Hubbard    2. Setup
326db75539SBrian Somers    3. New commands in ppp
336db75539SBrian Somers    4. Future Work
3405dbe14bSBrian Somers    5. Authors / Acknowledgements
356db75539SBrian Somers    6. Revision History for Aliasing Code
366db75539SBrian Somers
37a9f484e5SJordan K. Hubbard
38a9f484e5SJordan K. Hubbard
39a9f484e5SJordan K. Hubbard1. Background
40a9f484e5SJordan K. Hubbard
41057fee78SBrian SomersUser mode ppp has embedded NAT (Network Address Translation) code.
42057fee78SBrian SomersEnabling this, either by the "-nat" command line option or the
43057fee78SBrian Somers"nat enable yes" command in a ppp.conf file, makes the ppp host
44057fee78SBrian Somersautomatically NAT IP packets forwarded from a local network, making
456db75539SBrian Somersthem appear to come from the ppp host machine.  Incoming packets
46057fee78SBrian Somersfrom the outside world are then appropriately de-NAT'd.
47a9f484e5SJordan K. Hubbard
48057fee78SBrian SomersThe process of NAT'ing involves both the IP address and the TCP or UDP
49057fee78SBrian Somersport numbers. ICMP echo and timestamp packets are natted by their id
506db75539SBrian Somersnumbers.  ICMP error messages can be properly directed by examining the
516db75539SBrian Somersfragment of the offending packet which is contained in the body of the
526db75539SBrian Somersmessage.
53a9f484e5SJordan K. Hubbard
54a9f484e5SJordan K. HubbardThis software was specifically meant to support users who have
556db75539SBrian Somersunregistered, private address IP networks (e.g. 192.168.0.x or 10.0.0.x
566db75539SBrian Somersaddresses).  The ppp host can act as a gateway for these networks, and
576db75539SBrian Somerscomputers on the local area net will have some degree of Internet access
586db75539SBrian Somerswithout the need for a registered IP address.  Additionally, there will
596db75539SBrian Somersbe no need for an Internet service provider to maintain routing tables
606db75539SBrian Somersfor the local area network.
61a9f484e5SJordan K. Hubbard
62057fee78SBrian SomersA disadvantage of NAT is that machines on the local network,
636db75539SBrian Somersbehind the ppp host, are not visible from the outside world.  They can
646db75539SBrian Somersestablish TCP connections and make UDP inquiries (such as domain name
656db75539SBrian Somersservice requests) but the connections seem to come from the ppp host
666db75539SBrian Somersitself.  There is, in effect, a partial firewall.  Of course, if this is
676db75539SBrian Somerswhat you want, the disadvantage becomes an advantage.
68a9f484e5SJordan K. Hubbard
696db75539SBrian SomersA second disadvantage is that "IP encoding" protocols, which send IP
706db75539SBrian Somersaddress or port information within the data stream, are not supported
716db75539SBrian Somersfor the cases where exception code exists.  This implementation has
726db75539SBrian Somersworkarounds for FTP and IRC DCC, the most well known of the IP encoding
736db75539SBrian Somersprotocols.  This frees users from depending on using the ftp passive
746db75539SBrian Somersmode and avoiding IRC DCC sends, as is sometimes the case with other
756db75539SBrian Somersmasquerading solutions.
76a9f484e5SJordan K. Hubbard
776db75539SBrian SomersThe implementation supports all standard, non-encoding TCP and UDP protocols.
786db75539SBrian SomersExamples of these protocols are http, gopher and telnet. The standard UDP
7905dbe14bSBrian Somersmode of Real-Audio is not presently supported, but the TCP mode does work
806db75539SBrian Somerscorrectly.
81a9f484e5SJordan K. Hubbard
82057fee78SBrian SomersThe NAT code also handles many ICMP messages.  In particular,
836db75539SBrian Somersping and traceroute are supported.
84a9f484e5SJordan K. Hubbard
85a9f484e5SJordan K. Hubbard
86a9f484e5SJordan K. Hubbard
87a9f484e5SJordan K. Hubbard2. Packet Aliasing Setup
88a9f484e5SJordan K. Hubbard
896db75539SBrian SomersIt is recommended that users first verify correct ppp operation without
90057fee78SBrian SomersNAT enabled.  This will confirm that the ppp.conf file is
916db75539SBrian Somersproperly set up and that there are no ppp problems. Then start ppp with
92057fee78SBrian Somersthe "-nat" option on the command line.  The user should verify that
93057fee78SBrian Somersthe ppp host can correctly connect to the Internet in NAT
946db75539SBrian Somersmode.  Finally, check that machines on the private network can access
956db75539SBrian Somersthe Internet.
96a9f484e5SJordan K. Hubbard
97057fee78SBrian SomersThe NAT software handles all packets, whether they come from
986db75539SBrian Somersthe host or another computer on the local area network.  Thus, a correctly
996db75539SBrian Somersoperating ppp host indicates that the software should work properly for
1006db75539SBrian Somersother computers on the private network.
101a9f484e5SJordan K. Hubbard
1026db75539SBrian SomersIf the ppp host can access the Internet, but other computers on the local
1036db75539SBrian Somersnetwork cannot, check that IP forwarding is enabled on the ppp host. Also,
1046db75539SBrian Somersverify that the other computers use this machine as a gateway.  Of course,
1056db75539SBrian Somersyou should also verify that machines within the local area network
1066db75539SBrian Somerscommunicate properly.  A common error is inconsistent subnet addresses
1076db75539SBrian Somersand masks.
108a9f484e5SJordan K. Hubbard
109a9f484e5SJordan K. Hubbard
110a9f484e5SJordan K. Hubbard
1116db75539SBrian Somers3. New commands in ppp
112a9f484e5SJordan K. Hubbard
113057fee78SBrian SomersIn order to control NAT behaviour in a simple manner (no need for
114057fee78SBrian Somersrecompilation), a new command has been added to ppp: nat.  This
115057fee78SBrian Somersis in addition to the -nat command line option.  System managers and
11605dbe14bSBrian Somersmore experienced users may prefer to use the ppp command syntax
117057fee78SBrian Somerswithin the ppp.conf file.  The nat command also allows NAT
11805dbe14bSBrian Somersbehaviour to be more precisely specified.
119a9f484e5SJordan K. Hubbard
1206db75539SBrian SomersThe decision to add a command instead of extending 'set' or 'option' was
121057fee78SBrian Somersto make obvious that these options only work when NAT is enabled.
122a9f484e5SJordan K. Hubbard
123057fee78SBrian SomersThe syntax for 'nat' is
124a9f484e5SJordan K. Hubbard
125057fee78SBrian Somers    ppp>  nat option [yes|no]
126a9f484e5SJordan K. Hubbard
1276db75539SBrian Somerswhere option is given by one of the following templates.
1286db75539SBrian Somers
1296db75539SBrian Somers
130057fee78SBrian Somers - nat enable [yes|no]  (default no)
1316db75539SBrian Somers
132057fee78SBrian SomersEnable NAT functionality.  If disabled, no other NAT
133057fee78SBrian Somersoptions will have any effect.  You should usually enable NAT
1346db75539SBrian Somersbefore routing any packets over the link; good points are in the
1356db75539SBrian Somersinitial script or right before adding a route.  If you do not always
136057fee78SBrian Somerswant NAT, consider using the -nat option to ppp instead of this
1376db75539SBrian Somerscommand.
1386db75539SBrian Somers
1396db75539SBrian Somers
140057fee78SBrian Somers - nat deny_incoming [yes|no] (default yes)
1416db75539SBrian Somers
1426db75539SBrian SomersSet to "yes" to disable all incoming connections.  This just drops
143057fee78SBrian Somersconnections to, for example, ftp, telnet or web servers.  The NAT
1446db75539SBrian Somersmechanism prevents these connections. Technically, this option denies
145057fee78SBrian Somersall incoming TCP and UDP requests, making the NAT software a
14605dbe14bSBrian Somersfairly efficient one-way firewall.  The default is no, which will allow
1476db75539SBrian Somersall incoming connections to telnetd, ftpd, etc.
1486db75539SBrian Somers
1496db75539SBrian Somers
150057fee78SBrian Somers - nat log [yes|no]
1516db75539SBrian Somers
152057fee78SBrian SomersControls logging of NAT link creation to "/var/log/alias.log" - this
1536db75539SBrian Somersis usually only useful if debugging a setup, to see if the bug is in
154057fee78SBrian Somersthe PPP NATing.  The debugging information is fairly limited, listing
155057fee78SBrian Somersthe number of NAT links open for different protocols.
1566db75539SBrian Somers
1576db75539SBrian Somers
158057fee78SBrian Somers - nat same_ports [yes|no] (default yes)
1596db75539SBrian Somers
160057fee78SBrian SomersWhen a connection is being established going through the NAT
1616db75539SBrian Somersroutines, it will normally have its port number changed to allow the
162057fee78SBrian SomersNAT code to track it.  If same_ports is enabled, the NAT
1636db75539SBrian Somerssoftware attempts to keep the connection's source port unchanged.
16405dbe14bSBrian SomersThis will allow rsh, RPC and other specialised protocols to work
1656db75539SBrian Somers_most of the time_, at least on the host machine.  Please, do not
1666db75539SBrian Somersreport this being unstable as a bug - it is a result of the way
167057fee78SBrian SomersNAT has to work. TCP/IP was intended to have one IP address
1686db75539SBrian Somersper machine.
1696db75539SBrian Somers
1706db75539SBrian Somers
171057fee78SBrian Somers - nat use_sockets [yes|no] (default yes)
1726db75539SBrian Somers
173057fee78SBrian SomersThis is a fairly obscure option.  For the most part, the NAT
174057fee78SBrian Somerssoftware does not have to allocate system sockets when it chooses a
175057fee78SBrian SomersNAT port number.  Under very specific circumstances, FTP data
17605dbe14bSBrian Somersconnections (which don't know the remote port number, though it is
1776db75539SBrian Somersusually 20) and IRC DCC send (which doesn't know either the address or
1786db75539SBrian Somersthe port from which the connection will come), there can potentially be
1796db75539SBrian Somerssome interference with an open server socket having the same port number
18005dbe14bSBrian Somerson the ppp host machine.  This possibility for interference only exists
1816db75539SBrian Somersuntil the TCP connection has been acknowledged on both sides.  The safe
1826db75539SBrian Somersoption is yes, though fewer system resources are consumed by specifying
1836db75539SBrian Somersno.
1846db75539SBrian Somers
1856db75539SBrian Somers
186057fee78SBrian Somers - nat unregistered_only [yes|no] (default no)
1876db75539SBrian Somers
188057fee78SBrian SomersNAT normally remaps all packets coming from the local area
1896db75539SBrian Somersnetwork to the ppp host machine address.  Set this option to only map
1906db75539SBrian Somersaddresses from the following standard ranges for private, unregistered
1916db75539SBrian Somersaddresses:
1926db75539SBrian Somers
1936db75539SBrian Somers                10.0.0.0     ->   10.255.255.255
1946db75539SBrian Somers                172.16.0.0   ->   172.31.255.255
1956db75539SBrian Somers                192.168.0.0  ->   192.168.255.255  */
1966db75539SBrian Somers
1976db75539SBrian SomersIn the instance that there is a subnet of public addresses and another
1986db75539SBrian Somerssubnet of private addresses being routed by the ppp host, then only the
199057fee78SBrian Somerspackets on the private subnet will be NAT'd.
2006db75539SBrian Somers
2016db75539SBrian Somers
202057fee78SBrian Somers- nat port <proto> <local addr>:<port>  <nat port>
2036db75539SBrian Somers
204057fee78SBrian SomersThis command allows incoming traffic to <nat port> on the host
2056db75539SBrian Somersmachine to be redirected to a specific machine and port on the
2066db75539SBrian Somerslocal area network.  One example of this would be:
2076db75539SBrian Somers
208057fee78SBrian Somers    nat port tcp 192.168.0.4:telnet  8066
2096db75539SBrian Somers
21005dbe14bSBrian SomersAll traffic to port 8066 of the ppp host would then be sent to
2116db75539SBrian Somersthe telnet port (23) of machine 192.168.0.4.  Port numbers
2126db75539SBrian Somerscan either be designated numerically or by symbolic names
2136db75539SBrian Somerslisted in /etc/services.  Similarly, addresses can be either
2146db75539SBrian Somersin dotted quad notation or in /etc/hosts.
2156db75539SBrian Somers
2166db75539SBrian Somers
217057fee78SBrian Somers- nat addr <local addr> <public addr>
2186db75539SBrian Somers
2196db75539SBrian SomersThis command allows traffic for a public IP address to be
2206db75539SBrian Somersredirected to a machine on the local network.  This function
2216db75539SBrian Somersis known as "static NAT".  An address assignment of 0 refers
2226db75539SBrian Somersto the default address of the ppp host.  Normally static
2236db75539SBrian SomersNAT is useful if your ISP has allocated a small block of
2246db75539SBrian SomersIP addresses to the user, but it can even be used in the
2256db75539SBrian Somerscase of a single, dynamically allocated IP address:
2266db75539SBrian Somers
227057fee78SBrian Somers    nat addr 10.0.0.8 0
2286db75539SBrian Somers
2296db75539SBrian SomersThe above command would redirect all incoming traffic to
2306db75539SBrian Somersmachine 10.0.0.8.
2316db75539SBrian Somers
232057fee78SBrian SomersIf several address NATs specify the same public address
2336db75539SBrian Somersas follows
2346db75539SBrian Somers
235057fee78SBrian Somers    nat addr 192.168.0.2  public_addr
236057fee78SBrian Somers    nat addr 192.168.0.3  public_addr
237057fee78SBrian Somers    nat addr 192.168.0.4  public_addr
2386db75539SBrian Somers
23905dbe14bSBrian Somersthen incoming traffic will be directed to the last
2406db75539SBrian Somerstranslated local address (192.168.0.4), but outgoing
241057fee78SBrian Somerstraffic to the first two addresses will still be NAT'd
2426db75539SBrian Somersto the specified public address.
2436db75539SBrian Somers
2446db75539SBrian Somers
2456db75539SBrian Somers
2466db75539SBrian Somers4. Future Work
2476db75539SBrian Somers
248057fee78SBrian SomersWhat is called NAT here has been variously called masquerading, packet
249057fee78SBrian Somersaliasing and transparent proxying by others.  It is an extremely useful
250057fee78SBrian Somersfunction to many users, but it is also necessarily imperfect.  The
251057fee78SBrian Somersoccasional IP-encoding protocols always need workarounds (hacks).
252057fee78SBrian SomersUsers who are interested in supporting new IP-encoding protocols
2536db75539SBrian Somerscan follow the examples of alias_ftp.c and alias_irc.c.
2546db75539SBrian Somers
2556db75539SBrian SomersICMP error messages are currently handled only in the incoming direction.
256057fee78SBrian SomersA handler needs to be added to correctly NAT outgoing error messages.
2576db75539SBrian Somers
2586db75539SBrian SomersIRC and FTP exception handling make reasonable, though not strictly correct
2596db75539SBrian Somersassumptions, about how IP encoded messages will appear in the control
2606db75539SBrian Somersstream.  Programmers may wish to consider how to make this process more
2616db75539SBrian Somersrobust.
2626db75539SBrian Somers
263057fee78SBrian SomersThe NAT engine (alias.c, alias_db.c, alias_ftp.c, alias_irc.c
2646db75539SBrian Somersand alias_util.c) runs in user space, and is intended to be both portable
2656db75539SBrian Somersand reusable for interfaces other than ppp.  To access the basic engine
26605dbe14bSBrian Somersonly requires four simple function calls (initialisation, communication of
267057fee78SBrian Somershost address, outgoing NAT and incoming de-NATing).
2686db75539SBrian Somers
2696db75539SBrian Somers
2706db75539SBrian Somers
27105dbe14bSBrian Somers5. Authors / Acknowledgements
2726db75539SBrian Somers
273de97d73dSBrian SomersCharles Mott (cm@linktel.net)  <versions 1.0 - 1.8, 2.0, 2.1>
2746db75539SBrian SomersEivind Eklund (perhaps@yes.no) <versions 1.8b - 1.9, new ppp commands>
2756db75539SBrian Somers
2766db75539SBrian SomersListed below, in chronological order, are individuals who have provided
2776db75539SBrian Somersvaluable comments and/or debugging assistance.
2786db75539SBrian Somers
2796db75539SBrian Somers    Gary Roberts
2806db75539SBrian Somers    Tom Torrance
2816db75539SBrian Somers    Reto Burkhalter
2826db75539SBrian Somers    Martin Renters
2836db75539SBrian Somers    Brian Somers
2846db75539SBrian Somers    Paul Traina
2856db75539SBrian Somers    Ari Suutari
2866db75539SBrian Somers    J. Fortes
2876db75539SBrian Somers    Andrzej Bialeki
2886db75539SBrian Somers
2896db75539SBrian Somers
2906db75539SBrian Somers
2916db75539SBrian Somers6. Revision History for Aliasing Code
2926db75539SBrian Somers
2936db75539SBrian SomersVersion 1.0: August 11, 1996 (cjm)
2946db75539SBrian Somers
2956db75539SBrian SomersVersion 1.1:  August 20, 1996  (cjm)
2966db75539SBrian Somers    PPP host accepts incoming connections for ports 0 to 1023.
2976db75539SBrian Somers
2986db75539SBrian SomersVersion 1.2:  September 7, 1996 (cjm)
2996db75539SBrian Somers    Fragment handling error in alias_db.c corrected.
3006db75539SBrian Somers
3016db75539SBrian SomersVersion 1.3: September 15, 1996 (cjm)
30205dbe14bSBrian Somers    - Generalised mechanism for handling incoming connections
3036db75539SBrian Somers      (no more 0 to 1023 restriction).
3046db75539SBrian Somers    - Increased ICMP support (will handle traceroute now).
3056db75539SBrian Somers    - Improved TCP close connection logic.
3066db75539SBrian Somers
3076db75539SBrian SomersVersion 1.4: September 16, 1996
3086db75539SBrian Somers    Can't remember (this version only lasted a day -- cjm).
3096db75539SBrian Somers
3106db75539SBrian SomersVersion 1.5: September 17, 1996 (cjm)
3116db75539SBrian Somers    Corrected error in handling incoming UDP packets
3126db75539SBrian Somers    with zero checksum.
3136db75539SBrian Somers
3146db75539SBrian SomersVersion 1.6: September 18, 1996
3156db75539SBrian Somers    Simplified ICMP data storage.  Will now handle
3166db75539SBrian Somers    tracert from Win95 as well as FreeBSD traceroute.
3176db75539SBrian Somers
31805dbe14bSBrian SomersVersion 1.7: January 9, 1997 (cjm)
3196db75539SBrian Somers    - Reduced malloc() activity for ICMP echo and
3206db75539SBrian Somers      timestamp requests.
3216db75539SBrian Somers    - Added handling for out-of-order IP fragments.
3226db75539SBrian Somers    - Switched to differential checksum computation
3236db75539SBrian Somers      for IP headers (TCP, UDP and ICMP checksums
3246db75539SBrian Somers      were already differential).
3256db75539SBrian Somers    - Accepts FTP data connections from other than
3266db75539SBrian Somers      port 20.  This allows one ftp connections
3276db75539SBrian Somers      from two hosts which are both running packet
3286db75539SBrian Somers      aliasing.
3296db75539SBrian Somers
33005dbe14bSBrian SomersVersion 1.8: January 14, 1997 (cjm)
3316db75539SBrian Somers    - Fixed data type error in function StartPoint()
3326db75539SBrian Somers      in alias_db.c (this bug did not exist before v1.7)
3336db75539SBrian Somers
3346db75539SBrian SomersVersion 1.8b: January 16, 1997 (Eivind Eklund <perhaps@yes.no>)
3356db75539SBrian Somers    - Upgraded base PPP version to be the source code from
3366db75539SBrian Somers      FreeBSD 2.1.6, with additional security patches.  This
3376db75539SBrian Somers      version should still be possible to run on 2.1.5, though -
3386db75539SBrian Somers      I've run it with a 2.1.5 kernel without problems.
3396db75539SBrian Somers      (Update done with the permission of cjm)
3406db75539SBrian Somers
3416db75539SBrian SomersVersion 1.9: February 1, 1997 (Eivind Eklund <perhaps@yes.no>)
3426db75539SBrian Somers    - Added support for IRC DCC (ee)
3436db75539SBrian Somers    - Changed the aliasing routines to use ANSI style throughout -
3446db75539SBrian Somers      minor API changes for integration with other programs than PPP (ee)
3456db75539SBrian Somers    - Changed the build process, making all options switchable
3466db75539SBrian Somers      from the Makefile (ee)
3476db75539SBrian Somers    - Fixed minor security hole in alias_ftp.c for other applications
3486db75539SBrian Somers      of the aliasing software.  Hole could _not_ manifest in
3496db75539SBrian Somers      PPP+pktAlias, but could potentially manifest in other
3506db75539SBrian Somers      applications of the aliasing. (ee)
3516db75539SBrian Somers    - Connections initiated from packet aliasing host machine will
3526db75539SBrian Somers      not have their port number aliased unless it conflicts with
3536db75539SBrian Somers      an aliasing port already being used. (There is an option to
3546db75539SBrian Somers      disable this for debugging) (cjm)
3556db75539SBrian Somers    - Sockets will be allocated in cases where there might be
3566db75539SBrian Somers      port interference with the host machine.  This can be disabled
3576db75539SBrian Somers      in cases where the ppp host will be acting purely as a
3586db75539SBrian Somers      masquerading router and not generate any traffic of its own.
3596db75539SBrian Somers      (cjm)
3606db75539SBrian Somers
3616db75539SBrian SomersVersion 2.0: March, 1997 (cjm)
36205dbe14bSBrian Somers    - Incoming packets which are not recognised by the packet
3636db75539SBrian Somers      aliasing engine are now completely dropped in ip.c.
3646db75539SBrian Somers    - Aliasing links are cleared when a host interface address
36505dbe14bSBrian Somers      changes (due to re-dial and dynamic address allocation).
3666db75539SBrian Somers    - PacketAliasPermanentLink() API added.
3676db75539SBrian Somers    - Option for only aliasing private, unregistered IP addresses
3686db75539SBrian Somers      added.
3696db75539SBrian Somers    - Substantial rework to the aliasing lookup engine.
3706db75539SBrian Somers
3716db75539SBrian SomersVersion 2.1: May, 1997 (cjm)
3726db75539SBrian Somers    - Continuing rework to the aliasing lookup engine to support
3736db75539SBrian Somers      multiple incoming addresses and static NAT.
37405dbe14bSBrian Somers    - Now supports outgoing as well as incoming ICMP error messages/
3756db75539SBrian Somers    - PPP commands to support address and port redirection.
376a9f484e5SJordan K. Hubbard
377