После длительного гугления и гадания на кофейной гуще, спустя несколько месяцев тестирования решения, могу чётко сказать решение: все проблемы ушли после насильственного выключения UDP протокола на клиенте, оставил только TCP. Причины зависания мне обнаружить не удалось (эникей скиллы не позволили), но теория следующая:
пользователь устанавливает подключение по RDP, и дальше по UDP кидаются пакеты туда-сюда, без проверки целостности и без отсылки пакетов, поддерживающих сеанс (нет сообщений "соединение живое", keepalive). Либо где-то кто-то по пути теряет коннект из-за отсутствия пакетов keepalive, думая что раз keepalive нет, то соединение мертво.
TCP же всегда гоняет keepalive, даже если свернуть RDP соединение, предположительно поэтому соединение не обрывается.
Включается TCP only либо через групповые политики (легко гуглится), либо через реестр вот так:
Use only TCP
Registry Hive HKEY_LOCAL_MACHINE
Registry Path SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services
Value Name SelectTransport
Value Type REG_DWORD
Value 1
Появилась проблема в первом месте потому что я сам настроил UDP, пользуясь вот этой статьёй с хабра:
https://habr.com/ru/post/501132/, а в другом месте в душе не знаю почему она появилась, но семь бед - один ответ.
з.ы. Не всё то золото, что гайд на хабре.