We describe a simple and practical algorithm for compact routing on graphs which admit compact and balanced vertex separators. Using a recursive nested dissection of then-vertex graph based on these separators, we construct routing tables with as few as O(log n) entries per vertex in a preprocessing step. They support handshaking-based routing on the graph with moderate stretch, where the handshaking can be implemented similarly to a DNS lookup. We describe a basic version of the algorithm that requires modifiable headers and a more advanced version which eliminates this need and provides better stretch. A number of algorithmic parameters control a graceful tradeoff between the size of the routing tables and the stretch. Our routing algorithm is most effective on planar graphs and unit disk graphs of moderate edge/vertex density.