Ridewithgps. It’s pretty reliable with google maps, less so if you switch to OSM.
It uses Google for the route calculation regardless of which map you’re viewing. This means that when you view OSM/OCM you’ll see a lot of trails which aren’t used by Google Maps for routing.
The way I tend to do it is this:
For purely road routes, I view Google Maps and use “Follow roads” with the “Driving” option, which is pretty reliable at keeping you on tarmac. I usually set the start and end points and then drag the route to where I want it (if you let it do its own thing you’ll end up on major roads, but at least it won’t send you down unsurfaced tracks). If I need to check details I normally have a Google Maps tab open which I can switch to and check Streetview.
For mixed road/off-road routes with the CX bike, I normally view OpenCycleMap and primarily use “Follow roads” with the “Cycling” option, which means Google’s routing starts using dirt tracks as well as tarmac. Then when I get to a bit that’s visible on OCM but not routable by Google (eg green dashed paths on OCM, which are often bridleways) I switch to “Draw lines” mode and drag the route manually over that section. I tend to have Bing Maps open in another tab so I can check the OS map, which gives a better steer as to what’s likely to be easily covered on a CX bike.
For full off-road routes I tend to use mostly “Draw lines” on OCM, switching to “Follow roads” where there’s a significant road section, and again I have Bing Maps open in another tab.
All works well for me.