I may not understand the bit about the gravity, but why not use Unity’s gravity? Opting out of that, I would imagine you would, depending on the kind of track-clinging you want, either attach a script that effects a velocityChange* force downwards (world oriented) at whatever your gravity value is, or effect a velocityChange* downwards(locally oriented).
The first method will result in normal gravity behavior. The second method will result in the craft being pulled relative to it’s own down (which may be unfortunate if it flips). However, if you implement a constant rotation so that its Y axis is always perpendicular to the track, it will “cling”. You keep it oriented to the track like that by casting a ray down its Y axis, getting the normal of the part of the track it hits, then using:
transform.rotation = Quaternion.FromToRotation (Vector3.up, normal);
I would definitely not recommend using the second method, as you have to account for a few things that can go wrong related to the orientation of the craft.
A better method, if you want the general target behavior of the second method without so many difficulties, would be to cast a ray down to the track, get it’s normal, and multiply that Vector by your gravity value. Then just apply the resultant vector (but it should be negative) as a velocityChange* to your craft.
*I think velocityChange is the right force mode to use here. You might have to try the others to see which is correct.
Now, for hovering, I’m not sure. I’ve read up on spring joints, and I know they pull on objects like rubber bands, but it doesn’t explicitly say it pushes on objects like a spring. I imagine it does. Try adding an empty game object with a rigidbody below your craft, roughly the distance at which it should be hovering. Set your minimum distance to this distance. If my guess is right, it should result in the hovercraft hovering above the ground, if not, well, at least you know that method doesn’t work. 