freebsd-dev/usr.sbin/ppp
Brian Somers 687d0cdeb3 Remove the syslog stuff, and allow various return values
in uu_lock().  Add uu_lockerr() for turning the results of
uu_lock into something printable.  Remove bogus section in man page
about race conditions allowing both processes to get the lock.
Include libutil.h and use uu_lock() correctly  where it should.

Suggested by:	ache@freebsd.org
1997-03-31 22:51:00 +00:00
..
alias_db.c The 2.2-Beta version doesn't have the brackets after the if statement. 1997-01-10 08:32:05 +00:00
alias_ftp.c Fix many buffer overruns in the code. Specifically, disallow ExpandString 1997-01-10 07:53:28 +00:00
alias_util.c The infamous IP aliasing code for ppp, modified to work as a runtime option 1996-12-12 14:39:47 +00:00
alias.c Compute IP checksums in addition to TCP checksums when necessary in the 1996-12-21 18:34:52 +00:00
alias.h Fixed prototypes of PacketAliasIn/Out. (cosmetic) 1996-12-19 00:41:42 +00:00
alias.p The infamous IP aliasing code for ppp, modified to work as a runtime option 1996-12-12 14:39:47 +00:00
arp.c osreldate.h stuff suggested by: Eivind Eklund 1997-02-25 14:05:17 +00:00
arp.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
async.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
auth.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
auth.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
ccp.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
ccp.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
cdefs.h cdefs cleanup 1997-03-09 20:09:17 +00:00
chap.c Use srandomdev() to initialize RNG 1997-03-24 16:01:46 +00:00
chap.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
chat.c Reviewed by: ache@freebsd.org 1997-03-13 12:45:35 +00:00
chat.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
command.c Use srandomdev() to initialize RNG 1997-03-24 16:01:46 +00:00
command.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
defs.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
filter.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
filter.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
fsm.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
fsm.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
global.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
hdlc.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
hdlc.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
ip.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
ip.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
ipcp.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
ipcp.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
lcp.c Closes pr 2711 1997-03-13 21:22:09 +00:00
lcp.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
lcpproto.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
log.c Requested by: Harlan Stenn <Harlan.Stenn@pfcs.com> 1997-03-13 14:53:55 +00:00
log.h Requested by: Harlan Stenn <Harlan.Stenn@pfcs.com> 1997-03-13 14:53:55 +00:00
lqr.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
lqr.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
main.c Closes pr 2711 1997-03-13 21:22:09 +00:00
main.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
Makefile Remove the syslog stuff, and allow various return values 1997-03-31 22:51:00 +00:00
mbuf.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
mbuf.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
modem.c Remove the syslog stuff, and allow various return values 1997-03-31 22:51:00 +00:00
modem.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
os.c osreldate.h stuff suggested by: Eivind Eklund 1997-02-25 14:05:17 +00:00
os.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
pap.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
pap.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
passwdauth.c Fix many buffer overruns in the code. Specifically, disallow ExpandString 1997-01-10 07:53:28 +00:00
passwdauth.h Add support for the Evil Microsoft ppp extentions. Yes, they did it 1996-10-06 13:32:37 +00:00
pathnames.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
phase.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
ppp.8 Oops - forgot to document the new -HUP action. 1997-03-13 21:39:41 +00:00
ppp.8.m4 Oops - forgot to document the new -HUP action. 1997-03-13 21:39:41 +00:00
pred.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
pred.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
README.alias The infamous IP aliasing code for ppp, modified to work as a runtime option 1996-12-12 14:39:47 +00:00
README.nat The infamous IP aliasing code for ppp, modified to work as a runtime option 1996-12-12 14:39:47 +00:00
route.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
route.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
sig.c Reviewed by: ache@freebsd.org 1997-03-13 12:45:35 +00:00
sig.h Reviewed by: ache@freebsd.org 1997-03-13 12:45:35 +00:00
slcompress.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
slcompress.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
systems.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
systems.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
timeout.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
timer.c Reviewed by: ache@freebsd.org 1997-03-13 12:45:35 +00:00
vars.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
vars.h Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
vjcomp.c Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00

User PPP Packet Aliasing

0. Contents
    1. Background
    2. Setup
    3. Future Development


1. Background

User ppp has embedded packet aliasing (IP masquerading) code.
When this capability is enabled by the "-alias" command line
option, the ppp host will automatically alias IP packets forwarded
from a local network so that they appear to come from the ppp
host machine.  Incoming packets from the outside world are then
appropriately de-aliased.

The process of aliasing involves both the IP address as well as
TCP and UDP port numbers.  ICMP packets can be aliased by either
their id or sequence numbers.

This software was specifically meant to support users who have
unregistered, private address IP networks (e.g. 192.168.0.x or
10.0.0.x addresses).  The ppp host can act as a gateway for these
networks, and computers on the local area net will have some
degree of internet access without the need for a registered IP
address.  Additionally, there will be no need for an internet
service provider to maintain routing tables for the local area
network. 

A disadvantage of packet aliasing is that machines on the local
network, behind the ppp host, can establish tcp connections and
make udp inqiries (such as domain name service requests), but these
machines, other than the ppp host itself, are not visible from
the outside world.  There is, in effect, a partial firewall.

A second disadvantage is that "IP encoding" protocols, which send
IP address or port information within the data stream, are not
supported unless exception code has been put in place.  A workaround
for ftp, which is the most well known of the IP encoding protocols,
has been developed in this implementation, so users do not have
to depend on using the ftp passive mode, as is sometimes the case
with other masquerading solutions.

All standard, non-encoding TCP and UDP protocals are supported,
Examples of these protocols are http, gopher and telnet.  The
standard UDP mode of RealAudio is not presently supported,
but the TCP mode does work correctly.  IRC is reported by users
to work in some, but not all, modes.

The packet aliasing code also handle many ICMP messages.  In
particular, ping and traceroute are supported.



2. Packet Aliasing Setup

It is recommended that correct ppp operation first be verified
without packet aliasing enabled.  Then ppp can be started with
the "-alias" option in the command line.  Correct network operation
of the ppp host in packet aliasing mode should then be verified.
Finally, machines on the private network should be checked to see
whether they can access the internet.

Since the masquerading software aliases all packets, whether
they come from the host or another computer on the local area
network, a correctly operating ppp host will indicate that the
software should work properly for other computers on the private
network.  

If the ppp host can access the internet, but other computers on
the local network cannot do this, then it should be checked that
IP forwarding is enabled on the ppp host and that the other
computers use this machine as a gateway.  Of course, proper
communications between machines within the local area network
should also be verified (do they use consistent subnet addresses
and masks?).



3.  Future Development

What is called packet aliasing here has been variously called
masquerading, network address translation (NAT) and transparent
proxying by others.  It is an extremely useful function to
many users, but it is also necessarily imperfect.  Workarounds
(hacks) are always needed for the occasional IP-encoding
protocols.

The specific solution implemented here does not block off or
reserve any segment of TCP or UDP ports on the ppp host for use
by the masquerading function.  No communication to the kernel
is needed in this matter.  All packets are aliased, whether
they originate from the ppp host or other computers on the
local network.  This is a central issue, and some programmers
may wish to handle this differently.

The packet aliasing engine (alias.c, alias_db.c, alias_ftp.c
and alias_util.c) runs in user space, and is intended to be
both portable and reusable for interfaces other than ppp.  The
basic engine is accessed by four simple function calls
(initialization, communication of host address, outgoing
aliasing and incoming de-aliasing).

Limited IP fragment handling exists.  Once the packet aliasing
software sees the header fragment of a packet, all other fragments
will be correctly forwarded.  However, if the header fragment
does not come first, then some fragments will be lost.

Charles Mott (cmott@srv.net)
December 4, 1996