在尝试将2008服务器连接到sql server时,我注意到2008 IP堆栈中的一个更改让我感到有点沮丧。我正在寻找一种OS方法来覆盖它,或者在.NET中采用编程方式来覆盖它。
为了这个论点,假设我有一个具有多个IP地址的Web服务器来服务多个站点,连接到防火墙后面的多个资源(Web服务,sql等)。
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
防火墙自然会设置为拒绝所有内容,只允许所需内容。换句话说:
ALLOW FROM 10.10.10.1 TO 10.10.10.2
ALLOW FROM 10.10.10.1 TO 10.10.10.15
DENY ALL
在Windows 2008之前,Windows 2000/2003在请求网络资源时始终使用计算机基础IP(10.10.10.1)。因此,满足防火墙规则并授予访问权限。在2008年,它似乎正在挑选最接近的匹配:
连接到10.10.10.2来自IP 10.10.10.1。防火墙很开心。 连接到10.10.10.15来自IP 10.10.10.11,防火墙拒绝连接。
从NIC中删除所有虚拟IPS当然会使事情发生,因为每个人都会来10.10.10.1
现在,我稍微了解一下,这台机器有两个网卡,这是有道理的,因为实现RFC3484和IPv6(http://support.microsoft.com/kb/968920)的变化和强/弱主机模型发挥作用,但在生命中我,我不明白为什么这应该改变IP如何使用单个NIC卡。
我有一个支持案例,我无处可去。我听到“只是打开防火墙以允许10.10.10.11的连接”的嘀咕声。那不切实际。这意味着只为Windows 2008在多宿主单机器上为每个IP地址添加一个允许规则。我不敢相信在防火墙中挖出更多漏洞只是因为2008s ip stack是一个很好的答案。
有没有办法在2008年在机器级别禁用此“功能”? 有没有办法在.NET中在机器级别禁用它? 有没有办法禁用每个连接(SqlConnection,WebClient)?
答案 0 :(得分:0)
您正在看到自动路由度量计算的副作用。当多个地址具有到地址的路由并且启用了自动度量(在TCP下的高级...设置中)时,Windows将使用try并预测到该地址的“最快”路径。
我怀疑你的接口(虚拟或其他)都有类似的路由指标,因此选择是非确定性的。您可以通过在 .10 / .11地址上设置更高的路由指标来鼓励您使用“后端”地址。禁用自动指标后,您还可以使用10.10.10.1地址规定明确的静态路由。
TechNet上的更多详细信息 - 搜索自动度量标准页面。
http://technet.microsoft.com/en-us/library/bb727001.aspx
无论好坏。如果两个接口都通告具有相同指标的路径 - 任一接口都可以获胜。过去的行为是不确定的 - 它已经改变了。
最好的方法是在命令行中使用route
来创建静态持久性TCP路由,其成本较低或最低,介于.1和.2之间。交替增加.14&的每条路线的成本。 .15地址。我使用前者,因为维护较少,对其他通信的副作用较小。