Windows Server 2008 R2,已完全修补和更新。
我在专用服务器上有4个静态IP。我将按如下方式提及它们:
x.x.x.x
y.y.y.y
z.z.z.z
a.a.a.a
x.x.x.x是服务器的默认外部和内部IP地址。
所有外部IP都与内部IP相同,都在同一个NIC上运行。
x.x.x.x和y.y.y.y在端口80上通过IIS运行HTTP,其中不同的主机头处理目标。这很有效。
我最近为使用两个端口的不同应用程序添加了两个新IP地址z.z.z.z和a.a.a.a,但我们希望外部端口80流量转换为它正在使用的内部端口。
我们希望传入流量的工作方式如下:
Incoming traffic on x.x.x.x:80 map to x.x.x.x:8080
Incoming traffic on y.y.y.y:80 map to y.y.y.y:8080
Incoming traffic on z.z.z.z:80 map to y.y.y.y:8088
Incoming traffic on a.a.a.a:80 map to y.y.y.y:8089
我们将IIS中的绑定更改为仅侦听特定的IP和内部端口,以便仅通过netsh portproxy侦听端口80。
我们已经能够通过4个独立的netsh portproxy规则实现这一点,一切都很好。两个HTTP IP的所有流量都可以正常工作,另外两个IP到其他两个内部端口的流量也可以正常路由。
问题在于一切都按预期工作,但偶尔会出现问题,通常是美国东部时间下午4点左右,网站不再可用。没有应用程序池或网站崩溃。只是端口不再路由。
当它挂起时,最简单的解决方法是运行" portproxy reset"并通过批处理文件重新创建portproxy规则,一切都可以再次运行。
我想我的问题是netsh portproxy中是否存在某种空闲超时,或者可能是某种类型的缓冲区溢出保护。
没有一个日志显示任何错误。
IIS中的应用程序池被调整为以较短的间隔(30分钟)回收,以防止任何长时间运行的工作进程,以防出现问题。结果相同。
我可以轻松创建Windows服务,以非常短的时间间隔检查端口状态并重置特定的portproxy规则,但这并不理想,因为仍有可能丢失数据包和服务不可用(即使只需几秒钟)需要重新发送HTTP请求。
同样,我应该重申一切都很好,直到当天的某个时刻,并且这与Windows防火墙完全无关,因为我们可以打开或关闭完全相同的结果。也没有明显的DDoS或其他类型的攻击。当portproxy挂起时,所有单独的网站和其他应用程序仍然在其内部端口上运行(即访问http://example.com:8080仍然可以正常工作)。
失败点是netsh portproxy。
有没有人遇到过类似的问题?我正在考虑添加一个内置此功能的Fortinet硬件防火墙,但我想知道它是否会比现有的更好地处理它。