I have a situation where my company (we are a small web design/hosting company) is too small to justify our own IP blocks and ASN's. We have multiple (two currently) ISP connections from different vendors, thus two different address spaces. My ultimate goal with all this is to assure uptime on my customer sites so that they are still running if the connection to either vendor is down for some reason. Here's the configuration (fake IP addresses used for clarity).
Vendor 1: 220.127.116.11
Cisco 2501 router at 18.104.22.168
Vendor 2: 22.214.171.124
Microsoft ISA server at 126.96.36.199
Both subnets are physically on the same wire.
Because neither ISP can guarantee 100% reliability, but we have customers who want their sites running 100% of the time, I thought I would put two IP addresses, one from each network, on my webserver like so:
I have tried this with multiple IP's and gateways on a single card, and on a separate card for each subnet. In both cases, DNS for www.mydomain.com
has two entries, 188.8.131.52 and 184.108.40.206.
What happens in practice is that only one gateway is active, and only the address in that gateway's subnet appears to reply to any incoming request. For some reason I do not fully understand yet, if a request comes in from Vendor 2's network and the reply tries to go out thru Vendor 1's gateway, it gets dropped somewhere. Traffic flow looks like this (assume Vendor 1 is the "active" default gateway at the moment):
incoming request 1 -> 220.127.116.11 -> 18.104.22.168 (processed by server) reply 1 -> 22.214.171.124 -> routed to original requester.
incoming request 2 -> 126.96.36.199 -> 188.8.131.52 (processed by server) reply 2 -> 184.108.40.206 -> disappears on the way back.
What I want to accomplish, but don't have the slightest idea about how, is to tell Windows to send reply traffic back the same way it came in. So, if the request came to 220.127.116.11 the reply traffic should go to 18.104.22.168; if it came to 22.214.171.124 the reply should go to 126.96.36.199. Seems like a simple enough thing to want, why can't I figure it out? Or is there a better/easier solution I haven't thought of?