Yesterday, the Cisco router preferred the secondary circuit (a DSL line) over the primary circuit (an Ethernet port) and I couldn't figure why. I had programmed in weighted routes but the Cisco seemed to read “take the Ethernet port over the DSL port” as “take not the Ethernet port over the DSL port.”
First attempt at a fix: weight the routes heavily (as in fifteen times) in favor of the Ethernet port. Still the Cisco took it as “take not at all the Ethernet port over the DSL port.”
Second attempt at a fix: who knows? Maybe I have the weights backwards? So, reverse the weight values. It was then I realized that the Cisco was in fact hearing “do not even think of the Ethernet port unless the DSL port is down.” Didn't matter how I weighed the routes, the Cisco would refuse to route over the Ethernet unless the DSL was down.
Which is the exact opposite of what we want.
So G, our Cisco consultant took a look into the problem and came up with the answer—that's the way Cisco's work.
Basically, the Cisco router will select a route according to the following:
- All connected interfaces go first.
- Route to the most specific subnet second.
- Only now are weighted routes considered.
The DSL connection was being routed on a connected interface, so we could have weighted the DSL connection with 17 tons and made the Ethernet interface weightless, but because the DSL route is directly connected, it would be preferred.
The problem was fixed by changing the DSL routing destination, so it was neither directly connected, nor a specific subnet.