Sintomas
Um servidor que esteja executando o Microsoft Forefront Threat Management Gateway (TMG) 2010 pode parar de aceitar novas conexões em um proxy ou ouvinte da Web específico. Esse problema pode ocorrer após várias horas a vários dias de tempo de atividade do servidor.
Causa
Esse problema ocorre quando o TMG para de aceitar novas conexões no ouvinte da Web. Isso logo preenche a fila de pendências para o soquete AFD (driver de função auxiliar). Depois que a fila da lista de pendências estiver cheia, o servidor começará a redefinir novas conexões de entrada. Se você monitorar o servidor usando o Monitor de Rede nessa situação, poderá observar um padrão SYN, ACK/RST para cada nova tentativa de conexão.
Resolução
Para resolver esse problema, instale o Pacote Cumulativo 5 para o Forefront Threat Management Gateway (TMG) 2010 Service Pack 2.
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Mais informações
Depois de instalar o Pacote Cumulativo 5, você deve habilitar a funcionalidade para atingir o tempo limite de chamadas de aceitação ociosas. Para fazer isso, siga estas etapas:
Copie o script a seguir no Bloco de Notas e salve o arquivo como SetAcceptIdleTimeout.vbs:
'Define the constants needed. Const strVpsGUID = "{143F5698-103B-12D4-FF34-1F34767DEABC}" Const strVpsPropertyName = "AcceptIdleTimeout" Const Error_FileNotFound = &H80070002 Set objArgs = wscript.Arguments if objArgs.Count > 0 then uAcceptIdleTimeout = objArgs(0) end if if objArgs.Count <> 1 then wscript.echo "Usage: SetAcceptIdleTimeout.vbs <timeout>" wscript.echo wscript.echo "Set async accept timeout to <timeout> value (in sec)" wscript.echo "To disable async accept timeout set it to 0" wscript.Quit 2 end if set objArray = CreateObject("FPC.Root").GetContainingArray() Set objVPSet = OpenVPSet(objArray, strVpsGUID) objVPSet.Value(strVpsPropertyName) = uAcceptIdleTimeout objArray.Save() objArray.RestartServices(1) function OpenVPSet(objParent, strVpsGUID) Set objVPSets = objParent.VendorParametersSets On Error Resume Next Set OpenVPSet = objVPSets.Item(strVpsGUID) ' Save the Err properties in case it needs to be re-raised errNumber = Err.Number errSource = Err.Source errDescription = Err.Description errHelpFile = Err.HelpFile errHelpContext = Err.HelpContext On Error GoTo 0 if errNumber = Error_FileNotFound Then Set OpenVPSet = objVPSets.Add(strVpsGUID) Elseif errNumber < 0 Then ' An error other than "file not found" occurred -- re-raise the error, ' this time not under "On Error Resume Next" Err.Raise errNumber, errSource, errDescription, errHelpFile, errHelpContext End If end functionExecute o script em um dos servidores TMG. Por exemplo, para definir o período limite como 5 minutos, execute o seguinte em um prompt de comando administrativo:
cscript.exe SetAcceptIdleTimeout.vbs 300Para que essa alteração entre em vigor, reinicie o serviço de firewall em todos os membros da matriz.
Para desfazer essa alteração, execute o seguinte comando para definir o tempo limite de ociosidade como 0:
cscript.exe SetAcceptIdleTimeout.vbs 0
Referências
Saiba mais sobre a terminologia que a Microsoft usa para descrever atualizações de software.