Date: Mon, 5 Jan 1998 22:44:37 -0500 From: Charles Henrich <henrich@crh.cl.msu.edu> To: freebsd-questions@crh.cl.msu.edu Subject: A day in the life of a packet (NATD) ? Message-ID: <19980105224436.05995@crh.cl.msu.edu> Resent-Message-ID: <199801060344.WAA16207@crh.cl.msu.edu>
next in thread | raw e-mail | index | archive | help
Hi Guys, could someone out there who knows the FreeBSD internals write up a
quick "Day in the life of a packet" document for the NATD/IPFW case?
Let me clearly display my ignorance by explaining what I think is going on as
a way of documenting what would be cool to have for inclusion into the FAQ's
on NATD/FreeBSD.
Network:
10.0.0.0/8 --- ([ED1] FreeBSD Box [ED0]) --- The Internet
IPFW Rules (Im creating these in the fly so they could be syntactically
incorrect, but I think the design is correct):
100 allow all from any to any via lo0
200 divert 6668 all from any to any via ed0
300 allow all from THISHOST to any
310 allow all from any to THISHOST
400 allow all from 10.1.0.0/16 to any
500 allow all from 10.0.0.0/8 to INETPROXY
510 allow all from INETPROXY to 10.0.0.0/8
6500 deny all from any to any
Netstat -r:
Destination Gateway Flags Refs Use Netif Expire
default MYINETIP UGSc 31 6956351 ed0
10 link#2 UC 0 0
10.0.0.1 0:0:c0:e1:d0:5c UHLW 0 196 lo0
10.255.255.255 ff:ff:ff:ff:ff:ff UHLWb 0 107 ed1
localhost localhost UH 11 7600 lo0
A user on host 10.0.0.2 issues a ping for INETPROXY. The ping packet is
picked up by interface ed1. The packet is processed by (IPFW first?) which
tools on through the list ipfw rules. This packet is matched by rule 500, and
is then passed onto the (FreeBSD network core?) which decides the packet needs
to be routed through interface ed0 as the default gateway. The packet is
again processed by the IPFW rules as it passes into ed0, this time rule 200
matches the packet.. NATD see's this is a packet destined for the internet
(HOW does it know??) and replaces 10.0.0.2 with MYINETIP. Then the packet is
readback into the firewall code.. The packet then matches ruleset 300 and is
passed back to the FreeBSD network code, which sends it out ed0.
The ping reply is then processed inbound on ed0 by the ipfw rules.. Rule 200
again matches and the packet is sent to Natd which replaces the destination IP
with 10.0.0.2, and sends it back to the firewall code, which allows it to pass
on rule 510.. Then back to the FreeBSD network code, which determines the
packet needs to be sent out interface ed1... Back into the firewall rules,
again the packet is passed through based on rule 510. Back into FreeBSD's
network code which burps the packet out ed1...
So, how much of this is correct, and how much is fantasy made to fit my
perception of reality? :)
-Crh
Charles Henrich Michigan State University henrich@msu.edu
http://pilot.msu.edu/~henrich
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980105224436.05995>
