Клон з офісу працює, той самий клон через точку доступу телефона працює, а той самий клон з готельної мережі висить, доки не увімкнуть VPN. Рукостискання SSH завершується, і сеанс замовкає на першій справжній передачі. Один рядок, доданий у конфігурацію клієнта, лікує git і ssh разом. Коли одне налаштування клієнта виправляє кілька інструментів одразу, несправність у тому, що клієнт надсилає, а не в каналі, яким він це надсилає.

Читайте симптом як різницю в маршрутизації

Тунель, який лікує проблему, рідко буває ремонтом. Він змінює маршрут, оператора й проміжні пристрої, а ноутбук продовжує створювати ті самі пакети. Якщо один маршрут неправильно обробляє заголовок, а інший пропускає його без змін, різниця в політиці проміжного пристрою, а не в клієнті. Тут тунель — свідок, а не рішення.

Точка, у якій помирає сеанс, звужує пошук. Ніщо з того, що зривається під час пошуку імені або обміну ключами, так не виглядає. Сеанс, який проходить автентифікацію, друкує банер і потім завмирає на першому великому записі, уже довів, що маршрутизація, імена й облікові дані працюють.

Клієнт ставить байт QoS на кожен сокет SSH

Кожне з'єднання OpenSSH починаючи з 7.8 несе в заголовку IP значення, яке маршрутизатори можуть використовувати для пріоритизації трафіку. Термінальні сеанси отримують одне значення, а масові копії інше, за теорією, що людина, яка набирає текст, заслуговує кращого ставлення, ніж передавання файлу. Більшість мереж повністю ігнорують цю підказку, тому вона роками залишається непоміченою. Меншість драйверів Wi-Fi, мобільних операторів і VPN-концентраторів реагує на неї, і деякі реагують погано.

Коли це значення переписують або відкидають посеред потоку, з'єднання не розривається, воно перестає просуватися. Повтори зростають, вікно руйнується, а застосунок нічого не повідомляє, бо ніщо не повернуло помилку. Саме ця тиша змушує людей описувати симптом як зависання, а не як збій.

Спочатку підтвердьте версію клієнта командою ssh -V. Будь-яка версія від 7.8 і вище несе таку поведінку типово.

Три команди, які відокремлюють це від MTU і DNS

Дві схожі причини варто виключити, перш ніж правити будь-який файл конфігурації. Несправність MTU пропускає дрібні обміни й завмирає на першому великому пакеті, а несправність імен узагалі не створює сеанс.

ssh -o IPQoS=none -v [email protected]
ssh -G [email protected] | grep -i ipqos
sudo tcpdump -ni any -vv "tcp port 22"

Перша команда повторює невдалу операцію з вимкненою позначкою, і її успішний запуск — найсильніший одиничний доказ, який є. Друга друкує конфігурацію, яку клієнт справді застосує до цієї адреси, і це ловить застарілий запис у файлі, про який ви забули. Третя показує байт TOS в обох напрямках, поки передача стоїть, і цікавий взірець — значення на зламаному маршруті та його відсутність на робочому.

Знімайте на ноутбуці, а не на сервері, бо значення ставить відправник і будь-який напрямок може його змінити. Порівняйте робочий і невдалий маршрути тим самим записом, і різниця проявиться без здогадок.

Помістіть виняток в один файл, по одному хосту за раз

Виняток має стояти поруч із хостом, до якого він належить, із коментарем, що пояснює, навіщо він існує.

Host gitlab.example.internal
    IPQoS none
    # direct route rewrites the marking; the tunnel route passes it

Область дії важливіша за саме значення. Запис із шаблонним знаком вимикає поведінку всюди, викидає підказку, яка допомагає в добре поведених мережах, і не залишає нікому можливості сказати, коли вона з'явилася. Запис для одного хоста читабельний, зворотний і легко видаляється після лагодження мережі. Використовуйте файл користувача для особистого обходу й керований файл, коли те саме виключення потрібне цілому парку машин.

Чітко скажіть, що виняток не покриває. Він стосується SSH, тому віддалене сховище HTTPS, дзеркало пакетів і браузер залишаються поза ним, і збій у будь-якому з них потребує власного доказу. У ланцюжку через бастіон кожен перехід використовує конфігурацію клієнта, і перехід, що застрягає, — той, який варто обмежити.

Замкніть коло з власником мережі

Передайте знахідку як чотири факти: версія клієнта, перевірений маршрут, використовуваний клієнт VPN і який напрямок ніс позначку. Цих чотирьох достатньо власникові мережі, щоб відтворити ставлення й вирішити, чи воно навмисне.

Якщо виняток не лікує зависання, приберіть його. Обхід, що пережив невдалий експеримент, стає фольклором, і наступна людина витрачає годину, доводячи, що він нічого не робить. Якщо ж він лікує зависання, шлях усе ще неправильний для кожного іншого інструмента, який його перетинає, і ремонт — справа того, хто керує проміжним пристроєм.

Зміна на клієнті — це тимчасове рішення з терміном придатності. Запишіть цей термін у коментар.

Схожі статті