Случайные задержки на 20 секунд на Apache (Порт 80) – Windows Server 2022

Вопрос или проблема

У меня следующая проблема:
Я настроил Windows Server 2022 на выделенном сервере в Hetzner. Сервер Apache работает на порте 80.

Когда я обращаюсь к порту 80, возникают временные задержки до 20 секунд для запроса. Я могу воспроизвести это, запустив цикл с помощью curl, отправляя несколько сотен запросов подряд:

for i in `seq 1 1000`; do echo -n "start $i curl... " ;curl http://abcd.de/xyxy/test.html  >/dev/null;echo "curl done";done

После нескольких запросов соединение начинает замедляться (запрос curl уже занимает несколько секунд), пока в конечном итоге не произойдет тайм-аут, и запрос полностью не потеряется:

start 93 curl... curl done  
start 94 curl... curl done  
start 95 curl... curl done  
start 96 curl... curl done  
start 97 curl... curl: (28) Не удалось подключиться к abcd.de порт 80 за 21050 мс: Не удалось подключиться к серверу  
curl done  
start 98 curl... curl done  
start 99 curl... curl done  

Что я проверил на данный момент:

  • Это происходит на большинстве компьютеров в нашей корпоративной сети.
  • Когда я запускаю тот же цикл curl с других машин вне нашей корпоративной сети, проблема почти никогда не возникает.
  • Я подозревал нашу корпоративную сеть, но все центральные сетевые устройства уже были заменены.
  • Если я изменю порт прослушивания Apache на сервере (например, на 1080), все работает нормально.
  • Я подозревал брандмауэр на сервере, но ничего не нашел.

Логи Wireshark

Теперь я установил Wireshark на сервер и захватил некоторое сетевое движение:

1084  30.396515  client.ip  win.server.ip  TCP  66  3178 → 80 [ACK] Seq=95 Ack=1449 Win=31872 Len=0 TSval=181231592 TSecr=2355576  
1085  30.396515  client.ip  win.server.ip  TCP  66  3178 → 80 [ACK] Seq=95 Ack=2897 Win=31872 Len=0 TSval=181231592 TSecr=2355576  
1086  30.396515  client.ip  win.server.ip  TCP  78  [TCP Dup ACK 1085#1] 3178 → 80 [ACK] Seq=95 Ack=2897 Win=31872 Len=0 TSval=181231592 TSecr=2355576 SLE=4345 SRE=5793  
1087  30.396679  client.ip  win.server.ip  TCP  66  3178 → 80 [ACK] Seq=95 Ack=5793 Win=31872 Len=0 TSval=181231592 TSecr=2355576  
...  
1093  30.407663  client.ip  win.server.ip  TCP  74  [TCP Port numbers reused] 3158 → 80 [SYN] Seq=0 Win=32120 Len=0 MSS=1460 SACK_PERM TSval=181231603 TSecr=0 WS=128  
1095  31.423980  client.ip  win.server.ip  TCP  74  [TCP Retransmission] 3158 → 80 [SYN] Seq=0 Win=32120 Len=0 MSS=1460 SACK_PERM TSval=181232620 TSecr=0 WS=128  
1096  32.447763  client.ip  win.server.ip  TCP  74  [TCP Retransmission] 3158 → 80 [SYN] Seq=0 Win=32120 Len=0 MSS=1460 SACK_PERM TSval=181233644 TSecr=0 WS=128  
1097  33.471772  client.ip  win.server.ip  TCP  74  [TCP Retransmission] 3158 → 80 [SYN] Seq=0 Win=32120 Len=0 MSS=1460 SACK_PERM TSval=181234668 TSecr=0 WS=128  

Похоже, что система Windows перестает отправлять SYN-ACK, что мешает правильному установлению TCP-соединения.

Есть идеи, что может вызывать это? Буду благодарен за любые соображения!

Ответ или решение

Теория

Ваше описание проблемы указывает на возникновение задержек при обращении к серверу Apache, работающему на Windows Server 2022. Это может быть связано с различными факторами. Обратите внимание, что проблема проявляется главным образом в корпоративной сети и с портом 80, но не наблюдается, когда вы переключаетесь на другой порт или когда запросы выполняются из вне корпоративной сети. Это подсказывает, что проблема может быть связана с сетевыми настройками или ограничениями, применяемыми в корпоративной среде.

Один из ключевых симптомов, выявленных в логах Wireshark, — это прекращение отправки SYN-ACK Windows системой, что мешает установлению TCP-соединения. Это может указывать на проблему с конфигурацией сети или самим сетевым стеком Windows, который может быть настроен или заблокирован из-за политики безопасности или неправильно настроенного сетевого интерфейса.

Кроме того, наличие дубликатов ACK и переключение портов может вызывать ситуацию, когда пакетный фильтр считает трафик подозрительным (например, из-за потенциальной атаки), и поэтому начинает блокировать установку соединений.

Пример

Рассмотрим гипотетическую организацию, где в корпоративной сети внезапно начинают возникать задержки в работе веб-сервера, работающего на Windows Server 2022 на порту 80. Администраторы первыми подозревают проблемы в сети, однако после замены ключевых устройств и оборудования проблема остается. Логирование с помощью инструментов сетевого анализа показывает, что периодически происходит перекрывание портов и TCP-соединения не создаются. Несмотря на это, простое переключение веб-сервера на другой порт, например 1080, решает проблему, что указывает на ограничение трафика на порту 80.

Применение

Для решения проблемы рекомендуются следующие шаги:

  1. Анализ корпоративной сети:

    • Убедитесь, что настройки брандмауэра вашей корпоративной сети не блокируют или ограничивают трафик на порту 80 специфическим образом. Некоторые брандмауэры могут неправильно интерпретировать большой объем входящего трафика как DDoS-атаку и, следовательно, могут начать блокировать или ограничивать эти запросы.
    • Проверьте наличие сетевых политик по ограничению скорости или борьбе с закрытием соединений, которые могут автоматически закрывать некоторое количество открытых соединений при превышении лимитов.
  2. Анализ серверных настроек и ошибки конфигурации:

    • Проверьте настройки TCP/IP на сервере Windows и убедитесь, что нет накладок с {TCP портами или номером последовательности TCP}. Иногда проблемы могут быть вызваны неподдерживаемыми версиями {сетевого аппаратного обеспечения или драйверами}, которые правильно не обрабатывают новые запросы на соединение.
    • Выполните обновления и патчи для Windows Server 2022. Бывают случаи, когда соответствующие обновления ОС могут исправить проблемы с сетевым стеком.
  3. Наблюдение и логирование:

    • Продолжайте использовать сетевой мониторинг, как Wireshark, для сбора дополнительной информации. Смотрите на закономерности в логах, которые могли бы указывать на то, когда и почему сервер прекращает отправлять SYN-ACK.
    • Посмотрите на любой специфический трафик или новые паттерны используемых IP-адресов для идентификации, что могло вызвать ограничения на порт 80.
  4. Тесты производительности и нагрузки:

    • Используйте тестирование нагрузки для мониторинга того, как сервер обрабатывает ситуацию с массовыми запросами. Это поможет выявить, является ли проблема систематической и проявляется ли она при определенных уровнях нагрузки.
  5. Консультирование и профессиональная поддержка:

    • Если проблема не будет решена вышеуказанными методами, стоит привлечь специалистов по сети или внешних консультантов, которые могут помочь идентифицировать сложные проблемы в сетевом взаимодействии.

Учитывание всех этих аспектов и последовательно реагируя на полученные данные, вы сможете более точно диагностировать и, возможно, устранить проблему, обеспечивая более стабильное и надежное соединение вашего Apache сервера с клиентами.

Оцените материал
Добавить комментарий

Капча загружается...