OK, so it is a FreeBSD box. The original post was a little confusing, but I think I have it now ;-).
natd is the daemon that runs when you are using FreeBSD for network address translation, and 'ipfw' is one of the firewalls through which natd can be filtered.
So, you have a FreeBSD machine, and the kernel has been recompiled to support ipfw, and you are running a natd gateway, and you have two network cards; an ed0 and an xl0 (yes, it is with an "L" not a number one).
I take it you have configured one card for the external network, connecting to your DSL or Cable modem, while the other card is running a private IP address, such as 192.168.1.1, or 10.1.1.1, and you have that one connected to a LAN hub to act as a server for your Windows machine. Right so far?
What is the output of the command "ifconfig -a" (you can X out your external IP address; in fact, please do). Also, where are you initializing natd? In rc.local? What is your init script for natd and ipfw?
Are you trying to use the DHCP server to provide an IP address to your Windows machine, or are you assigning an IP address manually?
At the very minimum, you need the following:
1. have both network cards configured in rc.conf (if you set them up from the install interface, or from /stand/sysinstall, they should both be in rc.conf). One card should be for the external address, and one should have an IP address in a private range.
2. have the kernel compiled for ipfw support
3. have a startup script that calls natd, and at least a minimal ipfw rules script. If your firewall rules are very simple, they can even reside right in a startup script, such as /etc/rc.local
4. Have your Windows box connected to the hub, either with an appropriate IP address assigned, or as a DHCP client, if your server is running DHCP.
-----
Here is an example /etc/rc.local startup script, using interface "ed0" as your external IP address, with minimal firewall rules that will pretty much allow anything from your local network to connect to the web. (if you are concerned about security, you shouldn't just rely on this basic ruleset):
natd -interface ed0
/sbin/ipfw -f flush
/sbin/ipfw add divert natd all from any to any via ed0
/sbin/ipfw add pass all from any to any
-------------------------------------------
"Calculus is just the meaningless manipulation of higher symbols"
-unknown F student