I have a plane with a gun that shoots a bullet by instantiating a bullet prefab with a bullet physics/damage application script attached. I need this to work over the server, so should I use network.instantiate for it?
you don’t need instantiate here, just use RPC
Answer #1: Yes. You absolutely should use Network.Instantiate() from the server.
Looking forward, when your clients fire their weapons, they should use an RPC (R emote P rocedure C all, pretty much a public facing function) which talks to the server and tells it to instantiate a bullet at the muzzle’s position and rotation.
You’ll be getting a lot of milage out of RPCs, too; when an instantiated object moves, the server should calculate the move, and send an RPC to each of the clients to tell them to perform the move. That’s a different, but related topic.
Other cool gameplay events? RPCs also.
Another thing to know: When your bullet is done, make sure you Network.Destroy() the object so that all your clients see it destroyed, again on the server.