While trying to get a 2008 server to connect to a sql server, I noticed a change in the 2008 IP stack that has me a bit flummoxed. I'm looking for either an OS way to override this, or a programmatic way in .NET to override this.
For the sake of this argument, assume I have a web server with multiple IP addresses to server multiple sites, connecting to multiple resources (web service, sql, etc) behind a firewall.
SERVER IP: 10.10.10.1
SITE1 IP: 10.10.10.10
SITE2 IP: 10.10.10.11
SQL SERVER: 10.10.10.2
WEB SERVICE: 10.10.10.15
The firewall is setup naturally to deny all, allow only what is needed. In other words:
ALLOW FROM 10.10.10.1 TO 10.10.10.2
ALLOW FROM 10.10.10.1 TO 10.10.10.15
DENY ALL
Prior to Windows 2008, Windows 2000/2003 always used the machines base IP (10.10.10.1) when requesting network resources. Thus, the firewall rules were met and access was granted. Under 2008, it appears that it's picking the closest match:
Connecting to 10.10.10.2 comes from IP 10.10.10.1. Firewall is happy. Connecting to 10.10.10.15 comes from IP 10.10.10.11, firewall denies connections.
Removing all virtual IPS from the NIC of course makes things work because every will then come fro 10.10.10.1
Now, I understand slightly that were this machine to have two NICs, this makes sense because of changes to implement RFC3484 and IPv6 (http://support.microsoft.com/kb/968920) and strong/weak host model comes into play, but for the life of me, I don't understand why this should have changed how IP works with a single NIC card.
I have a support case open and I'm getting nowhere. I hear muttering of "just open up your firewall to allow connections from 10.10.10.11". That's not practical. This would mean adding a allow rule for every ip address on a multihomed single nic machine just for windows 2008. I can't believe poking more holes in your firewall just for 2008s ip stack is a good answer.
Is there a way to disable this "feature" in 2008 at the machine level? Is there a way to disable this in .NET at the machine level? Is there a way to disable this per connection (SqlConnection, WebClient)?