Внезапно я начал получать ошибки «подключить тайм-аут» для этого блога из моего Инструмент мониторинга наличия сайта .
Это не было на каком-либо чеке. Большая часть инструмента проверки времени сообщила, что веб-сайт работает, но иногда я получил ошибку. Я начал копать, чтобы узнать причину.
Читайте дальше, чтобы узнать команды, которые я использовал и что я нашел. Надеюсь, что эти простые шаги помогут вам найти причину вашей проблемы.
Первоначальная проблема сбора информации
Я использую Gitlab Pages, чтобы провести этот блог. Если вы хотите прочитать подробную информацию о хостинге, проверьте мой пост о Статический генератор сайта и страницы Gitlab, хостинг Отказ
Gitlab Pages IP — 35.185.44.232. Но я получил ошибку «Connect Timeout (172.67.130.68)». IP, который я видел, был другим.
Я храним мои записи DNS в CloudFlare. CloudFlare имеет возможность прокси несколько DNS записывает трафик.
Удобно использовать этот прокси, поскольку вам не нужно настроить сертификаты TLS/SSL самостоятельно. Вместо того, чтобы решить непосредственно на ваш сервер IP DNS, покажет вам свой IP.
Таким образом, казалось, что проблема была с определенным доверенным ip cloudflare.
Затем я проверил результат команд раскопок.
dig bogomolov.tech
Выходные данные были двумя IP-адресами. Один из них я получил в отчете об ошибке. Второй работал хорошо.
; <<>> DiG 9.16.13 <<>> bogomolov.tech ;; ANSWER SECTION: bogomolov.tech. 300 IN A 172.67.130.68 bogomolov.tech. 300 IN A 104.21.3.54 ;; Query time: 209 msec ;; SERVER: 8.8.8.8#53(8.8.8.8)
Таким образом, стало ясно, что при включении прокси-сервера первый из IPS в списке не работает правильно.
Проверьте поток TCP с помощью команды TCPDUMP
TCPDUMP — это инструмент для анализатора сетевого пакета. Я проверял TCP Flow дополнительно с помощью команды TCPDUMP ниже.
sudo tcpdump host bogomolov.tech -w /tmp/bogomolov.log
Собрав некоторые пакеты (сегменты), я прочитал вывод, используя команду ниже.
tcpdump -A -r /tmp/bogomolov.log | less
В качестве примера мой вывод выглядел так.
05:44:59.207763 IP myhostname.41300 > 172.67.130.68.https: Flags [S], seq 2461178300, win 64240, options [mss 1460,sackOK,TS val 1287633951 ecr 0,nop,wscale 6], length 0 05:45:33.255776 IP myhostname.41300 > 172.67.130.68.https: Flags [S], seq 2461178300, win 64240, options [mss 1460,sackOK,TS val 1287667998 ecr 0,nop,wscale 6], length 0 05:47:46.322288 IP myhostname.57638 > 104.21.3.54.https: Flags [S], seq 3044325933, win 64240, options [mss 1460,sackOK,TS val 2339981260 ecr 0,nop,wscale 6], length 0 05:47:46.337448 IP 104.21.3.54.https > myhostname.57638: Flags [S.], seq 981921866, ack 3044325934, win 65535, options [mss 1400,nop,nop,sackOK,nop,wscale 10], length 0 05:47:46.337465 IP myhostname.57638 > 104.21.3.54.https: Flags [.], ack 1, win 1004, length 0 05:47:46.337614 IP myhostname.57638 > 104.21.3.54.https: Flags [P.], seq 1:371, ack 1, win 1004, length 370
Здесь вы можете увидеть, что при разрешении IP — 104.21.3.54, первый пакет SYN (флаг [S]) имеет ответ SAN ACK (флаг [S.]).
Но когда DNS решает IP 172.67.130.68 — ответа нет.
Что такое трехстороннее рукопожатие TCP?
Это то, как установлено соединение TCP. После того, как DNS разрешит IP, клиент попытается установить TCP-соединение.
Сначала клиент отправляет пакет SIN (Synchronize Sequence Number). В TCP это называется сегменты. Этот сегмент информирует сервер, который клиент хочет начать коммуникацию.
Затем сервер должен отвечать сегментом SYN + ACK (подтверждение). С помощью этого сегмента сервер сообщает нам, что он успешно получил начальный пакет SYN.
Заключительная часть заключается в том, когда клиент отвечает на сервер с сегментом ACK. Теперь давайте вернемся к результату TCPDUMP.
Соединение не установлена ошибка
Снова глядя на выход TCPDUMP, мы увидим, что один из IPS никогда не отвечает на пакет SYN. Это может быть ошибка CloudFlare или некоторая промежуточная ошибка маршрутизации. Теперь мы знаем наверняка, что IP-адрес 172.67.130.68 не работает.
В NODEJS вы можете поймать тайм-аут соединения в событии «Ошибка» запроса. Сообщение об ошибке будет содержать текст «Connect Etimedout».
Поскольку этот IP не контролируется мной, я начал просматривать информацию, если у кого-то такая же проблема. Нашел ту же проблему в 2020 году. Вот ссылка к этой нити.
Кроме того, я пытался проверить из другого местоположения, используя команду curl с IP-адресом Force. И это работало из другого места. Эта информация может быть полезна для поддержки CloudFlare.
Я не спасил вывод скручивания. Вы можете использовать команду ниже, если у вас такая же проблема.
curl -vvv -o /dev/null --header "Host:bogomolov.tech" 172.67.130.68
Исправление проблемы
Следующим шагом является решение проблемы. Было не менее двух способов:
- Написать в CloudFlare Support
- Отключить прокси и доменное имя на карте напрямую к вашему IP
Второй путь было проще, поскольку сайт начнет работать практически сразу. Но вам нужно будет справиться с сертификатом SSL самостоятельно.
Поэтому я решил написать на поддержку CloudFlare. Здесь Это подробное обучение о том, как открыть билет поддержки от CloudFlare.
Но у меня не было времени в тот момент и не взял перерыв. Позже проблема была исправлена. Поэтому я не открыл никаких поддержков билетов и не имею шансов копать в вопросе глубже.
Оригинал: «https://dev.to/bogkonstantin/how-to-do-basic-troubleshooting-of-the-connection-timeout-error-3fe6»