Ник Пост Дата
Kiduvago

Здравствуйте.
Калуга, Билайн, Мобильный интернет.

С августа наблюдаю очень частые разрывы SSH соединений.

В качестве примера: открываю по 2-3 SSH сессии на 3 разных серверах и жду. Через какое то время, может в течении часа, может больше хоть одна сессия разрывается.
KeepAlive настроен так же, как и много лет назад, когда разрывов не наблюдалось.

Решил начать записывать трафик и о чудо, я обнаруживаю HTTP пакет (с редиректом на blackhole.beeline.ru) среди SSH соединения, с флагами “FIN, PSH, ACK” после чего мой ssh клиент инициирует завершение соединения пакетом “FIN, ACK”.

Для пример настроил отправку keepAlive пакета на каждые 10 сек. от сервера к клиенту.
В /etc/ssh/sshd_config:

ClientAliveInterval 10
ClientAliveCountMax 2

На скриншоте ниже показана сессия с SSH сервером, сессия открыта из обычного терминала Konsole.
192.168.1.2 - мой ip адрес компьютера, подключённого к моему роутеру.
193.124.*.* - ip адрес, где запущен SSH сервис (OpenSSH).
SSH сервис поднят на порту 47570.
На записе трафика на сервере видно, что сервер в 12:55:56 отправляет очередной keepAlive пакет с флагами “PSH, ACK” и размером 126 байт.
А на клиенте уже получаем HTTP пакет с флагами “FIN, PSH, ACK” и размером 128 байт. После чего клиент начинает завершать соединение, но оно не завершается корректно.

Трафик со стороны сервера:

Трафик со стороны клиента:

Так же видно что в HTTP пакете имеется заголовок редиректа:

HTTP/1.1 307 Temporary Redirect
Location: http://blackhole.beeline.ru

На сервере в логе auth.log было зафиксировано следующее:

2024-09-10T12:56:16.455022+03:00 srv1 sshd[15189]: Timeout, client not responding from user root 85.249.19.17 port 17280
2024-09-10T12:56:16.468118+03:00 srv1 sshd[15189]: pam_unix(sshd:session): session closed for user root
2024-09-10T12:56:16.479025+03:00 srv1 systemd-logind[374]: Session 141 logged out. Waiting for processes to exit.
2024-09-10T12:56:16.481726+03:00 srv1 systemd-logind[374]: Removed session 141.

Видно, что клиент не инициировал корректно закрытие ssh сессии, а произошёл таймаут соединения.

Чем чаще отправляется keepAlive пакет, тем больше шансов словить HTTP пакет.
Бывает и разрыв ssh соединения, но уже без http пакета, просто приходит пакет с флагом “FIN,PSH,ACK”, вместо отправленного “PSH, ACK”.
При отправке keepAlive пакет раз в 10 сек. на 3 запущенных ssh соединений можно словить дисконект уже через 10 мин.
При отправке keepAlive пакет раз в 60 сек. на 3 запущенных ssh соединений можно словить дисконект через 50 мин. или больше часа.

Я прав или как? Если что не так, поправьте пожалуйста и объясните что не так?
Спасибо.

Возникло пару вопросов:
Наблюдаются ли у кого нибудь в России с начала августа разрывы SSH сессий?
Наблюдал ли кто нибудь вообще за свою практику подобные HTTP пакеты в SSH сессии?

Как мне подсказали, это результат работы DPI и он почему то видит в keepAlive пакетах на SSH соединении заблокированный паттерн и блокирует его.
Предполагаю, что DPI от ТСПУ, от РКН, но возможно и на стороне самого Билайна, т.к. у них тоже свои DPI. Остаётся пока ещё загадкой кто блокирует именно.

2024-09-12T19:01:09.501Z
0ka(0ka)

хз вы писали или нет, но до отката форума из бекапа тут уже была такая тема про билайн и ssh

//val: да

2024-09-12T19:24:40.828Z
Kiduvago

Я пытался воспроизвести данный HTTP пакет. Пакет отправляется, но клиент не пытается разорвать сессию.
Вот таким python скриптом мне удаётся отправлять пакет:

from scapy.all import *

ether = Ether(src="00:00:00:00:00:11", dst="00:00:00:00:00:22")
ip = IP(src="192.168.1.120", dst="192.168.1.2")
tcp = TCP(sport=11000, dport=24050, flags="FPA", seq=2506070044, ack=2444551231)
http_response = (
    "HTTP/1.1 307 Temporary Redirect\r\n"
    "Location: http://blackhole.beeline.ru\r\n\r\n"
)
pkt = ether/ip/tcp/http_response
sendp(pkt, iface="re0")

Кто понимает такие детали, объясните пожалуйста почему клиент инициирует разрыв в оригинальном случае и почему у меня не получается воспроизвести этот разрыв со стороны клиента с моим скриптом?

============
Добавляю после восстановления сообщения: на проблему с воспроизведением пакета уже забил, поэтому не актуально.

2024-09-12T19:53:36.052Z
Dhohbr

Надо смотреть пакет RST,ASK, скорее всего он инвалидный. Это обычное дело, провайдер подменяет src.ip и присылает фейковый RST пакет для разрыва соединения, а потом вам присылает страницу-заглушку.
Попробуйте в вашем фаерволе заблокировать входящие инвалидные пакеты.
iptables -I INPUT -m state --state INVALID -j DROP

2024-09-12T19:53:47.060Z
Kiduvago

Т.к. запись трафика велась на моём компьютере, а RST,ASK пакет исходящий, то этот пакет инициировал мой SSH клиент, а не провайдер.

INVALID пакеты блокируются на стороне моего роутера, через цепочку FORWARD. Поэтому до меня доходят только правильные пакеты.

2024-09-12T19:55:17.411Z
Anonimno(Anonimno)

Наблюдаются у T2 Сибирь ~ года, но в трансграничном направлении.
SSH сессия с VPS не живет и 10 минут, происходит гарантированный разрыв.

2024-09-12T19:56:15.864Z
ValdikSS

Частично восстановил топик.

Можете сделать pcap?

2024-09-12T19:58:58.449Z
Kiduvago

INVALID пакеты блокируются на стороне моего роутера, через цепочку FORWARD. Поэтому до меня доходят только правильные пакеты.

2024-09-12T20:08:03.155Z
Kiduvago

Выложил 2 скриншота с трафиком на сервере и на клиенте. Забыл изначально добавить в 1й пост :slight_smile:

2024-09-12T20:09:05.150Z
ValdikSS

Скриншоты не подойдут

2024-09-12T22:04:38.077Z
Kiduvago

А на записе трафика как это выглядит? Вы где нибудь описывали данный случай, скриншоты может какие? Если нет, то можете сделать запись трафика на клиенте и сервере, как я сделал и выложить скриншоты.

2024-09-13T05:27:38.185Z
Kiduvago

13 сентября в ЛС отправил 3 разных SSH сессии. Подтвердите пожалуйста прочтение.

2024-09-14T16:53:14.462Z
bolvan

Не прокатит. DPI активный. После http redirect ничего от сервера больше не идет, а клиент шлет ретрансмиссии FIN,ACK до тех пор, пока ему это не надоедает, и он отсылает RST

2024-09-14T19:44:35.195Z
TheAndromar(Andrey Markaryan)

Подтвержаю, такая же проблема и точно такую картину наблюдаю через Wireshark. Домашний интернет Ростелеком (МО, Красногорск) и режут трафик ShadowSocks (без надстроек). На мобильных операторах все стабильно работает и SSH и SS.

2024-09-18T12:41:43.507Z
Kiduvago

Можете скиншот выложить, где в SSH соединении подменяется keepAlive пакет и приходит HTTP пакет или пакет с флагами “FIN, PSH, ACK” (когда он не HTTP).

2024-09-19T14:36:39.537Z
Kiduvago

Если посмотреть внимательно на скриншотах в 1 сообщении, то можно заметить что SEQ и ACK поля разные у отправляемых и получаемых TCP пакетов.
Разве они не должны быть одинаковыми?

Или это признак активного DPI, который прям проксирует через себя TCP соединение?
Не углублялся так глубоко, поэтому не знаю таких деталей.

2024-09-19T14:41:30.527Z
Kiduvago

Спустя месяц после подачи заявки в техподдержку Билайна проблема была решена.
Сейчас разрывов в SSH нет.

2024-10-21T15:21:03.094Z
praniguroiqua

Техподдержку кого, хостера или провайдера? А то непонятно.

2024-10-22T12:45:57.807Z
Kiduvago

Билайна

2024-10-22T14:45:53.270Z
praniguroiqua

Спасибо.

2024-10-22T15:07:02.124Z