So I've just put together a new router and I'm having a little trouble getting the packets going where I want them. The machine is running FreeBSD 9.01, and current versions of BIND, ISC's DHCP server and PF. Here's my setup:

After following the (outdated) guide "Build a Home-Office Router Using FreeBSD and PF" to the letter, I'm still having problems. The DHCP server is giving my LAN computers addresses, and they can talk to each other and the FreeBSD machine, and the FreeBSD machine can access the internet, but none of the LAN computers can get to the internet through the FreeBSD machine. I know I've screwed up the routing somehow, but I didn't want to change anything until I've consulted the experts.

I'm no expert on FreeBSD, as I don't use it, but the first thing I'd do is ensure that packet forwarding is enabled. Without it, your FreeBSD machine will not act as a router.

If you've confirmed you have that enabled, post your pf.conf here. But don't do that until you've you've edited your post above to hide your actual Internet address. There's no need to post that, and it might lead to an attack if you have misconfigured PF.

#pfctl -sr will show you what rules are currently loaded. If the default rules are loaded instead of your pf.conf, then you'll know this is the reason. You can test your rules: #pfctl -nf /etc/pf.conf will do a syntax check. No output = good.

If your rules are syntactically correct, the next step would be to check to see which rules are being applied to your traffic. You do this by adding the log option to your block and your pass rules and then monitoring rule use traffic on the pflog0 device with tcpdump(1).