CIDR (Classless Inter-Domain Routing) — спосіб запису IP-адреси разом з маскою підмережі: 192.168.1.0/24. Число після похилої риски — кількість бітів, відведених під мережу.
Як працює CIDR
При /24: 24 біти — мережа, 8 бітів — хости. 2^8 = 256 адрес, з яких 254 доступні для хостів (перша — адреса мережі, остання — широкомовна).
192.168.1.0 /24
|------------|------|
Мережа(24) Хост(8)
Таблиця популярних CIDR
| CIDR | Маска | Хостів | Приклад застосування |
|---|---|---|---|
| /8 | 255.0.0.0 | 16 777 214 | Велика корпоративна мережа |
| /16 | 255.255.0.0 | 65 534 | Дата-центр, великий офіс |
| /24 | 255.255.255.0 | 254 | Офісна підмережа, VLAN |
| /25 | 255.255.255.128 | 126 | Половина /24 |
| /26 | 255.255.255.192 | 62 | Чверть /24 |
| /27 | 255.255.255.224 | 30 | Невеликий сегмент |
| /28 | 255.255.255.240 | 14 | Малий блок |
| /29 | 255.255.255.248 | 6 | Мінімальний блок |
| /30 | 255.255.255.252 | 2 | Point-to-point лінк |
| /32 | 255.255.255.255 | 1 | Один хост, loopback |
Формула розрахунку
# Кількість хостів: 2^(32-prefix) - 2
# Для /24: 2^(32-24) - 2 = 2^8 - 2 = 254
# Для /20: 2^(32-20) - 2 = 2^12 - 2 = 4094
Практичні приклади
# UFW — дозволити всю підмережу
sudo ufw allow from 10.0.0.0/8
# iptables — блокувати діапазон
iptables -A INPUT -s 192.168.100.0/24 -j DROP
# Nginx — обмежити доступ за IP
location /admin {
allow 10.0.0.0/8;
allow 192.168.0.0/16;
deny all;
}
CIDR у WireGuard та OpenVPN
# WireGuard — AllowedIPs = маршрутизовані діапазони
[Peer]
AllowedIPs = 10.0.0.0/8, 172.16.0.0/12
# Весь трафік через VPN
AllowedIPs = 0.0.0.0/0, ::/0
Типові помилки під час розрахунку CIDR
Помилка "network address not aligned" під час налаштування маршруту або VLAN — означає, що вказана адреса мережі не кратна розміру блоку. Для /26 (блок 64 адреси) мережа має починатися на 0, 64, 128 або 192 в останньому октеті, а не на довільному числі.
# Неправильно: 192.168.1.100/26 — не початок блоку
# Правильно: 192.168.1.128/26 — початок блоку (128, 128+64=192)
ip addr add 192.168.1.100/26 dev eth0
RTNETLINK answers: File exists
Помилка RTNETLINK answers: File exists у цьому контексті зазвичай означає конфлікт з уже наявним маршрутом мережі, а не проблему самого CIDR — але першопричина часто саме в неправильно порахованій межі підмережі.
UFW відхиляє правило з повідомленням "ERROR: Bad source address" — типова причина: вказана маска CIDR без адреси мережі (наприклад, /24 без IP) або використано десятковий формат маски замість префікса.
sudo ufw allow from 10.0.0.0/255.0.0.0 to any port 22
ERROR: Bad source address
UFW приймає лише префіксну нотацію: правильний запис — 10.0.0.0/8, а не десяткова маска через слеш.
CIDR і класова адресація: у чому різниця
| Параметр | Класова адресація (застаріла) | CIDR (поточний стандарт) |
|---|---|---|
| Розмір мережі | Фіксований (A: /8, B: /16, C: /24) | Будь-який префікс від /1 до /32 |
| Гнучкість виділення | Низька, багато невикористаних адрес | Висока, точний розмір під задачу |
| Таблиці маршрутизації | Зростають лінійно з кількістю мереж | Зменшуються завдяки агрегації маршрутів |
| Використання сьогодні | Не застосовується | Стандарт де-факто всюди |
Коли ручний розрахунок CIDR не потрібен
- Разове налаштування одного сервера — простіше ввести IP в онлайн-калькулятор, ніж тримати в голові степені двійки.
- Автоматизація через Terraform, Ansible або хмарну панель — ці інструменти самі перевіряють перетини підмереж і валідність масок.
- Мережа вже спроєктована провайдером (наприклад, VPC у хмарного хостингу) — змінювати її вручну зазвичай не можна і не потрібно.
- Потрібно швидко перевірити, чи перетинаються дві підмережі — калькулятор покаже діапазони наочно, тоді як ручне порівняння бітових масок легко призводить до помилки в умі.
- Планується VLSM (маски змінної довжини) для кількох відділів одразу — ручний підбір меж без інструмента майже гарантовано залишить перетини між блоками.
Перевірка результату
- Порахуйте діапазон для своєї підмережі і звірте з калькулятором (cidr.xyz або ipcalc): адреса мережі, широкомовна адреса і кількість хостів мають збігтися.
- Застосуйте маску на інтерфейсі:
ip addr add 192.168.1.128/26 dev eth0— команда не повинна повернути помилку. - Перевірте фактичну маску:
ip addr show eth0— у виводі має бути вказаний той самий префікс. - Для правил firewall перевірте, що потрібний хост потрапляє в діапазон:
ipcalc 192.168.1.130/26покаже межі мережі і підтвердить, що адреса всередині блоку.
Розрахунок CIDR напряму пов'язаний з адресацією IPv4 — детальніше в статті про структуру IPv4-адрес, а для налаштування самих маршрутів — стаття про ip route і Netplan.
Часті питання
Чим менше число після слеша у записі CIDR, тим мережа більша чи менша?
Чим менше число після слеша, тим більша мережа і тим більше адрес вона містить, бо це число означає кількість бітів, відведених саме під адресу мережі, а не під хости. Решта бітів дістається хостам, і чим їх більше, тим просторіший діапазон доступних адрес усередині підмережі — залежність тут обернена, а не пряма.
Що станеться, коли дві підмережі з діапазонами, що перетинаються, опиняться в одній таблиці маршрутизації?
Діапазони двох підмереж, що перетинаються, у таблиці маршрутизації одного пристрою створюють неоднозначність — система або відмовиться додати конфліктний маршрут з явною помилкою, або застосує конкретніший із двох за довжиною префікса, проігнорувавши широкий діапазон для частини, що перетинається. Результат залежить від конкретної реалізації стека і порядку додавання маршрутів, тож перетини варто виключати заздалегідь розрахунком, а не з'ясовувати постфактум.
Чи працює нотація CIDR лише для IPv4, чи для IPv6 теж?
Сама концепція запису адреси разом із довжиною префікса через слеш спільна для обох протоколів, а ось IPv6 використовує власну, значно довшу адресацію і свої типові розміри блоків, не придатні для прямого перенесення таблиць і прикладів зі світу IPv4. Формула підрахунку хостів для IPv4 для IPv6 напряму не підходить через іншу розрядність адреси.
Чи дозволено використовувати для приватної мережі будь-який CIDR-блок на вибір, чи частина діапазонів зарезервована?
Ні, частина діапазонів адрес зарезервована окремими стандартами під конкретні цілі на кшталт приватних мереж, loopback-інтерфейсу чи багатоадресної розсилки, і застосовувати їх для інших задач не варто, навіть коли формально ніщо не заважає прописати такий діапазон. Для приватної мережі краще обирати блок саме з діапазонів, виділених під внутрішнє використання, а не довільну публічну адресу.