Ви хочете дивитися живу камеру з дому або надати регіональному менеджеру доступ до NVR, але на майданчику немає публічної IP-адреси, не хочуть відкривати вхідні правила у файрволі й не бажають потрапити до заголовків новин. Класична ситуація.
Хороша новина: це одна з проблем, яку індустрія вже вирішила. Погана новина: люди продовжують винаходити це заново через хмарні сервіси вендорів, випадкові перенаправлення портів і молитви. Збудуймо нудну, але правильну річ: офісний VPN, який чисто дістає до CCTV-пристроїв — без їх публічного виставлення в інтернет.
Що ви насправді будуєте (і що ні)
«Доступ до камер/NVR без публічних IP» — це не запит на функцію. Це проблема топології, плюс питання автентифікації, плюс проблема «не розморозьте канал зв’язку».
Ви створюєте оверлей-мережу (VPN), яка забезпечує:
- Досяжність: стабільний маршрут від ноутбука оператора (або офісної мережі) до VLAN камер / підмережі NVR.
- Ідентичність: спосіб визначити, хто підключається (і зупинити колишніх співробітників, які «тільки глянуть»).
- Політи: правила, що дозволяють лише потрібні порти й лише потрібні призначення.
- Спостережуваність: логи й метрики, щоб довести, що система працює, і швидко діагностувати проблеми.
Ви не будуєте:
- Публічний веб-портал, який пересилає порти інтерфейсу камер у світ.
- «Швидке пересилання портів» для RTSP/HTTP через поспіх.
- Залежність від хмари вендора, яка тихо стане вашим периметром.
Пряма правда: більшість CCTV-пристроїв незахищені в публічному інтернеті. Навіть пристойні моделі містять дивні сервіси, застарілий OpenSSL і код інтерфейсу, який змушує браузер поводитися підозріло. Дайте їм приватний простір, поставте на вхід охоронця і не допускайте, щоб він був п’яним.
Короткий жарт, як обіцяв і по діслові: Найшвидший спосіб «забезпечити» камеру — вимкнути її; це також найшвидший спосіб отримати дзвінок від служби експлуатації.
Цікаві факти та коротка історія, що мають значення
Це не дрібниці для вікторини. Кожен пункт впливає на рішення дизайну.
- NAT був тимчасовим рішенням: Network Address Translation став масовим у середині 1990-х переважно через дефіцит IPv4-адрес. VPN-інструменти розвивалися в світі, де «немає публічної IP» стало нормою, а не виключенням.
- IPsec передує більшості IP-камер: IPsec стандартизували наприкінці 1990-х, задовго до масового розгортання CCTV. Інструменти зрілі, але операційна складність відчутна.
- RTSP старіший за більшість прошивок камер: RTSP (кінець 1990-х) лишається основним протоколом для багатьох потоків камер. Він працює, але легко «витікає», якщо маршрутизацію зробити неправильно.
- UPnP створювався для зручності: він робив домашні мережі «так, щоб усе працювало». В установках CCTV UPnP — це шлях випадково опублікувати адмін-інтерфейс NVR в інтернеті.
- За замовчуванням креденшали були нормою: ранні вбудовані пристрої постачалися з «admin/admin». Багато сучасних моделей покращилися, але екосистема все ще несе цю спадщину.
- Ботнети любили камери: великі ботнети рекрутировали DVR/NVR і камери, бо ті були доступні, незапатчені і завжди в мережі. Якщо ваш метод доступу робить їх досяжними, ви їх добровільно віддаєте.
- «P2P хмара для камер» — це по суті NAT traversal: багато вендорів використовують вихідні з’єднання до сервісу-ранжиру для уникнення публічних IP. Це розумно, але означає, що ваш периметр включає третю сторону та їхню систему облікових записів.
- WireGuard навмисно мінімалістичний: його проектували, щоб зменшити кількість помилок у конфігурації й розмір коду. Це важливо, коли вам потрібна надійна експлуатація, а не щотижневий сеанс «чому тунель впав».
- Більшість інцидентів — це маршрутизація, а не криптографія: у продакшені шифрування VPN зазвичай працює. Падають маршрути, асиметричні шляхи, плутанина DNS і хтось, хто забув, що існує VLAN камер.
Референсні архітектури: оберіть одну і дотримуйтеся
Є три розумних патерни. Обирайте залежно від масштабу, меж довіри і того, хто контролює край мережі на кожному CCTV-майданчику.
Дизайн A: Hub-and-spoke віддалений доступ (офіс або хмара як хаб)
Це робоча конячка. Кожен майданчик встановлює вихідний VPN-тунель до хабу (офісний файрвол або невелика VM у VPC хмари). Віддалі користувачі підключаються до хабу, після чого маршрутують до майданчиків.
Переваги: один стабільний публічний кінцевий пункт (хаб). Ніяких вхідних правил на майданчиках. Центральні логи й політики.
Недоліки: хаб стає критичною точкою. Треба планувати пропускну здатність. Потрібно забезпечити найменші привілеї, щоб один користувач не отримав ключі від усіх майданчиків.
Дизайн B: Сайт-то-сайт VPN між офісом і майданчиками камер
Класичний IPsec або WireGuard сайт-то-сайт. Користувачі знаходяться в офісній мережі; офіс маршрутує до підмереж камер через тунелі.
Переваги: чистіше, коли весь перегляд відбувається з корпоративних мереж (SOC, команда безпеки). Мінімум клієнтського програмного забезпечення.
Недоліки: не допомагає віддалим особам, якщо вони спочатку не підключаться до офісу. І так, це може бути прийнятно — просто визнайте, що це ваш план.
Дизайн C: Zero-trust стиль доступу (проксі з ідентичністю для UI NVR)
Ви експонуєте один внутрішній інтерфейс (звичайно веб-додаток NVR) через проксі, що перевіряє ідентичність. Камери залишаються приватними; проксі реалізує SSO/MFA і політику.
Переваги: сильні контролі ідентичності. Немає широкого мережевого доступу. Чудова історія аудитів.
Недоліки: складніше для сирого RTSP-перегляду, ONVIF-виявлення або інструментів, що очікують L2-подібну досяжність. Деякі NVR-додатки поводяться погано за проксі.
Для більшості середніх підприємств і мульти-майданчикових роздрібних/промислових налаштувань рекомендую Дизайн A (hub-and-spoke) з WireGuard і суворими правилами файрволу між VPN-клієнтами та VLAN камер. Це нудно — і це добре.
Модель безпеки: ставтеся до камер як до ворожого IoT
Припускайте, що кожна камера/NVR:
- запущена з застарілими пакетами,
- має занадто багато відкритих сервісів,
- погано веде логи,
- і іноді виконує «phone home» трафік, який ви не замовляли.
Отже ваша мета — не просто «зробити доступним». Це «зробити доступним тільки через контрольовані шляхи і тільки для затверджених користувачів».
Жорсткі правила, що вберігають від проблем
- Жодного прямого вхідного доступу з інтернету до підмереж CCTV. Якщо треба щось опублікувати, робіть це через автентифікований проксі, а не через порт камери.
- Відокремте CCTV від корпоративних кінцевих точок. VLAN/підмережеве розділення з правилами файрволу. Камерам не потрібно спілкуватися з відділом кадрів.
- Не робіть full-tunnel для відео, якщо ви цього не плануєте. Кілька потоків по 8 Mbps перетворять ваш VPN на буксуючу презентацію. Використовуйте split tunneling з явними маршрутами.
- Закрийте порти управління. Дозвольте RTSP лише для станцій перегляду, HTTPS лише для адміністраторів, блокувати SMB/Telnet/FTP (так, вони все ще з’являються).
- Зробіть ідентичність реальною. Ключі/сертифікати на користувача, MFA на VPN або на систему, що роздає конфіги, і швидке відкликання доступу.
- Логування на контрольній точці. Хаб має бути місцем, де ви можете відповісти: хто мав доступ до якого NVR, коли і звідки.
Цитата, яку використовуємо економно, бо цитати часто заміна для мислення: Надія — не план.
— James Cameron
Огляд WireGuard: hub-and-spoke зроблено правильно
WireGuard добре підходить для доступу до CCTV, бо стабільний під NAT, швидкий і має малу площу конфігурації. Він не забезпечує управління користувачами; вам потрібен план життєвого циклу ключів, контролю доступу і аудиту.
Приклад мережевого розташування
- Хаб (публічна IP):
203.0.113.10, інтерфейс WireGuardwg0з VPN-підмережею10.44.0.0/24 - Майданчик A (без публічної IP): VLAN камер
10.10.50.0/24, маршрутизатор майданчика запускає WireGuard-клієнт з VPN-IP10.44.0.10 - Віддалий користувач: ноутбук з клієнтом WireGuard та VPN-IP
10.44.0.101
Ключова ідея: маршрутизатор майданчика встановлює вихідний тунель до хабу. Віддалий користувач також підключається до хабу. Хаб маршрутує між ними, але лише згідно правил файрволу.
Маршрутизація: зробіть шляхи явними
Не покладайтеся на «якось працює». Змушуйте хаб знати, яка майданчикова підмережа кому належить.
- Хаб має маршрут до
10.10.50.0/24через peer10.44.0.10 - Віддалий користувач отримує (або локально налаштовує) маршрут до
10.10.50.0/24черезwg0 - Маршрутизатор майданчика має маршрут назад до VPN-підмережі
10.44.0.0/24через WireGuard
Політика файрволу: обмежуйте по призначенню й порту
На хабі ставте інтерфейс VPN як ненадійну мережу. Тому що так воно і є. Дозвольте лише необхідне:
- HTTPS до веб-інтерфейсу NVR (зазвичай 443 або порт вендора)
- RTSP до NVR/камер (554 або порт вендора)
- ONVIF (зазвичай 80/8899/3702 UDP, дуже різниться)
Блокуйте все інше, особливо латеральний рух між майданчиками.
DNS: користувачі вводитимуть імена, а не підмережі
Якщо ви хочете, щоб «nvr-site-a.corp» резолювався через VPN, потрібен split DNS або DNS-сервер, доступний у VPN. Не обходьте це публічними DNS-записами, що вказують на приватні IP, якщо вам не подобається плутанина на ноутбуках у готелях.
Ідентичність і доступ
WireGuard — на основі ключів. Це добре. Але вам все одно потрібно:
- ключі на користувача (не спільний «security-team.conf»)
- процес ротації та відкликання ключів
- MFA десь: або на вищому шлюзі VPN (якщо WireGuard за порталом), або через короткоживучий доступ через ідентифікаційний брокер/SSO. Якщо ви не можете зробити MFA прямо на WireGuard, робіть MFA на системі, яка розповсюджує конфіги і контролює, кому їх видають.
Другий короткий жарт, останній: спільний VPN-ключ — як спільна зубна щітка: технічно працює, але ви пошкодуєте.
Практичні завдання з командами: перевірити, вирішити, виправити
Цей розділ навмисно практичний. Кожне завдання включає: команду, приклад виводу, що це означає, і рішення. Усі приклади передбачають Linux на хабі; адаптуйте за потреби.
Завдання 1: Підтвердіть, що інтерфейс WireGuard піднятий і пірі обмінюються handshakes
cr0x@server:~$ sudo wg show
interface: wg0
public key: 2qv...Zk=
listening port: 51820
peer: 9mR...aQ=
endpoint: 198.51.100.23:54321
allowed ips: 10.44.0.10/32, 10.10.50.0/24
latest handshake: 31 seconds ago
transfer: 1.23 MiB received, 4.80 MiB sent
peer: Q1s...p8=
endpoint: 203.0.113.77:61112
allowed ips: 10.44.0.101/32
latest handshake: 12 seconds ago
transfer: 62.1 MiB received, 140.2 MiB sent
Значення: «latest handshake» показує живучість. Якщо це хвилини/години, тунель вимкнений або неактивний без keepalive.
Рішення: Якщо майданчик за NAT стає старим, налаштуйте PersistentKeepalive=25 на стороні пірa (на майданчику). Якщо endpoint IP постійно змінюється — перевірте поведінку NAT-пристрою.
Завдання 2: Перевірте пересилання IP у kernel на хабі
cr0x@server:~$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
Значення: Якщо це 0, хаб не буде маршрутизувати трафік між VPN-пірі та підмережами майданчика.
Рішення: Встановіть у 1 і зафіксуйте в /etc/sysctl.conf або drop-in файлі.
Завдання 3: Перевірте, що на хабі є маршрут до підмережі камер
cr0x@server:~$ ip route show | grep 10.10.50.0
10.10.50.0/24 dev wg0 proto static scope link
Значення: Хаб вірить, що 10.10.50.0/24 досяжна через wg0. Якщо ви цього не бачите, ймовірно, ви не включили цю підмережу в AllowedIPs пірa майданчика на хабі.
Рішення: Додайте підмережу до AllowedIPs пірa (в конфігу хабу), щоб хаб знав, куди направляти трафік.
Завдання 4: Підтвердіть, що файрвол хабу дозволяє форвардинг від VPN-клієнтів до підмережі майданчика
cr0x@server:~$ sudo nft list ruleset | sed -n '1,140p'
table inet filter {
chain forward {
type filter hook forward priority filter; policy drop;
iifname "wg0" oifname "wg0" ip saddr 10.44.0.0/24 ip daddr 10.10.50.0/24 tcp dport { 443, 554 } accept
iifname "wg0" oifname "wg0" ct state established,related accept
counter packets 12034 bytes 9440221 drop
}
}
Значення: Політика за замовчуванням — drop. Від VPN-клієнтів дозволені лише TCP 443 і 554 до підмережі камер.
Рішення: Якщо користувачам потрібне ONVIF-виявлення, можливо, знадобляться конкретні UDP-дозволи, але додавайте їх навмисно і перевіряйте вплив.
Завдання 5: Перевірте досяжність NVR з хабу (ICMP)
cr0x@server:~$ ping -c 3 10.10.50.20
PING 10.10.50.20 (10.10.50.20) 56(84) bytes of data.
64 bytes from 10.10.50.20: icmp_seq=1 ttl=63 time=32.1 ms
64 bytes from 10.10.50.20: icmp_seq=2 ttl=63 time=31.4 ms
64 bytes from 10.10.50.20: icmp_seq=3 ttl=63 time=31.8 ms
--- 10.10.50.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 31.4/31.8/32.1/0.3 ms
Значення: Базова маршрутизація працює hub → майданчик. Якщо ping не проходить, але TCP працює, ICMP може бути заблокований на файрволі майданчика. Це не обов’язково помилка.
Рішення: Не вимагайте ping як «must». Краще перевіряти сервіси (HTTPS/RTSP) як реальний доказ.
Завдання 6: Перевірте сервісні порти з хабу (HTTPS та RTSP)
cr0x@server:~$ nc -vz 10.10.50.20 443
Connection to 10.10.50.20 443 port [tcp/https] succeeded!
cr0x@server:~$ nc -vz 10.10.50.20 554
Connection to 10.10.50.20 554 port [tcp/rtsp] succeeded!
Значення: Порти досяжні. Якщо HTTPS працює, а RTSP — ні, ймовірно, ви забули дозволити 554 або NVR стрімить на іншому порту.
Рішення: Налаштуйте файрвол згідно фактичних портів вендора і документуйте їх. «Відкрити всі порти» — це не документація.
Завдання 7: Переконайтеся, що маршрутизатор майданчика дійсно маршрутизує трафік від VPN до VLAN камер (з хабу)
cr0x@server:~$ traceroute -n 10.10.50.20
traceroute to 10.10.50.20 (10.10.50.20), 30 hops max, 60 byte packets
1 10.44.0.10 29.817 ms 30.101 ms 30.229 ms
2 10.10.50.20 31.212 ms 31.444 ms 31.389 ms
Значення: Хоп 1 — це WireGuard endpoint майданчика (маршрутизатор), хоп 2 — NVR. Очікуваний шлях.
Рішення: Якщо трасування зупиняється на хопі 1, маршрутизатор майданчика не форвардить до VLAN або має файрвол, що це відкидає. Виправляйте на краю майданчика, а не на хабі.
Завдання 8: Підтвердіть зворотний шлях (підмережа майданчика може повертатися до VPN-клієнтів)
cr0x@server:~$ sudo tcpdump -ni wg0 host 10.10.50.20 and tcp port 443 -c 6
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on wg0, link-type RAW (Raw IP), snapshot length 262144 bytes
12:11:01.102345 IP 10.44.0.101.51722 > 10.10.50.20.443: Flags [S], seq 3011221, win 64240, options [mss 1360,sackOK,TS val 101 ecr 0], length 0
12:11:01.135902 IP 10.10.50.20.443 > 10.44.0.101.51722: Flags [S.], seq 8899102, ack 3011222, win 65160, options [mss 1360,sackOK,TS val 200 ecr 101], length 0
12:11:01.136120 IP 10.44.0.101.51722 > 10.10.50.20.443: Flags [.], ack 1, win 502, options [TS val 102 ecr 200], length 0
Значення: Ви бачите SYN, SYN-ACK, ACK. Це доводить, що зворотний трафік повертається тунелем. Якщо ви бачите лише SYN без SYN-ACK, сторона майданчика не має маршруту назад або блокує його.
Рішення: Додайте/виправте маршрут на маршрутизаторі майданчика для 10.44.0.0/24 через wg0 або виправте файрвол/NAT на майданчику.
Завдання 9: Перевірте проблеми MTU («усе підключається, але відео лагає»)
cr0x@server:~$ ping -c 3 -M do -s 1372 10.10.50.20
PING 10.10.50.20 (10.10.50.20) 1372(1400) bytes of data.
1372 bytes from 10.10.50.20: icmp_seq=1 ttl=63 time=32.4 ms
1372 bytes from 10.10.50.20: icmp_seq=2 ttl=63 time=32.0 ms
1372 bytes from 10.10.50.20: icmp_seq=3 ttl=63 time=32.3 ms
--- 10.10.50.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
Значення: З DF встановленим (-M do) пакети розміром 1400 проходять наскрізь. Якщо це падає на певному розмірі — у вас обмеження Path MTU (звично з PPPoE, LTE або вкладенням інкапсуляції).
Рішення: Зменшіть MTU WireGuard (наприклад до 1360 або 1280) на клієнтах/маршрутизаторах майданчика, потім повторно протестуйте стабільність.
Завдання 10: Моніторте пропускну здатність і знайдіть реального «тигеля»
cr0x@server:~$ ip -s link show dev wg0
6: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/none
RX: bytes packets errors dropped missed mcast
987654321 902341 0 12 0 0
TX: bytes packets errors dropped carrier collsns
1928374650 1102341 0 18 0 0
Значення: Зростання dropped під навантаженням корелює з проблемами буферизації або насиченням CPU. Поєднуйте з статистикою CPU та лічильниками інтерфейсів.
Рішення: Якщо падіння росте під час перегляду, обмежуйте швидкість потоків, зменшуйте кількість одночасних потоків або масштабируйте CPU/розмір інстансу хабу. VPN не створюють пропускну здатність з повітря.
Завдання 11: Перевірте поведінку DNS для імен NVR
cr0x@server:~$ resolvectl status | sed -n '1,80p'
Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Current DNS Server: 10.44.0.1
DNS Servers: 10.44.0.1
Link 3 (wg0)
Current Scopes: DNS
Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
DNS Servers: 10.44.0.1
DNS Domain: corp.internal
Значення: DNS налаштований на резолвер, що знаходиться в VPN (10.44.0.1), і сфокусований на інтерфейсі VPN. Це запобігає «публічні Wi‑Fi DNS» від неправильної інтерпретації ваших приватних імен.
Рішення: Якщо імена не резолюються, виправте split DNS: або штовхайте DNS через конфіг клієнта VPN, або запустіть резолвер, доступний у VPN.
Завдання 12: Переконайтеся, що відео не проходить помилково через офісний WAN (hairpinning)
cr0x@server:~$ sudo conntrack -L | grep 10.10.50.20 | head
tcp 6 431999 ESTABLISHED src=10.44.0.101 dst=10.10.50.20 sport=51722 dport=443 src=10.10.50.20 dst=10.44.0.101 sport=443 dport=51722 [ASSURED] mark=0 use=1
tcp 6 431999 ESTABLISHED src=10.44.0.101 dst=10.10.50.20 sport=54012 dport=554 src=10.10.50.20 dst=10.44.0.101 sport=554 dport=54012 [ASSURED] mark=0 use=1
Значення: Ви бачите VPN-клієнт IP до NVR IP без NAT. Це добре; політика і логи залишаються інтерпретованими.
Рішення: Якщо ви бачите NAT, який ви не планували, аудитуйте правила iptables/nft NAT і видаліть «тимчасові» masquerade-правила, які стали постійними.
Завдання 13: Доведіть, що VLAN камер майданчика не маршрутується в інтернет через VPN (таке трапляється)
cr0x@server:~$ sudo wg show wg0 allowed-ips
peer: 9mR...aQ=
allowed ips: 10.44.0.10/32, 10.10.50.0/24
peer: Q1s...p8=
allowed ips: 10.44.0.101/32
Значення: Пір майданчика анонсує лише свою VPN-IP і підмережу камер. Якщо ви коли-небудь побачите 0.0.0.0/0 або великі корпоративні діапазони тут без причини, хтось робить ваш VPN дефолтним маршрутом.
Рішення: Тримайте AllowedIPs вузькими. Якщо потрібно більше підмереж — перераховуйте їх явно і переглядайте потенційну зону ураження.
Завдання 14: Перевірте синхронізацію часу (TLS і логи марні, коли час неправильний)
cr0x@server:~$ timedatectl
Local time: Sun 2025-12-28 11:52:18 UTC
Universal time: Sun 2025-12-28 11:52:18 UTC
RTC time: Sun 2025-12-28 11:52:18
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Значення: Синхронізований час робить ваш аудит придатним і запобігає сюрпризам «TLS сертифікат ще не дійсний/закінчився» при проксуванні UI NVR.
Рішення: Виправте NTP скрізь, де можете (хаб, маршрутизатори майданчиків, NVR якщо підтримує). Якщо пристрої не можуть надійно робити NTP — врахуйте це в інцидент-реакції.
Швидкий план діагностики
Коли «доступ до камер зламався», ви можете втратити години, переповзаючи між командами. Не робіть цього. Використовуйте стиснену послідовність, що швидко звузить вузьке місце.
Перший крок: чи тунель живий?
- Перевірте
wg showна хабі: чи є свіжий handshake для пірa майданчика і користувача? - Якщо немає handshake: це NAT/файрвол/досяжність endpoint або невідповідність ключів. Не «NVR впав».
Другий крок: чи правильна маршрутизація в обох напрямках?
- З хабу
ip route get 10.10.50.20має вибиратиwg0. - Запустіть
tcpdumpнаwg0, поки користувач намагається підключитися. Якщо SYN йде, але SYN-ACK не повертається: шлях повернення по стороні майданчика зламаний. - Запустіть
traceroute -nз хабу до NVR і дивіться, де зупиняється.
Третій крок: чи файрвол/політика блокує потрібне?
- На хабі: перевірте chain forward, що дозволяє потрібні порти до підмережі майданчика.
- На майданчику: перевірте, що VLAN камер дозволяє inbound з підмережі VPN і дозволяє повернення трафіку.
- Пам’ятаєте: правила «established,related» не допоможуть, якщо початковий SYN ніколи не досягнув цілі.
Четвертий крок: чи це продуктивність (MTU, втрата пакетів, насичення), а не досяжність?
- Тестуйте MTU через DF-ping розміри.
- Перевіряйте drops на
wg0та WAN-інтерфейсах. - Підтвердіть кількість одночасних потоків і бітрейти.
П’ятий крок: особливості застосунків (UI NVR, автентифікація RTSP, ONVIF)
- Доступ до HTTPS не означає, що «вхід працює». Зсув часу і налаштування TLS можуть ламати UI.
- RTSP може вимагати TCP/UDP обробку — деякі клієнти за умовчанням використовують UDP і блокуються.
- ONVIF-виявлення використовує multicast/broadcast, що не проходить через маршрутизований VPN без додаткових механізмів. Для віддалого використання краще пряме IP-підключення.
Типові помилки: симптом → причина → виправлення
Це ті, що регулярно з’являються у реальних парках, а не на маркетингових діаграмах.
1) «VPN підключається, але камери не завантажуються»
Симптом: користувач показує «підключено» в клієнті VPN; веб-інтерфейс NVR таймаутить; ping може працювати.
Причина: маршрути на хабі є, але форвардинг файрволом блокує TCP 443/554; або маршрутизатор майданчика блокує підмережу VPN до VLAN камер.
Виправлення: Додайте явні allow-правила форвардингу на хабі і на краю майданчика для потрібної підмережі й портів. Перевірте за допомогою nc -vz і tcpdump.
2) «Працює з хаба, але не з ноутбуків»
Симптом: хаб може дістатися до NVR; віддалий клієнт — ні.
Причина: конфіг клієнта не має маршруту до підмережі камер (split tunnel не налаштований); AllowedIPs занадто вузькі на клієнті; або DNS вказує на публічний резолвер.
Виправлення: Налаштуйте AllowedIPs на клієнті, щоб включити підмережі камер. Забезпечте VPN-специфічний DNS і розв’язування приватних імен.
3) «Відео лагає, UI повільний, але ping хороші»
Симптом: вхід працює; один потік працює; кілька потоків лагають або зависають.
Причина: обмеження CPU хаба, насичення uplink на майданчику або MTU-фрагментація/чорна діра під навантаженням.
Виправлення: Зменшіть бітрейт/роздільну здатність для віддалених профілів; увімкніть субпотоки; підкоригуйте MTU; збільшіть інстанс хабу; уникайте повного тунелювання всього трафіку.
4) «Усе ламається, коли змінюється ISP на майданчику»
Симптом: майданчик зникає після заміни провайдера; немає handshake.
Причина: пір майданчика не може дістатися хаба через політику upstream файрвола/NAT; старі правила білого списку порту хаба; або майданчик опирався на «відкритий порт».
Виправлення: Переконайтеся, що вихідний UDP до порту хаба (наприклад 51820) дозволений. Використовуйте PersistentKeepalive для NAT. Документуйте вимоги провайдера.
5) «Два майданчики не можуть бути онлайн одночасно»
Симптом: підняття Site B викликає зникнення маршрутів Site A або трафік фліп-флопить.
Причина: перекриваються підмережі (обидва майданчики використовують 192.168.1.0/24 тощо) або перекриття AllowedIPs на хабі.
Виправлення: Перестаньте використовувати перекриваючі адреси для маршрутизованого доступу. Якщо перенумерація неможлива — використайте NAT на краю майданчика (обережно) або розгорніть VRF на сайтах — обидва варіанти складні, оберіть більший біль свідомо.
6) «ONVIF-виявлення працює в офісі, але не через VPN»
Симптом: інструмент виявлення камер нічого не знаходить віддалено; по прямій IP працює.
Причина: ONVIF використовує multicast/broadcast, що за замовчуванням не проходить через маршрутизований VPN.
Виправлення: Використовуйте прямі IP/списки хостів для віддалого доступу. Якщо виявлення обов’язкове, розгорніть проксі виявлення на майданчику або використовуйте централізоване управління NVR.
7) «Випадкові користувачі дістаються до камер, до яких не повинні»
Симптом: користувач з VPN-доступом сканує VLAN камер по кількох майданчиках.
Причина: плоска політика VPN; forward chain хаба дозволяє широкі діапазони; немає правил по групах.
Виправлення: Сегментуйте пул адрес VPN по ролям; примусово обмежуйте призначення на хабі; розгляньте per-site jump hosts або identity proxy для UI.
Три корпоративні міні-історії з поля
Міні-історія 1: Інцидент через хибне припущення
Компанія з кількома складами розгорнула «просте» рішення: кожен маршрутизатор майданчика встановлював тунель до головного офісу, і SOC міг дивитися камери. Працювало. Місяцями. Люди розслабилися — а так і виникає несподівана відмова.
Потім одному складу поміняли провайдера. Місцевий запис камер працював, але віддалений доступ упав. Експлуатація доповіла «VPN впав», ІТ відповіло «проблема провайдера», а безпека ескалувала, бо потрібен був запис для розслідування.
Хибне припущення: «вихід в інтернет означає вихідний UDP на нашому порту». Новий модем від провайдера зробив «корисну безпеку», блокуючи вихідний UDP крім поширених портів, і ніхто не помітив під час інсталяції. Тунель більше не handshak-тав.
Вони втратили півдня на суперечки про власність. Виправлення зайняло десять хвилин: перенести WireGuard на дозволений порт і явно дозволити вихідний UDP з маршрутизатора майданчика. Реальне виправлення зайняло більше часу: оновити чекліст розгортання з пунктом «перевірити egress UDP до хабу» і вимагати перевірки handshake як етап підпису після cutover.
Міні-історія 2: Оптимізація, що зіграла злий жарт
Інша організація вирішила, що їхня VM-хаб «надмірно потужна». Її зменшили, щоб заощадити, бо VPN «лише маршрутизує». Хтось подивився середні графіки пропускної спроможності і оголосив перемогу.
Через два тижні, під час регіонального інциденту, кілька менеджерів одночасно відкрили живі трансляції. CPU хаба завалився, пакети падали, і користувачі бачили «камери деренчали». Здавалося, то проблема камер, потім uplink майданчика, потім NVR — бо людям подобається звинувачувати край.
Насправді: накладні витрати шифрування + conntrack + логування + сплеск одночасних потоків перевантажили менший інстанс. Середнє використання не має значення; навантаження має різкі піки. CCTV від природи спайковий — люди не дивляться 24/7, вони рвуться при інцидентах.
Провал не в зменьшенні розміру сам по собі; провал — у відсутності тестування навантаження і відсутності SLO («X одночасних потоків при Y bitrate з Z затримкою»). Вони повернули розмір інстансу, обмежили неважливі потоки і ввели «профіль низької пропускної здатності» для віддалених користувачів. Потім залишили так — бо трохи грошей на запас дешевше, ніж нічний інцидент.»
Міні-історія 3: Нудна, але правильна практика, що врятувала день
Одне підприємство мало нудну практику: кожен CCTV-майданчик мав стандартну схему адресації (без перекриттів), кожен тунель мав документовану підмережу камер, і на кожну зміну треба було прогнати простий скрипт валідації з хабу.
Під час шторму кілька майданчиків втратили електрику і повернулися. Частина маршрутизаторів перезавантажилися у деградованому стані: WAN був up, але інтерфейс VLAN камер не піднявся через негаразди в перемовинах комутаторів. Локально персонал бачив деякі потоки через кеш і часткову зв’язність. Віддалено виглядало як «VPN, але без камер».
Он-калл не гадали. Вони пройшли ті самі перевірки: handshake OK, маршрут OK, TCP SYN виходить, немає SYN-ACK. Це відразу показало проблему на стороні майданчика, а не на хабі. Вони подзвонили польовому техніку з точною інструкцією: перезавантажити порт комутатора і перевірити, що інтерфейс VLAN піднятий. Жодних домислів.
Оскільки середовище було стандартизоване, вони швидко відновили кілька майданчиків. «Нудна» частина — послідовні підмережі, маршрути та перевірки — означала, що відмова не перетворилася на інтерпретативний танець племінних знань.
Контрольні списки / покроковий план
Якщо робити це як «IT-проект», воно розростеться. Робіть це як операційне розгортання з чіткими воротами.
Крок 1: Інвентар та очікування трафіку
- Перелічіть підмережі/ VLAN камер і IP-адреси NVR для кожного майданчика.
- Документуйте потрібні порти: HTTPS, RTSP, порти SDK вендора, синхронізація часу.
- Оцініть одночасних віддалених глядачів і очікуваний бітрейт (основний потік vs субпотік).
- Вирішіть, чи потрібен доступ до камер безпосередньо, чи лише до UI NVR. Віддавайте перевагу UI NVR для віддалених користувачів; воно централізує автентифікацію і обмежує латеральний рух.
Крок 2: Оберіть розташування хаба та модель відмовостійкості
- Хаб в офісі підходить, якщо офісний інтернет надійний і моніториться.
- Хаб у хмарі підходить, якщо ви можете експлуатувати його як продакшн (патчі, бекапи, IaC, моніторинг).
- Розгляньте, чи потрібен один хаб або два для резерву. Якщо доступ до камер критичний, один хаб — це одна причина для відмови.
Крок 3: План адресації, що не підведе пізніше
- Виділіть окреме VPN-підмережу (наприклад, 10.44.0.0/24).
- Переконайтеся, що підмережа камер кожного майданчика унікальна по всьому парку. Якщо є перекриття, пріоритетно перенумеруйте або ізолюйте через NAT/VRF з чіткою документацією.
- Зарезервуйте IP-блоки для ролей користувачів, якщо політика базується на джерелі (наприклад, 10.44.0.100/26 для операторів, 10.44.0.200/27 для адміністраторів).
Крок 4: Збудуйте хаб зі строгими дефолтами
- Увімкніть WireGuard, IP forwarding і сувору політику файрволу (default drop forward).
- Логуйте відмови (з rate limiting), щоб дебагувати, не потонувши у логах.
- Налаштуйте DNS для VPN-клієнтів (split DNS), якщо потрібні дружні імена.
- Визначте процес розповсюдження конфігів і ротації ключів. Ручні конфіги не масштабуються далі «кількох людей і одного on-call».
Крок 5: Пілатний сайт від початку до кінця
- Підніміть тунель майданчика і підтвердьте стабільність handshake (додавайте PersistentKeepalive при NAT).
- Перевірте досяжність хаб→NVR і порти.
- Перевірте досяжність клієнт→NVR і порти.
- Виміряйте реальний потік і зафіксуйте вплив на CPU хаба і WAN майданчика.
Крок 6: Впроваджуйте політики, а не лише з’єднання
- Реалізуйте правила дозволу за призначенням по майданчиках: користувачі, яким не потрібен Site A, не повинні до нього потрапляти.
- Реалізуйте правила за ролями: глядачі vs адміністратори.
- Блокуйте латеральний рух: забороніть підмережам VPN спілкуватися між собою, якщо це не потрібно.
Крок 7: Оперціоналізуйте
- Моніторинг: вік handshake, CPU хаба, drops інтерфейсів, пропускна здатність, базові TCP-чекі до критичних NVR.
- Алертинг: «тунель майданчика впав», «хаб перевантажений», «зростання числа падінь пакетів».
- Runbooks: включіть швидкий план діагностики і точні команди, які запускає on-call о 3 ранку.
- Контроль змін: невелика помилка в конфігах може направити половину мережі в чорну діру.
Питання та відповіді
1) Чи справді мені потрібен VPN? Хіба не можна використовувати P2P-хмару вендора?
Можна, але ви передаєте периметр і аудиторський слід третій стороні. Якщо у вас є вимоги відповідності або ви хочете контролювати, хто має доступ до чого — VPN (або identity proxy) безпечніший операційний дефолт.
2) Що робити, якщо на майданчику немає публічної IP і він за CGNAT?
Це підходить для hub-and-spoke, якщо майданчик може робити вихідні з’єднання до хабу. WireGuard добре працює тут; використовуйте PersistentKeepalive, щоб NAT-мапи не спливали.
3) Чи варто використовувати IPsec замість WireGuard?
Використовуйте те, що ваша команда може надійно експлуатувати. IPsec повсюдний і часто вбудований у файрволи; його також легше невірно налаштувати і важче відлагодити. WireGuard простіший і, як правило, передбачуваніший. Якщо ваше краєве обладнання добре підтримує IPsec і у вас є люди, що ним володіють — IPsec цілком валідний варіант.
4) Чи можу я доступатися до камер напряму через VPN, чи лише до NVR?
Переважайте NVR для віддаленого перегляду: менше відкритих кінцевих точок, централізована автентифікація і менший шанс, що хтось почне тикати в веб-інтерфейси камер. Прямий доступ до камер іноді потрібен для комісії або діагностики; обмежуйте це політикою для адміністраторів.
5) Чому ONVIF-виявлення не працює через VPN?
Виявлення зазвичай базується на multicast/broadcast, що за замовчуванням не переходить через маршрутизований VPN. VPN-и, як правило, маршрутизовані. Рішення: підключайтеся по IP/списку хостів або розгортайте локальний інструмент для виявлення на майданчику.
6) Чи потрібен нам split tunneling?
Зазвичай так. Пропускайте через VPN лише підмережі камер/NVR. Повне тунелювання всього трафіку робить ваш хаб точкою задушення для випадкового веб-браузингу і може зруйнувати продуктивність під час відео-подій.
7) Як запобігти доступу одного майданчика до камер іншого?
На хабі запровадьте правила форвардингу, які дозволяють VPN-клієнтам доступ лише до конкретних призначень. Також тримайте AllowedIPs вузькими для кожного пірa. Припускайте: «якщо це маршрутується, хтось рано чи пізно просканує».
8) Яке мінімальне логування мені потрібне?
Принаймні: події з’єднання (handshakes або встановлення сесій), логи allow/deny файрволу (з rate limiting) і відповідність VPN-ідентичності (ключ/користувач) політиці доступу. Без цього ваша інцидент-реакція перетворюється на інтерпретативне мистецтво.
9) Чи можна розмістити хаб у хмарі, якщо камери в приватних LAN?
Так. Майданчики ініціюють вихідні тунелі до хмари-хабу; користувачі підключаються до хабу; маршрути міняються на хабі. Хмарний хаб стає точкою зустрічі. Тримайте його як продакшн: патчі, моніторинг і бекапи.
10) Як розв’язувати перекриття підмереж камер між майданчиками?
Переадресуйте, якщо можете. Якщо ні — використовуйте NAT на краю майданчика (прив’язуйте кожен майданчик до унікальної «віртуальної» підмережі) або ізолюйте через VRF. NAT додає складності і може ламати деякі протоколи виявлення, але іноді це найменш погане рішення при ретрофіті.
Висновок: наступні кроки, які ви можете зробити цього тижня
Якщо ви хочете безпечний доступ до CCTV без публічних IP — припиніть сперечатися з фізикою і почніть контролювати топологію.
- Оберіть референсний дизайн: hub-and-spoke — практичний дефолт для мульти-майданчикового CCTV.
- Стандартизуйте адресацію: унікальні підмережі камер на кожному майданчику, виділена VPN-підмережа, задокументовані порти.
- Впровадьте WireGuard (або IPsec) зі строгими політиками: default drop, дозволяти лише потрібні порти, блокувати латеральний рух.
- Оперціоналізуйте з першого дня: моніторинг handshake, перевірки маршрутів, перевірки портів і короткий runbook для on-call о 3 ранку.
- Пілатуйте один майданчик, виміряйте пропускну здатність і CPU хаба, потім розгортайте з чеклістом і підписом.
Робіть нудно. Майбутній ви буде вдячний — це рідкість в інфраструктурі.