Я работаю сетевым администратором в финтех-компании. И в этой статье я расскажу о том, как решил проблему с постоянными обрывами RDP-соединения в сети компании после внедрения в рабочие процессы MFA-аутентификации. Стоит отметить, что в процессе решения я не нашел каких-либо полезных для этого материалов в Интернете, что и побудило меня написать статью.
Подразумевается, что читатель знаком с такими понятиями и технологиями, как VPN, MFA, RDP, а также с утилитой Wireshark и сетевым оборудованием Mikrotik. В противном случае рекомендую ознакомиться с информацией по ссылкам.
Введение
После внедрения в рабочие процессы компании MFA-аутентификации появилась проблема - RDP-соединение обрывалось каждые 10-15 минут. Это сильно мешало работе сотрудников, в основном при работе с сервером 1С. К сожалению, точную причину проблемы в итоге мне выявить не удалось, но сама проблема все же была решена.
Анализ проблемы
Для детального изучения проблемы я решил использовать инструмент для захвата и анализа сетевых протоколов Wireshark. Подключившись к серверу с помощью RDP с использованием VPN, я начал захват и анализ сетевых пакетов на сетевом интерфейсе VPN с целью выявления возможного нестандартного поведения потока передачи данных.
1. Общий обзор сессии:
На скриншоте виден захват пакетов, относящихся к сессии RDP. Основные IP‑адреса, участвующие в обмене — 172.16.10.148
(клиент) и 192.168.201.100
(сервер). Присутствуют пакеты, относящиеся к различным протоколам: RDPUDP2
, TCP
, TLSv1.2
, и ARP
, что указывает на установку защищенного RDP‑соединения с использованием UDP и шифрования.
2. Повторные передачи и дублирующие подтверждения:
Повторная передача (Retransmission) указывает на то, что исходный пакет не был доставлен получателю, что часто связано с потерей пакетов в сети или значительной задержкой.
Дублирующее подтверждение (Dup ACK) также указывает, что получатель не получил ожидаемый сегмент данных и отправил подтверждение для другого сегмента, полученного ранее.
На скриншоте можно видеть несколько случаев повторной передачи и дублирующих подтверждений. Например, имела место попытка повторной передачи пакета № 9134, а подтверждение о получении пакета № 9133 было продублировано.
3. Роль пакетов с протоколом TLS:
Протокол TLSv1.2
(пакеты № 9143–9152) показывает передачу зашифрованных данных в сессии RDP. Проблемы с передачей TLS‑пакетов могут также свидетельствовать о неполадках в сети, влияющих на зашифрованные данные.
4. Анализ флага TCP Reset:
Наиболее важным индикатором обрыва соединения является пакет № 9174, который содержит TCP Reset (RST) флаг. Он сигнализирует о том, что соединение было принудительно разорвано одной из сторон. В данном случае, вероятно, инициатором является клиент.
Принудительное завершение соединения часто происходит в случае, если хост не получает ожидаемого ответа в течение фиксированного времени или сталкивается с критической ошибкой.
Выводы
Обрыв соединения произошел из-за серии неудачных попыток передачи данных и дублирующих подтверждений, что привело к принудительному завершению клиентом TCP-сессии с помощью флага RST.
На основе проведенного анализа пакетов можно предположить, что проблема была связана с задержками или потерями пакетов на сетевом уровне. А это, вероятно, было вызвано некорректной настройкой сетевого оборудования и резко возросшей нагрузкой, связанной с внедрением MFA.
Поскольку сбои сильно мешали работе сотрудников, было принято решение провести приоритезацию трафика. Этот метод гарантировал бы, что RDP-трафик будет обрабатываться с более высоким приоритетом, что минимизирует влияние потенциальных сетевых задержек и потерь пакетов на стабильность соединения.
Решение проблемы:
Проблема была решена путем настройки правил для маркировки проходящего RDP-трафика по порту 3389 с помощью службы Mangle, настройки которой находятся по пути IP->Firewall в утилите Winbox
1.1. Маркировка соединений:
На вкладке General выберите:
· Chain - forward
· Protocol - TCP
· Dst. Port - 3389
На вкладке Action выберите:
· Action - mark connection
· New Connection Mark - допустимое имя метки (например, rdp_conn)
1.2 Маркировка пакетов
В той же вкладке Mangle нажмите Add (+) и проделайте аналогичные действия:
· Chain - forward
· Connection Mark - ранее созданная метка соединения
· Action - mark packet
· New Packet Mark - допустимое имя метки (например, rdp_packet)
Нажмите OK для сохранения правила.
1.3. Чтобы выполнить те же действия в терминале, используйте следующие команды:
/ip firewall mangle
add chain=forward protocol=tcp dst-port=3389 action=mark-connection new-connection-mark=rdp_conn
add chain=forward connection-mark=rdp_conn action=mark-packet new-packet-mark=rdp_packet
2. Приоритезация RDP-трафика.
Нажмите кнопку Add (+) в правом верхнем углу, чтобы создать новую очередь и в открывшемся окне задать значения следующих параметров:
Name - название очереди (queue1RDP)
Parent - global (очередь будет применяться ко всему трафику)
Priority - 1 (наивысший приоритет)
Packet Mark - ранее созданная метка пакета (rdp_packet)
Max Limit -
2M
Остальные параметры оставить по умолчанию, если нет специфических требований
Нажмите OK для сохранения очереди.
Убедитесь, что новая очередь появилась в списке очередей, активна и настроена с максимальным лимитом 2 Мбит/с. Теперь трафик, маркированный как rdp_packet, будет обрабатываться с высоким приоритетом и с ограничением на пропускную способность до 2 Мбит/с.
Чтобы выполнить те же действия в терминале, используйте следующие команды:
/queue tree
add name=rdp_priority parent=global priority=1 packet-mark=rdp_packet
Результат
После внесения описанных изменений сбои сразу же прекратились. Несмотря на то, что причина проблемы так и осталась невыясненной, предложенное решение показало свою эффективность на практике, улучшив стабильность работы RDP-соединений.
Комментарии (6)
MagicGTS
26.08.2024 12:34Решение проблемы - магическое, без понимания причин и следствия.
Задушив Rdp трафик, вы ничего не сделали со всем остальным трафиком, а значит потери пакетов из-за превышения емкости канала связи вас ещё догонят.
Приоритет в очередях работает совсем не так, как вам вероятно показалось. У вас нет других, конкурирующих с этой очередей, а значит приоритет - просто ничего не значащая цифра.
Изучите то, что называется QoS, прежде, чем делать непонятно что. В вашем случае, вам надо изучать нагрузку на интернет канал в целом, вероятно там у вас возрос трафик и пошёл отброс пакетов как попало. После внедрения полноценного QoS на сети (хотя-бы на Edge роутере), вы кардинально порешаете многие сетевые проблемы в компании. Но тема эта не простая, для упрощения написано уже масса скриптов, решающих задачу генерации сотен правил.
Genix
26.08.2024 12:34+1Заголовок: как я решил проблему с постоянными обрывами...
Статья: никак. Но вот вам скриншоты...
PeterZha
26.08.2024 12:34+2Классической причиной такого поведения (дисконнекты RDP через одно и то же время) в сетях с использованием NAT на маршрутизаторах от Mikrotik является слишком короткий UDP Connection Timeout в параметрах Connection Tracking по умолчанию.
У RDP есть встроенный механизм UDP Transport Acceleration, работающий начиная с RDP 8. Через некоторое непродолжительное время после установки соединения по 3389/tcp клиент инициирует обмен по UDP. Поскольку этот обмен не очень интенсивный, виртуальное соединение в Conntrack успевает усохнуть и начинаются проблемы.
Решение обычно тривиальное и сводится к увеличению UDP Connection Timeout до 30 секунд.
beknurB Автор
MFA делали на базе Endpoint VPN, однако MFA затронул соединение RDP в тоннеле VPN. Сам MFA был сделать для поднятия безопасности самого vpn соединения.