Как перестать считать маски подсетей в уме и начать жить
В любой команде есть человек, который со скоростью калькулятора отвечает на вопрос «сколько адресов в /26?» и мгновенно говорит, входит ли 10.0.13.37 в диапазон 10.0.12.0/22. Я не такой человек. Каждый раз, когда нужно разобраться с сетью, я открываю Python и начинаю щёлкать битами. Пока не наткнулся на cidr.xyz.
Что это вообще такое
cidr.xyz — CIDR-калькулятор и визуализатор подсетей от разработчика под ником yuvadm. Проекту уже прилично сколько лет: репозиторий создан в декабре 2015-го, и с тех пор к нему прилипло около 850 звёзд и 238 форков. Сам сервис живёт на cidr.xyz и работает целиком в браузере.
Идея простая до безобразия: вы вводите IP-адрес и маску (хоть в CIDR-нотации, хоть в классическом виде 255.255.255.0), а страница мгновенно показывает всё, что можно вытащить из этой пары. Первая строчка после ввода — уже готовый CIDR-суффикс, который можно скопировать в конфиг.
Что показывает калькулятор
Разберу на примере. Вводим 10.0.13.37 с маской /22. На выходе получаем:
- Сетевой и широковещательный адрес
- Первый и последний используемый адрес хоста
- Количество хостов в подсети
- Адрес и маску в двоичном виде, побитно
- Wildcard-маску (ту самую
0.0.3.255, без которой не пишутся ACL) - Формат «диапазон всего» — привычная строка для pfSense или Cisco-конфигов
- Двоичную маску в десятичном виде
Звучит как описание любого ipcalc, но тут есть вещь, которая отличает cidr.xyz от сотни похожих тулов — визуализация. Под полями ввода рисуется разрядная сетка: 32 бита адреса и 32 бита маски, разбитые на октеги. Биты, отвечающие за сеть и за хост, подсвечиваются разными цветами.
И вот тут наступает момент озарения. Раньше я знал, что /22 означает 22 бита сети, но держал это в голове как абстрактное знание. На cidr.xyz видно, как прыгает граница между сетевой и хостовой частью, когда тянешь маску от /24 к /21. Сразу понимаешь, почему 10.0.13.37/22 означает сеть 10.0.12.0 — третий октет 13 в двоичном виде это 00001101, а при маске /22 первые шесть бит третьего октета замораживаются сетью, остальные шесть бит отданы хостам. Никакая таблица не даёт такого ощущения «а, вот оно что».
Кому это пригодится
В первую очередь тем, кто готовится к собеседованию или сертификации. Вопросы про VLSM и разбиение сетей есть в CCNA, и понимать битовую арифметику там действительно нужно.
Во-вторых, админам и SRE при работе с конфигами. Быстро проверить, что wildcard-маска для ACL вычислена верно, что диапазон 172.16.0.0/12 действительно заканчивается на 172.31.255.255 — задача на десять секунд.
В-третьих, всем остальным, кто раз в месяц сталкивается с сетью и раз в месяц забывает, как это делается. Я в этой категории.
Под капотом
Проект написан на TypeScript, используется React и Next.js. README лаконичен до предела — всего два раздела, но для запуска локальной копии этого достаточно:
npm install
npm run dev
После этого инструмент доступен на localhost:3000, и можно ковыряться в коде или дорабатывать под себя. Например, я всерьёз думал о том, чтобы добавить расчет числа подсетей при делении на заданное количество. Это тот редкий случай, когда кодовая база настолько компактна, что пул-реквест реально поднять за вечер.
Деплой автоматизирован: ветка master разлетается через Cloudflare Workers. Лицензия MIT, так что при желании можно и форкнуть, и встроить куда-то себе.
Немного критики
Без ложки дёгтя не обойтись. Функционал заточен под IPv4, IPv6-адреса калькулятор не принимает. Если вы живёте в мире fd00::/8, этот инструмент вам не помощник. Двоичная визуализация тоже иногда перегружает: при беглом взгляде на мигающую таблицу бит легко заскочить не туда. И да, 850 звёзд — это не миллион, проект известен в узких кругах, но и не забыт: последний коммит в ветке master был недавно, репозиторий живой.
Стоит ли пробовать
Однозначно да, если вы: готовитесь к сетевому собеседованию; делаете конфиги для сетевого оборудования; хотите наконец визуально понять, как маска подсети режет адресное пространство. Просто добавьте cidr.xyz в закладки рядом с переводчиком — пригодится.
А если хочется чего-то большего, форкните репозиторий и допилите IPv6. Судя по компактности кода, это вполне посильная задача для выходных.
