How to associate a route with an interface?
1 - Here is a copied solution but deprecated:

First of all, you have to be a local admin.

Open a terminal and change to the StartupItems directory

cd /Library/StartupItems


Then create a new directory with root priviledges, e.g. AddRoutes and change into it

sudo mkdir ./AddRoutes
cd ./AddRoutes


Now you have to create and edit the bash script

sudo touch ./AddRoutes
sudo nano ./AddRoutes


Paste the following Lines into the bash script and adapt it for your network

#!/bin/sh

# Set static routing tables

. /etc/rc.common

StartService ()
{
sleep 10
ConsoleMessage "Adding Static Routing Table"
sudo /sbin/route add -net 10.0.0.0 -netmask 255.0.0.0 -gateway w.x.y.z
}

StopService ()
{
return 0
}

StopService ()
{
return 0
}

RestartService ()
{
return 0
}

RunService "$1"


When you finished with the script, save it.

Then create the corresponding plist.

sudo touch StartupParameters.plist
sudo nano StartupParameters.plist


When you created the plist file, paste the following lines into it.

{
Description = "Add static routing tables";
Provides = ("AddRoutes");
Requires = ("Network");
OrderPreference = "None";
}


When you finished the plist file, save it.

Finally you have to set the access rights

sudo chmod 755 /Library/StartupItems/AddRoutes/*


At the end you have to reboot and now your permanent static routes are set.

You can verify with the following

netstat -nr


2 - Here you may find a more up-to-date solution involving a little program:

staticroute


  Configured static routes survive a restart, and will automatically be added and removed as network interfaces go up and down.