CORREÇÃO: Novas conexões não são aceitas em um proxy da web específico ou ouvinte da web no Threat Management Gateway 2010

Aplica-se a
Forefront Threat Management Gateway 2010 Enterprise Forefront Threat Management Gateway 2010 Standard

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:

  1. 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 function
    
  2. Execute 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 300
    
  3. Para 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.