By the way, the routing module does have a “route cache” that attempts to channel all traffic to one interface once it has decided on the first packet which interface to use. But looking at it in action it seems to have a very short life. A second or two maybe. (I haven’t found any description of the exact life time of cache entries nor have I found a way to modify its behavior.) For HTTP/S I think you would want to cache the entries for several minutes.
That would be a very nice workaround. I will try to see if we can find a way to raise this value to a more convenient number.
Looking at http://lartc.org/howto/lartc.kernel.obscure.html it seems that we might be able to change the route cache times by writing into /proc/sys/net/ipv4/route/gc_elasticity
On my Zeroshell box the value was 8 even though the LARTC page said the default was 300. You might want to change that to 300 and see if your HTTP/S sites work okay. We will have to go back and verify that the route cache is flushed when we detect an interface going down. I think it is but it has been a while since I looked at that area.
Edit: The /proc/sys/net/ipv4/route/gc_* values don’t seem to work as I’d hoped… Nor as the descriptions I’ve been able to find on the web indicate. At least I don’t see the results change much when I look at the routing cache with the “ip route list cache” command. More research needed.