Увы, очень скоро после публикации вопроса я нашел то, что кажется основной причиной. RDP-клиент, похоже, не замечает закрытия сокета на стороне сервера из-за неверных учетных данных.
Когда я введу правильный пароль, это удастся!
Я надеюсь, что другие люди получат пользу от этого вопроса. Случай, который выглядит как проблема с подключением, на самом деле является глупостью в клиенте RDP.
Вот последние два пакета из tcpdump
проследить:
09:29:05.977126 IP server.3389 > client.65355: F 1292:1292(0) ack 1438 win 7965
09:29:05.978195 IP client.65355 > server.3389: . ack 1293 win 16229
Сервер (фактически сервер переадресации портов, а не машина Windows) отправил пакет FIN, обозначенный F
, Клиентский стек TCP подтверждает его, но приложение не замечает одностороннего закрытия и продолжает отображать диалоговое окно попытки подключения.
Я воспроизвел это несколько раз. Когда я отключаюсь и пытаюсь восстановить соединение с неправильным паролем, он зависает. Правильный пароль, и он продолжается. Возможно, еще через десять лет они получат право RDP.
Постскриптум другой клиент, не отображающий поведение, является бесплатным приложением для Android.