RDP caindo no Windows Server 2022 com LoadMaster: guia completo para corrigir desconexões aleatórias

Quedas aleatórias de RDP em farms de Terminal Server com LoadMaster normalmente apontam para timeouts e limpeza de estado no caminho de rede. Este guia mostra como diagnosticar e corrigir as desconexões de forma prática, com ajustes em LoadMaster, GPO e firewall, além de testes controlados.

Índice

Visão geral do cenário

Você tem dois servidores Windows Server 2022 (virtualizados) atuando como Remote Desktop Session Host (RDSH), publicados por um Kemp LoadMaster em TCP/3389. Várias vezes ao dia, grupos de 3–4 usuários caem no mesmo segundo, reconectando poucos segundos depois. No Event Viewer (log TerminalServices-LocalSessionManager), as sessões apresentam Reason Codes:

  • 2147942521 (0x80070079)Semaphore timeout period has expired (timeout de rede).
  • 2147942464 (0x80070040)The specified network name is no longer available (conexão de rede perdida).

Esses códigos indicam erro de rede/transporte e, na prática, quase sempre se relacionam a timeouts de sessão ociosa ou flaps de verificação de saúde em algum ponto do caminho: balanceador, firewall/NAT ou roteador.

O que os códigos significam no contexto de RDP

Reason CodeMensagemInterpretação práticaO que procurar
0x80070079Semaphore timeout period has expiredTimeout de transporte; falta de resposta em janela de tempo.Conexões “silenciosas” encerradas por LB/NGFW, perda de pacotes, assimetria UDP.
0x80070040The specified network name is no longer availableQueda abrupta do caminho; estado TCP perdido.Limpeza de sessão por timeout, RST de middlebox, health check marcando servidor down.

Por que vários usuários caem no mesmo segundo

Vários dispositivos (Load Balancers, NGFWs) executam garbage collection em ciclos. Se o idle timeout for curto, as sessões RDP sem troca de dados recente são finalizadas em lote quando o coletor roda. O resultado típico é um “cluster” de desconexões no mesmo segundo, seguido de reconexão automática do cliente RDP.

Principais causas prováveis

Timeout de sessão no LoadMaster ou no firewall/NAT

O RDP pode permanecer por longos períodos sem tráfego significativo. Idles curtos (por ex., 5–15 min) em LBs/NGFWs levam a quedas periódicas e sincronizadas. Alvos clássicos: Idle Connection Timeout do Virtual Service (LoadMaster) e TCP Session Timeout do firewall/NAT.

Uso de transporte UDP do RDP sem suporte consistente no caminho

RDP 8+ usa UDP/3389 para melhorar latência e vídeo. Se o balanceador ou o firewall tratarem TCP e UDP de forma distinta (sem a mesma persistência/afinidade, NAT assimétrico, bloqueio intermitente), o cliente alterna para TCP após falhas, causando “quedas e retomadas”.

Oscilação de health check no LoadMaster

Se a verificação de saúde estiver agressiva (intervalo curto, timeout pequeno) ou verificar algo além de TCP Connect, o servidor pode ser marcado down temporariamente. Conexões ativas são derrubadas se não houver connection draining.

Interferência de DPI/IPS ou problemas de NIC/offload

Perfis de inspeção profunda (DPI/IPS) para “RDP” podem resetar fluxos em picos de carga. Em hosts virtualizados, recursos como LSO/LRO/RSS/VMQ (e drivers desatualizados) às vezes geram resets breves sob determinadas condições.

Ações imediatas recomendadas

  1. Aumentar timeouts no LoadMaster e no firewall/NAT:
    • LoadMaster → Virtual Service do 3389: configure Idle Connection Timeout para ≥ 3600 s (1 hora). Se sua política permitir, valores de 2–4 horas reduzem o risco de quedas em pausas longas.
    • Firewall/NAT à frente: alinhe TCP Session Timeout para valor igual ou maior ao do LB.
  2. Habilitar Keep‑Alive do RDP nos RDSH:
    • GPO: Computer Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Session Host → Connections → Configure keep‑alive connection interval = Enabled, 60 seconds.
    • (Opcional) Reforço via TCP KeepAlive do SO para 60 s.
  3. Executar teste forçado só‑TCP:
    • GPO: …Connections → Select RDP transport protocols = Use only TCP.
    • Se o problema sumir, trate UDP no balanceador/NGFW ou mantenha TCP‑apenas.
  4. Ajustar health check do LoadMaster:
    • Use verificação simples TCP connect em 3389, aumente o intervalo e configure Connection Draining para não derrubar sessões ativas em flaps curtos.
  5. Realizar bypass controlado:
    • Direcione um grupo de usuários a um RDSH direto (sem LB) por 1–2 dias.
    • Se as quedas cessarem, foque no LB/NGFW; se persistirem, foque no host/VM/rede interna.

Parâmetros recomendados para LoadMaster e firewall

ComponenteParâmetroValor recomendadoObservações
LoadMaster (Virtual Service 3389)Idle Connection Timeout≥ 3600 sEleve conforme política de segurança e perfil de uso.
LoadMasterPersistence ModeSource IPEvita salto de servidor no meio da sessão.
LoadMasterConnection DrainingHabilitar; Grace ≥ 30 sProtege sessões durante flaps e manutenções.
LoadMasterHealth CheckTCP ConnectIntervalo 10–30 s; Retry ≥ 3; Timeout 5–10 s.
NGFW/NATTCP Session Timeout (3389)≥ 3600 sIgual ou maior que o valor do LB.
NGFWInspeção/DPI para RDPDesativado para testeSe necessário, crie exceção por origem/destino/porta.
NGFWUDP 3389Consistência de tratamentoMesma afinidade/persistência do TCP; evitar assimetria.

Como habilitar Keep‑Alive no Windows Server

GPO do RDP

Computer Configuration
 └── Administrative Templates
     └── Windows Components
         └── Remote Desktop Services
             └── Remote Desktop Session Host
                 └── Connections
                     └── Configure keep-alive connection interval = Enabled, 60 seconds

Reforço de TCP KeepAlive (opcional)

reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" ^
 /v KeepAliveTime /t REG_DWORD /d 60000 /f

reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" ^
/v KeepAliveInterval /t REG\_DWORD /d 10000 /f 

Por padrão, o KeepAlive do TCP no Windows é alto (horas). As entradas acima reduzem o intervalo e ajudam a manter o fluxo “vivo” perante middleboxes.

Teste controlado só‑TCP

Para confirmar suspeita sobre UDP:

  1. Crie uma OU temporária contendo um grupo de usuários/pcs de teste.
  2. Configure a GPO Select RDP transport protocols = Use only TCP nessa OU.
  3. Monitore durante 24–48 h e compare taxa de quedas com o grupo controle.

Se as desconexões cessarem no grupo TCP‑apenas, reavalie o suporte a UDP no balanceador e no firewall. Alternativamente, mantenha o farm em TCP puro.

Capturas e correlação de eventos

Correlacionar horários: verifique se os Event IDs de desconexão (TerminalServices-LocalSessionManager) ocorrem em clusters no mesmo segundo. Isso é indicativo de timeout/limpeza de estado.

Captura rápida nos RDSH

# Iniciar rastreamento
netsh trace start capture=yes report=yes tracefile=C:\Temp\rdp_queda.etl

Reproduzir/aguardar a queda, então:

netsh trace stop 

Analise em um analisador de pacotes: observe se há RST vindos do caminho, FIN inesperados, ou silêncio até expirar o retransmit. No LoadMaster, use o packet capture embutido para ver o lado cliente e o lado servidor.

Extrair eventos focados

# PowerShell - listar últimos eventos de desconexão
Get-WinEvent -FilterHashtable @{
  LogName='Microsoft-Windows-TerminalServices-LocalSessionManager/Operational';
  Id=40
} | Select-Object TimeCreated, Id, Message | Sort-Object TimeCreated -Descending | Select-Object -First 50

Ajuste fino do health check no LoadMaster

  • Tipo: TCP Connect em 3389. Evite checagens pesadas que possam falhar por motivos transitórios.
  • Intervalo: 10–30 s, Retry: ≥ 3, Timeout: 5–10 s.
  • Draining: habilite Connection Draining com grace ≥ 30 s.
  • Afinidade: Persistence: Source IP para manter sessões presas ao mesmo RDSH.

Transporte UDP do RDP e caminho assimétrico

O RDP moderno utiliza UDP/3389 para mídia/entrada, mantendo TCP/3389 para controle. Em ambientes com balanceamento e inspeção, certifique-se de que:

  • TCP e UDP recebam o mesmo tratamento de persistência/afinidade.
  • Não exista NAT assimétrico (entrada por um caminho, saída por outro).
  • Políticas de filtro/IPS não derrubem UDP de forma intermitente.

Se não puder garantir, desative UDP via GPO conforme seção anterior.

Alternativas arquiteturais recomendadas

RD Gateway: encapsula RDP em HTTPS/443 (com canal UDP/3391 quando suportado). Essa abordagem costuma ser mais resiliente a middleboxes e simplifica políticas de firewall. Combine com balanceamento e idle timeouts generosos.

RDP direto com boas práticas: se mantiver 3389 aberto, use persistência por IP, timeouts longos, e desative inspeção específica de RDP no NGFW se ela introduzir instabilidade.

Checklist de verificação

ItemComo verificarCritério de sucesso
Eventos em clustersLogs do LSM/Operational, ID 40 na mesma marca de tempo.Confirma hipótese de timeout em middlebox.
Idle Timeout do LBVirtual Service 3389 → Timeout ≥ 3600 s.Sem quedas durante pausas prolongadas.
GPO Keep‑AliveGPO aplicada; gpresult /r.Intervalo de 60 s efetivo.
Health check estávelSem “up/down” frequente nos logs do LB.Conectividade estável sob carga.
UDP consistentePolíticas idênticas para TCP/UDP; sem assimetria.Sem quedas ao alternar mídia.
Firewall/NATTCP timeout ≥ 1h; sem DPI de RDP.Sem resets “misteriosos”.

Runbook sugerido

  1. Aumente Idle Connection Timeout no LoadMaster para ≥ 3600 s; alinhe o firewall/NAT.
  2. Aplique GPO de Keep‑Alive de 60 s nos RDSH.
  3. Habilite Connection Draining e ajuste health check para TCP Connect com retry ≥ 3.
  4. Desative temporariamente DPI/IPS para RDP no NGFW e valide.
  5. Realize teste só‑TCP com grupo de usuários; compare métricas.
  6. Faça bypass controlado (sem LB) por 1–2 dias; isole o culpado.
  7. Se persistir, faça captura simultânea no LB e no RDSH e analise RST/FIN/timeouts.
  8. Considere RD Gateway como padrão arquitetural.

Erros comuns que prolongam o incidente

  • Tratar como problema de licenciamento RDS. Os códigos indicam rede, não CALs.
  • Elevar apenas o timeout no LB e esquecer o firewall/NAT.
  • Health check “exagerado” (intervalo curtíssimo, sem retry), causando flaps.
  • Manter UDP habilitado sem garantir persistência e simetria de caminho.
  • Ignorar drivers/firmware das NICs virtuais e do host de virtualização.

Scripts e comandos úteis

Aplicar Keep‑Alive via PowerShell

New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters' `
 -Name 'KeepAliveTime' -PropertyType DWord -Value 60000 -Force | Out-Null

New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters' \`
-Name 'KeepAliveInterval' -PropertyType DWord -Value 10000 -Force | Out-Null 

Auditar sessões desconectadas por minuto

$events = Get-WinEvent -FilterHashtable @{
  LogName='Microsoft-Windows-TerminalServices-LocalSessionManager/Operational'; Id=40
}
$events | Group-Object { $_.TimeCreated.ToString('yyyy-MM-dd HH:mm:ss') } |
  Sort-Object Name -Descending | Select-Object -First 20

Verificar offloads de NIC na VM (teste)

# Use com cautela em janelas de manutenção
Disable-NetAdapterChecksumOffload -Name "*"
Disable-NetAdapterLso -Name "*"
Disable-NetAdapterRsc -Name "*"

Quando considerar mudanças estruturais

Se, mesmo com timeouts longos e keep‑alive, ainda houver quedas causadas por inspeções intermediárias, avalie migrar a publicação para RD Gateway. O tráfego encapsulado em HTTPS evita interações problemáticas de middleboxes com a sessão RDP nativa.

Métricas de sucesso e observabilidade

  • Taxa de desconexões por 100 usuários/dia → meta próxima de zero.
  • Média de duração de sessão sem interrupções.
  • Ocorrências de health check “down/up” por servidor no LB.
  • Erros 0x80070079/0x80070040 por dia nos logs do RDSH.

Resumo prático

  • Os códigos 0x80070079/0x80070040 apontam para rede/timeout, não licenciamento.
  • Quedas simultâneas no mesmo segundo sugerem limpeza de sessão em middlebox (LB/NGFW) ou flap de health check.
  • Resolva elevando idle timeouts no LoadMaster/NGFW, habilitando RDP Keep‑Alive (60 s) e realizando teste TCP‑apenas.
  • Use bypass controlado para isolar a origem. Considere RD Gateway como alternativa mais resiliente.

FAQ essencial

Isso pode ser “pico de CPU/RAM” no RDSH? Em geral, não. Quedas simultâneas com reconexão rápida e razão de rede indicam o caminho de transporte, não esgotamento de recursos.

Desabilitar UDP impacta desempenho? Pode reduzir levemente a qualidade de mídia (áudio/vídeo/bi‑direcional), mas costuma ser imperceptível em cenários de escritório e é excelente para diagnóstico.

Persistência por cookie é necessária? Não para RDP. Use persistência por IP no LB.

Qual valor de timeout escolher? Para sessões interativas típicas, 1–4 horas é um bom ponto de partida, alinhado entre LB e firewall.

Modelo de comunicação pós‑mudança

Comunique aos usuários a aplicação de ajustes de estabilidade, informe janela de mudanças e peça que reportem qualquer reconexão inesperada após as alterações. Coletar horário, usuário, servidor de destino e se estava ocioso/ativo ajuda a refinar o diagnóstico.

Índice