I’ve seen a couple of posts on groups recently with people asking why they’re unable to NetBoot clients. Personally, I always verify that clients are able to obtain a DHCP lease and that the NetBoot server shows up in the Startup Disk System Preference pane. Provided those two things work then you will usually be able to NetBoot. Both of these can be verified when booted from an installer or an installed system (checking both never hurt anyone).
Next, break out your crossover cable (well, many a Mac doesn’t need one any more). If you can NetBoot when connected directly to a server then you’re usually looking at an infrastructure issue, be it routing and subnets or switching. Make sure the server can serve up DHCP though, since clients are required to get DHCP leases to NetBoot.
If you can’t NetBoot when connected directly to the server then I usually look at the image. If you manually restore an image to the client system will it boot a client? This often points us in the direction of looking at some kind of problem with the build train of the client being newer than the image, a MAC or machine type filter, etc. This same question can often be answered by using an older machine that you know is either part of the MAC or machine type filters. If the client can boot with the image restored to it and no other clients can boot NetBoot, even when connected directly to the server (or on a flat switching & routing topology) then make sure that DHCP is on.
Those are the most basic steps. But what if you’ve got multiple subnets? Then the bless command may very well be your friend. Not very scalable? Well, then look at configuring bootp relays. Bootpd is built into every Mac. Simply open up the /etc/bootp.plist and look for the keys to enable a relay (relay_enabled and then relay_ip_list, which is actually an array). Configure those as needed and launchctl to start bootpd. Still having problems, launchctl to stop and unload bootpd and then use /usr/libexec/bootpd -dv to start bootpd again. This gives you lots and lots of logs. Find the client in the DHCP table, figure out the DHCP and watch the conversations from the client. No conversation, you’re still not finding the NetBoot server. If there is a conversation then the problem will manifest itself in the verbose output for bootpd.
There’s bound to be tons of other things, but I would wager that the steps above help me in 99% of the cases I’ve seen, so I hope they’ll help you too. Happy NetBooting!