Нічого так не підриває довіру до «ІТ», як екран ERP, що зависає саме тоді, коли хтось проводить проведення рахунків. Курсор крутиться, сесія тайм-аутиться, і раптом ваша фінансова команда виконує давній ритуал: закрити все, відкрити знову, повторно ввести дані, тихо лаятися.
VPN-ам зазвичай дістається через їхню помітність. Іноді це справедливо. Частіше VPN — це місце, де крихка поведінка додатка зустрічається із затримкою, втратами пакетів, проблемами MTU, плутаниною з DNS і стейтфул-фаєрволами з короткою пам’яттю. Ось як змусити цю купу працювати в продакшні — без здогадок.
Що насправді означають «зависання» (і чому це не містика)
Коли користувачі кажуть «ERP зависла», система зазвичай робить саме те, що ви їй наказали: чекає. Вона чекає на відповідь по мережі, кругову поїздку в базу даних, звільнення блокування файлу або повторну домовленість TLS-сесії. Більшість прикладних корпоративних додатків (ERP/CRM) дуже балакучі: багато дрібних запитів, безліч залежностей і багато припущень про мережі рівня LAN.
VPN змінюють «фізику»:
- Збільшується затримка (навіть «хороший» VPN додає кілька або десятки мілісекунд).
- Втрата пакетів стає помітною (Wi‑Fi, LTE і комерційні провайдери люблять мікро-втрати).
- Шляховий MTU ламається (накладення інкапсуляції, блоковані ICMP і раптова фрагментація).
- Змінюється маршрутизація/DNS (split DNS, NRPT, доступність резолверів, search domains).
- Стейтфул-пристрої накладають таймаути (NAT, фаєрволи, проксі, IDS).
ERP/CRM підсилюють ці проблеми, бо часто мають:
- Довгоживучі сесії з крихкими механізмами keepalive.
- Жорстко вбудовані таймаути, налаштовані під LAN-умови офісу.
- Змішані протоколи (HTTP(S), WebSockets, SMB, драйвери БД, RDP/ICA — іноді все в одному «workflow»).
- Різкі стрибки обсягу даних (експорт звітів, вкладення, оновлення клієнта).
Завдання не в тому, щоб «зробити VPN швидшим». Завдання — зробити VPN передбачуваним і тримати критичні потоки додатка подалі від відомих пасток.
Цікаві факти та історичний контекст (можна використати на нарадах)
- IPsec стандартизували в 1990-х з метою захистити сам IP, а не лише веб-трафік. Такий «рівень мережі» пояснює його повсюдність у site-to-site VPN.
- SSL VPN стали популярними, бо порт 443/HTTPS проходить. Це було не питання елегантності — це було питання виживання в еру суворого виходу в інтернет.
- TCP-over-TCP «колапс» відомий десятиліттями: тунелювання TCP-трафіку всередині TCP VPN може призвести до компаундуваних ретрансляцій і жахливого throughput при втратах.
- Path MTU Discovery покладається на ICMP для коректної роботи. Блокування ICMP «заради безпеки» — надійний спосіб створити таємничі таймаути.
- NAT і стейтфул-фаєрволи перетворили мережі на оренду: якщо ви нічого не надсилаєте періодично, ваш «з’єднання» може бути видалене посеред сесії, навіть якщо обидва кінці в порядку.
- Вендори ERP історично оптимізували під LAN, бо саме там жили ERP: на локальних серверах, з товстими клієнтами і низькою затримкою офісної мережі. Хмарні сервіси і віддалена робота виставили ці припущення на показ.
- SMB довго був чутливим до затримок. Він покращився (SMB2/3), але все ще карає за великий RTT і втрати, особливо при дрібних I/O і балакучих операціях метаданих.
- Wi‑Fi‑ретрансляції можуть виглядати як «випадкова» втрата пакетів на шарі VPN. Шифрування VPN приховує видимість додатка, тож команда мережі часто бачить лише «зашифрований UDP» і махає рукою.
- Сучасний TLS може швидко відновлювати сесію, але мережеві пристрої, що інспектують або проксують трафік, можуть ламати ці оптимізації, змушуючи додаткові рукостискання і затримки.
Швидкий план діагностики: знайти вузьке місце швидко
Якщо нічого більше не робите — виконайте це по порядку. Ідея в тому, щоб припинити сперечання і почати ізоляцію проблеми.
1) Визначте, чи це затримка, втрата чи MTU
- Затримка: додаток працює, але скрізь відчувається повільно; кожен клік чекає.
- Втрата/джітер: додаток «зависає», потім надолужує; сесії падають; відбувається повторне з’єднання; голос/відео також нестабільні.
- MTU/MSS: дрібні речі працюють; великі завантаження/вивантаження зависають; окремі сторінки стають нестабільними; збереження не вдається; деякі TLS-сайти завантажуються наполовину.
2) Доведіть, чи проходить ERP/CRM трафік через VPN
- Перевірте маршрутизацію (клієнт) і підтвердьте, чи ви у режимі full-tunnel або split-tunnel для кінцевих точок ERP/CRM.
- Перевірте DNS: чи резолвиться ім’я ERP на правильну IP-адресу (внутрішню чи публічну)?
3) Ідентифікуйте горловину: Wi‑Fi клієнта, аплінк офісу, концентратор VPN чи бекенд додатка
- Порівняйте поведінку з: офісної LAN, вдома через VPN, вдома без VPN (якщо ERP — SaaS) і тестового хоста в тій же підмережі, що й сервери ERP.
- Шукайте асиметричну продуктивність: швидке завантаження/повільне відвантаження часто вказує на shaping, bufferbloat чи поліси полірування.
4) Не налагоджуйте ERP, поки тунель не стане нудним
Коли транспорт стабільний — немає стрибків втрат, проблем MTU, флуктуацій DNS — тоді дозволено звинувачувати додаток. До того моменту ви просто наробите шуму.
Одна цитата під рукою: «Надія — не стратегія.» — Джеймс Кемерон (парафраз, часто використовується в операціях та інженерії)
Типові режими відмов: затримка, втрата, MTU, DNS і стан сесій
Затримка: смерть від тисячі кругових поїздок
ERP/CRM додатки часто генерують один запит на дію в UI, іноді десятки. Додайте 30–60 мс RTT через VPN і робочий процес із 200 послідовних викликів перетворюється на перерву на каву. Тому «заміна каналів» не вирішує: проблема в затримці, а не в пропускній здатності.
Типові джерела:
- Концентратор VPN далеко від користувачів (погана географія).
- Hairpin маршрутизація: користувач → VPN → дата-центр → SaaS → назад через VPN, через full tunnel і «безпеку».
- DNS змушує йти внутрішнім маршрутом, коли зовнішній був би швидшим (або навпаки).
- RDP/ICA через VPN по Wi‑Fi із bufferbloat (стрибки затримки під навантаженням).
Втрата пакетів і джітер: кнопка «заморозки»
Втрати шкодять усім, але особливо інтерактивним і балакучим додаткам. 0.5% втрат може перетворити хороший день на потік тикетів. Шифрування VPN також ускладнює класифікацію QoS, якщо ви це не передбачили.
Поширені джерела:
- Споживчий Wi‑Fi, особливо в переповнених середовищах.
- Перегрузка провайдера та пікове обмеження.
- UDP‑базовані VPN на мережах, що занижують пріоритет UDP.
- CPU-навантаження концентратора VPN (шифрування не безкоштовне).
MTU і MSS: категорія «працює, поки не перестане»
Інкапсуляція додає накладні витрати. Якщо їх не врахувати, отримаєте фрагментацію або чорноту пакетів. Класичний симптом: логін працює, навігація працює, а потім експорт звіту зависає назавжди. Або вкладення файлів тайм-аутиться. Або сторінка завантажується наполовину і зупиняється.
Поширені джерела:
- ICMP заблокований десь на шляху, що ламає PMTUD.
- Накладні витрати VPN не компенсуються MSS-клапуванням.
- Змішані тунелі (наприклад, вкладені VPN) з непослідовним MTU.
DNS і маршрутизація: мовчазні саботажники
Збої VPN часто виглядають як відмови додатка, бо резолв і маршрутизація вирішують, до якого сервера ви дійдете. Split DNS може бути правильним, але тільки якщо клієнт має стабільний доступ до резолвера і використовує його послідовно.
Шаблони, що спричиняють біль:
- ERP резолвиться у приватну IP, але split tunnel не маршрутизовує її.
- Кілька DNS-суфіксів змушують клієнта пробувати неправильне ім’я спочатку (повільний fallback).
- DNS-запити йдуть через VPN, а відповіді — напряму (або навпаки) і відкидаються.
Стан сесії та таймаути простою: театральні відключення вдень
Сесії ERP/CRM можуть бути HTTP-куки, JWT, сесії бази даних або довгоживучі WebSocket. VPN додає ще один шар сесій, а посередині — NAT і фаєрволи з таймаутами простою. Коли будь-який шар тихо закінчується, користувач відчуває «зависання», поки додаток не відпустить.
Ось де keepalive і таймаути мають значення. Не як фольклор. Як інженерія.
Жарт #1: VPN схожий на ліфт: його помічають лише тоді, коли він зупиняється між поверхами.
Практичні завдання: команди, вихідні дані та рішення (12+)
Це практичні перевірки, які можна виконати з Linux jump host, шлюзу VPN або VM для налагодження поблизу сегмента користувача. Виходи нижче репрезентативні. Використайте їх, щоб вирішити, що виправляти далі.
Завдання 1 — Підтвердити маршрут до кінцевої точки ERP/CRM
cr0x@server:~$ ip route get 10.42.8.25
10.42.8.25 via 10.8.0.1 dev tun0 src 10.8.0.23 uid 1000
cache
Що це означає: Трафік до 10.42.8.25 йде через інтерфейс тунелю VPN (tun0) через 10.8.0.1.
Рішення: Якщо це має бути split-tunnel (наприклад SaaS), змініть політику. Якщо має йти через VPN, продовжуйте діагностику стану тунелю.
Завдання 2 — Перевірити резолюцію DNS і чи відповідає вона наміру
cr0x@server:~$ getent hosts erp.internal.example
10.42.8.25 erp.internal.example
Що це означає: Ім’я резолвиться у приватну адресу.
Рішення: Переконайтеся, що маршрутизація включає 10.42.0.0/16 через VPN. Якщо користувачі мають звертатися до SaaS/публічної IP, виправте split DNS або умовне форвардінг.
Завдання 3 — Виміряти базову затримку і джітер (швидко і брудно)
cr0x@server:~$ ping -c 20 10.42.8.25
PING 10.42.8.25 (10.42.8.25) 56(84) bytes of data.
64 bytes from 10.42.8.25: icmp_seq=1 ttl=62 time=38.2 ms
64 bytes from 10.42.8.25: icmp_seq=2 ttl=62 time=41.7 ms
64 bytes from 10.42.8.25: icmp_seq=3 ttl=62 time=120.5 ms
...
--- 10.42.8.25 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19021ms
rtt min/avg/max/mdev = 37.8/52.3/120.5/18.4 ms
Що це означає: Втрат немає, але стрибки джітеру (max 120 ms). Це відчувається як «зависання» в інтерактивних додатках.
Рішення: Досліджуйте bufferbloat/shaping (домашній роутер, аплінк провайдера), черги VPN або перевантаження концентратора. Ще не налаштовуйте ERP.
Завдання 4 — Виявити втрати пакетів під навантаженням довшим ping
cr0x@server:~$ ping -i 0.2 -c 200 10.42.8.25
...
--- 10.42.8.25 ping statistics ---
200 packets transmitted, 196 received, 2% packet loss, time 40123ms
rtt min/avg/max/mdev = 39.1/55.7/310.2/42.8 ms
Що це означає: 2% втрат — достатньо, щоб зіпсувати балакучий ERP, особливо по TCP.
Рішення: Віддайте пріоритет усуненню втрат: Wi‑Fi, ISP, полірування UDP, або відкидання на VPN-пристрої. Розгляньте зміну транспорту VPN, налаштування keepalive і вимогу дротового з’єднання для критичних користувачів.
Завдання 5 — Перевірити Path MTU з «не фрагментувати» ping
cr0x@server:~$ ping -M do -s 1472 -c 3 10.42.8.25
PING 10.42.8.25 (10.42.8.25) 1472(1500) bytes of data.
ping: local error: message too long, mtu=1420
ping: local error: message too long, mtu=1420
ping: local error: message too long, mtu=1420
Що це означає: Ефективний MTU на шляху — 1420, а не 1500.
Рішення: Клапануйте MSS або налаштуйте MTU тунелю, щоб уникнути фрагментації/чорноти. Якщо ICMP блокується — виправте це, інакше ви будете ганятися за привидами.
Завдання 6 — Підтвердити MTU інтерфейсу на клієнті/шлюзі VPN
cr0x@server:~$ ip link show tun0
7: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1400 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 500
link/none
Що це означає: MTU тунелю — 1400. Це поширено для деяких VPN-настроїв, але має відповідати реальності.
Рішення: Якщо ваш PMTU-тест показує 1420, 1400 — безпечно. Якщо PMTU менший за MTU тунелю, буде фрагментація або чорнота — підкоригуйте.
Завдання 7 — Перевірити TCP MSS-клапування на Linux-шлюзі (iptables)
cr0x@server:~$ sudo iptables -t mangle -S | grep -i mss
-A FORWARD -o tun0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Що це означає: SYN-пакети, що йдуть через tun0, матимуть MSS скоригований до PMTU.
Рішення: Якщо підозрюються проблеми MTU і цього немає — додайте (або еквівалент на вашому фаєрволі). Якщо є — шукайте далі.
Завдання 8 — Підтвердити транспорт VPN і уникати TCP-over-TCP коли можливо
cr0x@server:~$ sudo ss -Htanp | grep -E 'openvpn|wg|strongswan' | head
ESTAB 0 0 10.0.0.5:1194 198.51.100.20:51432 users:(("openvpn",pid=1342,fd=6))
Що це означає: Сервер OpenVPN використовує TCP-сесію (ESTAB) на 1194.
Рішення: Якщо тунелюється багато TCP-додатків, наполегливо рекомендую UDP-базований транспорт VPN (або WireGuard/IPsec), якщо політика не забороняє. TCP-VPN може працювати, але крихкий при втратах.
Завдання 9 — Перевірити вплив таймаутів фаєрволу/NAT (conntrack)
cr0x@server:~$ sudo conntrack -S
cpu=0 found=23145 invalid=12 insert=89234 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=123
Що це означає: Ненульове invalid і багато search_restart можуть вказувати на стрес. Це не доказ, але запах.
Рішення: Якщо користувачі скаржаться на відключення під навантаженням — перегляньте розмір таблиці conntrack і таймаути. Збільште ємність або зменшіть кількість сесій (наприклад, split tunnel для SaaS).
Завдання 10 — Подивитися, чи досягнуто ліміту таблиці conntrack
cr0x@server:~$ sudo sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
net.netfilter.nf_conntrack_count = 257923
net.netfilter.nf_conntrack_max = 262144
Що це означає: Ви близькі до ліміту. Коли таблиця заповниться, нові потоки відкидаються. Користувачі називають це «зависанням».
Рішення: Збільшіть nf_conntrack_max (і RAM), зменшіть непотрібний full-tunnel трафік або горизонтально масштабируйте шлюз.
Завдання 11 — Визначити, чи шлюз CPU-bound (крипто)
cr0x@server:~$ top -b -n 1 | head -n 12
top - 12:43:11 up 31 days, 4:02, 2 users, load average: 7.92, 7.10, 6.55
Tasks: 221 total, 1 running, 220 sleeping, 0 stopped, 0 zombie
%Cpu(s): 6.1 us, 2.0 sy, 0.0 ni, 75.2 id, 16.3 si, 0.0 st
MiB Mem : 32000.0 total, 1100.3 free, 9800.2 used, 21100.1 buff/cache
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1342 root 20 0 1450m 220m 12m S 220.0 0.7 80:12.43 openvpn
Що це означає: Високий softirq (si) і процес VPN, що споживає кілька ядер. Це може означати вузьке місце в обробці пакетів.
Рішення: Увімкніть AES-NI/апаратне прискорення, налаштуйте прерозподіл переривань/RPS або перейдіть на більш ефективний стек VPN. Іноді вирішення — «купити потужніший сервер», і так, це інженерне рішення.
Завдання 12 — Перевірити помилки/скидання інтерфейсу на шлюзі
cr0x@server:~$ ip -s link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP mode DEFAULT group default qlen 1000
RX: bytes packets errors dropped missed mcast
9876543210 8123456 0 12453 0 112233
TX: bytes packets errors dropped carrier collsns
8765432109 7456789 0 9821 0 0
Що це означає: Є скидання. Деякі скидання — нормальні при shaping, але стійке зростання під час скарг — підказка.
Рішення: Перевірте qdisc, розміри кілець NIC і поліси shaping. Якщо скидання корелюють зі зависаннями ERP — це мережна проблема, а не проблема ERP.
Завдання 13 — Валідовати QoS/чергування на Linux (контроль bufferbloat)
cr0x@server:~$ tc qdisc show dev eth0
qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn
Що це означає: fq_codel допомагає зменшити bufferbloat і затримку під навантаженням.
Рішення: Якщо ви бачите простий pfifo_fast або величезні буфери і користувачі скаржаться на зависання під час завантажень, впровадьте сучасні AQM (fq_codel/cake) там, де можете.
Завдання 14 — Захопити доказ MTU blackholing через tcpdump
cr0x@server:~$ sudo tcpdump -ni tun0 host 10.42.8.25 and icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
12:47:01.112233 IP 10.8.0.23 > 10.42.8.25: ICMP echo request, id 3921, seq 1, length 1480
12:47:01.112987 IP 10.42.8.25 > 10.8.0.23: ICMP unreachable - need to frag (mtu 1420), length 556
Що це означає: PMTUD працює (ви отримали «need to frag» з MTU). Добре — тепер клапануйте MSS і припиніть надсилати надмірно великі пакети.
Рішення: Якщо ніколи не бачите ICMP «need to frag», підозрівайте фільтрацію ICMP і виправте її або встановіть консервативний MTU.
Завдання 15 — Перевірити прикладну доступність і час TLS-рукостискання
cr0x@server:~$ curl -sk -o /dev/null -w "dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total}\n" https://erp.internal.example/login
dns=0.004 connect=0.037 tls=0.210 ttfb=0.612 total=0.613
Що це означає: Час TLS-рукостискання — 210 ms; time-to-first-byte — 612 ms. Це може бути нормально, але якщо під час «зависань» ці значення зростають — у вас нестабільний шлях або насичені бекенди.
Рішення: Якщо DNS/connect/tls стрибають — лагодьте мережу/VPN. Якщо тільки TTFB зростає при стабільних мережних таймінгах — досліджуйте рівні веб/додаток/базу даних ERP.
Завдання 16 — Перевірити асиметричну маршрутизацію (часто ламає стейтфул-пристрої)
cr0x@server:~$ traceroute -n 10.42.8.25 | head -n 8
traceroute to 10.42.8.25 (10.42.8.25), 30 hops max, 60 byte packets
1 10.8.0.1 2.011 ms 1.902 ms 2.144 ms
2 10.10.0.1 8.220 ms 8.101 ms 8.333 ms
3 10.42.0.1 35.009 ms 34.882 ms 35.120 ms
4 10.42.8.25 38.551 ms 38.420 ms 38.600 ms
Що це означає: Шлях вперед виглядає нормально. Асиметрія стосується зворотного шляху, тож необхідно перевірити маршрутизацію на стороні підмережі ERP.
Рішення: Якщо сервери ERP повертають трафік через інший фаєрвол, ніж той, що бачив SYN, ви отримаєте «випадкові» затримки і ресети. Виправте симетрію маршрутів або використовуйте статeless-правила там, де це доречно.
Проєктуйте VPN під бізнес-додатки, а не під героїчні вчинки
Рішення: full tunnel чи split tunnel (з дорослими правилами)
Full tunnel привабливий, бо відчувається контрольованим: «весь трафік іде через нас». Але це перетворює ваш VPN у інтернет офісу для кожного віддаленого користувача — чудовий спосіб швидко вивчити, що таке «планування ємності» в реальному часі.
Для ERP/CRM зазвичай найкраще — селективне тунелювання:
- Тунелюйте те, що має бути приватним: on-prem ERP, внутрішні API, файлові сервіси, пов’язані з робочими процесами ERP.
- Не hairpin-те SaaS: якщо ваш CRM — SaaS, маршрутизувати його через офіс додає затримку і домени відмов без користі.
- Використовуйте split DNS обережно: внутрішні імена резолвяться внутрішньо; публічні — публічно. Тримайте поведінку детермінованою.
Команди безпеки часто бояться, що split tunnel означає «менш безпечно». Точніше — split tunnel означає, що треба навмисно проєктувати контролі (EDR, перевірка стану пристрою, захист DNS і політики egress), а не випадково блокувати через hairpin.
Обрати правильний транспорт: UDP коли можна, TCP лише якщо змушують
Для інтерактивних бізнес-додатків UDP-базоване тунелювання зазвичай більш прощаюче при втратах, бо уникає feedback-циклу TCP-over-TCP. WireGuard і IPsec зазвичай добре працюють і мають просту операційну підтримку. OpenVPN теж може бути нормальним, але уникайте TCP-транспорту, якщо є вибір.
Якщо мережа блокує UDP, все ще можна домогтись успіху з TCP — просто будьте готові витратити більше часу на налаштування MTU/MSS і keepalive, і не прикидайтесь, що це «так само добре».
Зробіть MTU нудним: встановіть, клапануйте, моніторьте
Проблеми MTU класичні, бо вони переривчасті й залежать від розміру корисного навантаження. Вирішуйте їх системно:
- Виміряйте ефективний PMTU через тунель.
- Встановіть MTU тунелю трохи нижче за нього.
- Клапануйте TCP MSS на виході тунелю до PMTU.
- Дозвольте ICMP «fragmentation needed» (type 3 code 4) через відповідні фаєрволи.
Якщо хтось каже «ми блокуємо ICMP для безпеки», передайте йому пейджер. Не як погрозу. Як освітній момент.
Тримайте з’єднання живими (бо середні коробки забувають)
Таймери простою — не теоретичні. Їх встановлюють NAT-пристрої, фаєрволи і іноді сам концентратор VPN. Коли клієнт ERP тримає сесію в стані простою, поки користувач читає екран, транспорт може теж перейти в стан простою.
Використовуйте:
- VPN keepalive з інтервалом меншим за найкоротший таймаут на шляху.
- Прикладні keepalive, коли це підтримується (WebSocket ping/pong, параметри keepalive для БД).
- Налаштування таймаутів фаєрволу для відомих добрих потоків додатка.
Зменшіть балакучі залежності: наблизьте шар додатка або опублікуйте додатки
Найнадійніший спосіб змусити балакучий ERP працювати через неідеальну мережу — припинити відправляти кожну кругову поїздку через VPN. Два поширені патерни:
- Віртуальний десктоп / опублікований додаток близько до ERP (RDP/ICA): тільки пікселі/натискання клавіш проходять через WAN. Ви міняєте частину UX на стабільність.
- Веб-фронтенди та API поруч з базою даних: тримайте балакучі виклики БД всередині дата-центру, а не через VPN.
Так, це архітектурно. Оце і є сенс. Ви не зможете нескінченно «налаштовувати» фізику.
Спостерігайте як дорослі: вимірюйте UX користувача, а не лише «тунель up/down»
«VPN підключено» — це глянцевий метрик. Вам потрібні:
- RTT і втрата до ключових внутрішніх підмереж.
- Падіння пакетів тунелю, перевстановлення ключів, повторні договори.
- CPU шлюзу, softirq, NIC drops.
- Таймінги додатка (TTFB, рівні помилок, випадки обривів сесій).
Корелюйте. Звіти про зависання, що збігаються з падіннями на шлюзі — мережа. Звіти, що збігаються зі збоями блокувань бази даних — додаток. Ваше завдання — припинити карусель звинувачень.
Три короткі історії з корпоративного життя
Коротка історія №1 — Інцидент через неправильне припущення
Компанія щойно перемістила веб-шар ERP у приватну підмережу і опублікувала його через VPN. Віддалені працівники скаржились, що «кожного дня після обіду» ERP зависав при завантаженні PDF рахунків. Інфраструктурна команда бачила чисті графіки: тунелі VPN були вгорі, CPU в нормі, канал не насичений. Вони ярликнули це «багом ERP» і ескалували вендору.
Вендор попросив HAR-логи. Логи показали патерн: дрібні API-виклики проходили, але запит на завантаження зависав і входив у таймаут. Хтось запропонував MTU. У кімнаті стало тихо — MTU пам’ятають лише тоді, коли воно псує тиждень.
Вони протестували PMTU через тунель і знайшли ефективний MTU 1412 через upstream WAN-пристрій. VPN був налаштований з MTU 1500, бо «Ethernet — 1500», що правда так само, як «обід опівдні»: залежить від місця та обставин.
Виправлення було простим: MSS-клапування на шлюзі і консервативний MTU тунелю. Проблеми з завантаженням зникли одразу. Справжній урок postmortem — не MTU сам по собі, а неправильне припущення, що «якщо дрібні запити працюють, мережа в порядку». Чутливість до розміру payload — великий підказувач.
Коротка історія №2 — Оптимізація, що відгукнулась проти
Інша організація хотіла «прискорити» VPN. Хтось помітив, що UDP іноді блокується в готельному Wi‑Fi, тому переключили VPN на TCP глобально «для надійності». Це допомогло кільком мандрівникам підключатися частіше. Кількість тикетів впала на два тижні. Потім настало закриття місяця.
Під час пікової фінансової активності час відгуку ERP у віддалених користувачів перетворився з «нормального» на «замерзлий». VPN залишався підключеним, але пропускна здатність різко падала при легких втратах пакетів. Користувачі повідомляли, що ERP зависав 20–60 секунд, а потім раптово надолужував.
Захоплення пакетів показало класичну поведінку TCP-over-TCP: ретрансляції в середині ретрансляцій, згортаючіся congestion windows і тунель, що підсилює деградацію — у поганому сенсі. Їхня «оптимізація» покращила підключення в агресивних мережах, але зробила нормальний джітер руйнівнішим.
Виправлення не полягало в осудженні того, хто змінив налаштування. Виправлення — відновити UDP як дефолт, додати профіль TCP-фолубек для середовищ, що цього потребують, і дозволити клієнтам обирати на основі досяжності. Надійність — не «вибрати TCP», а «проєктувати під мережу, яка в вас є».
Коротка історія №3 — Нудна, але правильна практика, що врятувала день
Виробнича компанія працювала з on-prem ERP з товстим клієнтом, який спілкувався з базою даних і файловим шаром. Вони бачили зростання віддаленої роботи і знали, що VPN стане новою залежністю. Вони зробили дві непрестижні речі на початку: задокументували критичні потоки ERP (які сервери, які порти, які протоколи) і налаштували постійні опитування з підмережі VPN до цих кінцевих точок.
Місяць по тому вийшло оновлення політики фаєрволу. Ніхто не чіпав конфігурацію VPN. А наступного ранку віддалені користувачі ERP побачили переривчасті зависання під час відкриття вкладень. Helpdesk швидко ескалував, бо панель моніторингу вже показала зміни: час відповіді SMB з підмережі VPN підскочив, і з’явилися нові TCP reset-ини на шляху до сервера вкладень.
Оскільки команда мала карту потоків, вони не марнували півдня на випадкові теорії. Знайшли невідповідність таймаутів сесій на фаєрволі для SMB-потоків з пулу VPN і відкотили конкретну політику. Вендор ERP не був залучений. Фінанси не довелося нічого повторно вводити.
Нічого героїчного не сталося. Саме тому це спрацювало. Нудна спостережливість і відомі добрі базові лінії перемагають драму щоразу.
Поширені помилки: симптоми → корінна причина → виправлення
Це частина, яку можна вставити в систему тикетингу і виглядати розумно.
1) «Логін працює, але завантаження/завантаження зависає»
- Симптоми: Вкладення, експорт звітів або окремі сторінки зависають; дрібні API-виклики проходять.
- Корінна причина: MTU blackholing або проблеми фрагментації; PMTUD зламаний через фільтрацію ICMP; відсутнє MSS-клапування.
- Виправлення: Виміряйте PMTU, встановіть консервативний MTU тунелю, клапануйте MSS на egress, дозвольте ICMP «frag needed».
2) «Воно зависає на 30 секунд, потім надолужує»
- Симптоми: Переривчасті довгі паузи; в кінці відновлюється; особливо під час завантаження Wi‑Fi або у пікові години.
- Корінна причина: Втрата пакетів/джітер з TCP retransmit backoff; іноді TCP-транспорт VPN посилює втрати.
- Виправлення: Віддавайте перевагу UDP-транспорту; зменшуйте джерела втрат (дріт, кращий Wi‑Fi), впровадьте AQM (fq_codel/cake), перевірте скидання на шлюзі.
3) «VPN підключено, але ERP каже «не можу дістатися сервера»»
- Симптоми: Тунель вгорі; ім’я резолвиться; з’єднання не вдається або тайм-аутиться.
- Корінна причина: Відсутні маршрути split tunnel; ERP резолвиться у внутрішню IP, але клієнт відправляє через дефолтний шлюз; відсутній ACL.
- Виправлення: Виправте push/policies маршрутів; підтвердьте з
ip route get; узгодьте DNS з наміром маршрутизації.
4) «Працює вранці, ламається по обіді»
- Симптоми: Кореляція по часу доби; більше скарг під час дзвінків/завантажень.
- Корінна причина: Конгестія і bufferbloat; насичення WAN аплінку; CPU шлюзу під пікове навантаження.
- Виправлення: Форма трафік; впровадьте AQM; масштабування шлюзу; припиніть hairpin SaaS через VPN.
5) «Тільки деякі користувачі постраждали, і це змінюється»
- Симптоми: Випадкові підмножини користувачів бачать зависання; важко відтворити.
- Корінна причина: Anycast/гео-різниця до VPN POP, різниця маршрутів ISP, умови Wi‑Fi або різниця MTU при вкладених тунелях.
- Виправлення: Стандартизувати профілі клієнтів; запропонувати регіональні VPN endpoint-и; збирати клієнтські виміри (RTT/втрата/MTU).
6) «RDP до ERP десктопа зависає, а веб-серфінг в порядку»
- Симптоми: RDP/ICA сіпається або зависає; загальний інтернет здається нормальним.
- Корінна причина: UDP заблокований або обмежений, або високий джітер; RDP чутливий до стрибків затримки; черги VPN.
- Виправлення: Забезпечте стабільний UDP де можливо; застосуйте QoS на краю; зменшіть стрибки затримки за допомогою AQM; розгляньте налаштування підтримки UDP у RDP в залежності від середовища.
7) «Постійно виходить з системи, коли користувачі читають екрани»
- Симптоми: Неактивні користувачі відключаються; сесія скидається через кілька хвилин бездіяльності.
- Корінна причина: NAT/фаєрвол таймаути простою коротші за очікування додатка; відсутні keepalive.
- Виправлення: Встановіть VPN keepalive; налаштуйте таймаути сесій; забезпечте, щоб довгоживучі потоки дозволялися і відслідковувались коректно.
Жарт #2: Якщо ваш план діагностики — «перезапустити VPN», ви не виправляєте систему — ви виконуєте ритуал для богів пакетів.
Чеклісти / покроковий план
Покроково: стабілізувати ERP/CRM через VPN у 10 кроків
- Перелік потоків: кінцеві точки ERP/CRM, порти, протоколи, залежності (файлові шари, провайдери ідентифікації, API).
- Визначте наміри маршрутизації: split tunnel для SaaS; тунель тільки для внутрішніх мереж, що мають бути приватними.
- Забезпечте детермінований DNS: умовне переадресування/split DNS, щоб імена стабільно резолвилися правильно.
- Виміряйте PMTU через тунель і стандартизуйтесь налаштування MTU для профілю VPN.
- Клапануйте MSS на виході тунелю для TCP.
- Віддавайте перевагу UDP для VPN там, де це можливо; тримайте TCP-фолубек окремим профілем.
- Встановіть keepalive менші за найкоротший таймаут середніх пристроїв; узгодьте таймаути фаєрволу з бізнес-потребами.
- Впровадьте AQM (fq_codel/cake) на краю шлюзу або WAN-пристрої, якщо маєте контроль.
- Плануйте ємність концентратора: CPU (крипто), RAM (conntrack/state), NIC drops і одночасні сесії.
- Моніторте сигнали UX: RTT/втрата, падіння тунелю, DNS збої, HTTP-таймінги і стан бекенду.
Чекліст: перед змінами в продакшні
- Чи можете відтворити зависання і зафіксувати часові мітки?
- Чи маєте базові RTT/втрати від відомого доброго користувача?
- Чи знаєте, чи трафік full-tunnel чи split-tunnel?
- Чи валідовано резолюцію DNS і чи маршрути збігаються з наміром?
- Чи тестували PMTU і підтвердили MSS-клапування?
- Чи знаєте транспорт VPN (UDP/TCP) і чому саме він?
- Чи перевіряли CPU шлюзу, скидання, використання conntrack у вікні інциденту?
Чекліст: якщо мусите залишити full-tunnel (політика)
- Переконайтеся, що egress VPN має достатню пропускну здатність і адекватне shaping/AQM.
- Не hairpin-те очевидний SaaS, якщо можна використати secure web gateway або контроль на пристрої.
- Прив’язуйте критичні бізнес-додатки до відомих добрих маршрутів і резолверів; уникайте «магічного» DNS, що змінюється залежно від мережі.
- Сегментуйте VPN-пули (виконавці/фінанси vs загальні), щоб стрімка активність однієї групи не ставала проблемою для всіх.
- Логуйте і алертьте про перевстановлення тунелю, падіння шлюзу і рівні помилок DNS.
FAQ
1) Чи варто використовувати split tunneling для ERP/CRM?
Для on-prem ERP ви тунелюєте внутрішні підмережі. Для SaaS CRM/ERP split tunnel зазвичай правильне рішення, щоб уникнути hairpin-затримок і зменшити навантаження на VPN — за умови наявності контролю на кінцевих пристроях і детермінованого DNS.
2) Чи OpenVPN «поганий» для ERP?
Ні. OpenVPN може працювати добре. Типова «підводна міна» — запуск його поверх TCP для загального використання і подив, чому продуктивність колапсує при втратах. UDP-транспорт зазвичай кращий для інтерактивних додатків.
3) Який MTU варто встановлювати?
Виміряйте PMTU через реальний шлях. Потім підберіть MTU тунелю з запасом. Якщо на ICMP покладатися не можна, оберіть консервативно і клапануйте MSS. Вгадування 1500 бо «Ethernet» — це рецепт нічних вахт.
4) Чому користувачі кажуть «зависає», а не «повільно»?
Бо багато додатків блокують UI-потік, чекаючи мережевого I/O або блокування. Втрати пакетів і відкат retransmit виглядають як жорстке зависання, навіть якщо процес живий.
5) Чи допоможе апгрейд пропускної здатності при таймаутах?
Іноді, якщо аплінк насичений і все в черзі. Але більшість проблем ERP/CRM через VPN — це затримка, джітер, MTU або таймаути стану, а не сирий bandwidth. Виміряйте перед покупкою.
6) Чому працює на мобільному хості, але не на домашньому Wi‑Fi?
Інша остання миля: Wi‑Fi інтерференція, bufferbloat роутера, shaping провайдера або обробка UDP. Хотспоти можуть бути чистішими шляхами або гіршими — залежить. Суть: проблема не в «VPN», а в шляху.
7) Чи потрібен QoS, якщо все зашифровано?
QoS можна робити по зовнішньому тунелю (за користувачем/групою, DSCP-маркуванням до шифрування або шляхом форсованого shaping на тунелі). Якщо нічого не робити, голосніше завантаження перемагає — зазвичай хтось завантажує відео саме тоді, коли фінанси проводять журнали.
8) Як зупинити відключення через бездіяльність?
Встановіть VPN keepalive і узгодьте таймаути firewall/NAT. Також перевірте, що rekey/renegotiation не перебивають довгоживучі сесії. Якщо додаток підтримує власні keepalive — увімкніть їх.
9) Чи RDP — гарне тимчасове рішення для ERP через VPN?
Часто так. Якщо ERP балакучий або використовує SMB/DB-з’єднання з клієнта, публікація додатку поруч зі серверами перетворює WAN-біль на один керований протокол. Це не модно, але дієво.
10) Яка найпоширеніша корінна причина, яку ви бачите?
MTU/MSS проблеми для «зависання при завантаженні» і втрата пакетів/джітер для «випадкових зависань». На третьому місці — погані рішення DNS/маршрутизації, що призводять до hairpin-путів або неправильних кінцевих точок.
Висновок: наступні кроки, які реально зменшать кількість тикетів
ERP/CRM через VPN відмовляє передбачуваними способами. Якщо ви ставитесь до цього як до таємниці — отримаєте таємниці. Якщо ставитись як до системи з вимірюваними властивостями — RTT, втрата, MTU, маршрутизація, DNS, таймаути стану — вона стає нудною. Нудність — ціль.
Практичні наступні кроки:
- Запустіть швидкий план діагностики для одного постраждалого шляху користувача і одного відомо-доброго шляху. Зафіксуйте RTT/втрати/PMTU і докази маршрутизації/DNS.
- Спочатку виправте MTU/MSS і обробку ICMP. Це низько зусиль і високий вплив.
- Припиніть hairpin SaaS через офіс, якщо немає конкретної, валідійованої причини.
- Віддавайте перевагу UDP-базованому транспорту VPN; тримайте TCP як профіль фолубек, а не за замовчуванням.
- Інструментуйте шлюз VPN так, ніби це важливо: падіння, conntrack, CPU/softirq і перевірки досвіду по шляхах до кінцевих точок ERP.
- Якщо ERP по суті балакучий, перемістіть взаємодію користувача ближче до додатка (опубліковані додатки/VDI), замість намагання відшліфувати WAN до ідеалу.