If you find OpenStreetMap a bit difficult to plan off-road routes, try OpenRouteService

An interactive map displays a route (41 km) with options to download in various formats, including JSON and GPX.

OpenRouteService (ORS) is an open source route planner service that leverages OpenStreetMap data to provide a variety of routing and spatial analysis services. It actually uses a forked and modified version of the GraphHopper routing engine (another option that can be used, and which is present inside OpenStreetMap as a routing alternative).

I was trying to plan a 4×4 trail between two places, but was finding that OpenStreetMap was routing me via a gravel road I did not want to follow. OSM also only has one export format which is GeoJSON. Switching to GrassHopper within OSM did actually help choose the correct route, but then I found OpenRouteService.

ORS has quite a few more options for adding and moving waypoints which allows you to more precisely plan your route. It also have 5 different export options including Standard GPX which I wanted. It allows a maximum speed to be set too, but sadly the minimum is 80km/h where I’d prefer to have set it to 50km/h for the route I was taking (still I can just mentally adjust the time).

Interestingly too, you can deploy it yourself using Docker, with a Docker Compose file.

Once you can your route, you can import that into any other navigation app, and use that in your vehicle.

See https://maps.openrouteservice.org