CGNAT для MikroTik RouterOS

CGNAT укладывает множество частных клиентов на несколько публичных адресов, деля между ними пространство исходных портов каждого адреса. Mikro Manager строит эту раскладку по тем параметрам, которые вам действительно важны, и показывает каждое правило, которое собирается записать.

Как устроена раскладка

Частное пространство разбивается на последовательные блоки размером с публичный префикс. Каждый блок netmap-ится 1:1 на весь префикс в своём диапазоне исходных портов, так что несколько блоков делят каждый публичный адрес, разделённые портами. Диспетчеризация — двухуровневый переход: из srcnat в цепочку на каждый /24, а оттуда в цепочку на блок, поэтому обработка правил остаётся быстрой при любом числе блоков.

Декларативно и идемпотентно

Каждое правило несёт структурированный комментарий, кодирующий весь пул. При подключении приложение читает живые правила, восстанавливает по этим комментариям пулы и сравнивает желаемое с имеющимся. Источник истины — маршрутизатор, а не файл на вашем Mac; правила без нашего корректного комментария не трогаются никогда.

Детерминированный поиск без логов потоков

Поскольку netmap — это арифметика, а не таблица аренд, публичный адрес и исходный порт разрешаются ровно в одного частного клиента — и обратно — без всякой предварительной записи. Именно этого ответа и требует жалоба на злоупотребление.

Генератор CGNAT для MikroTik RouterOS Пул рассчитывается в вашем браузере. Ничего из введённого никуда не отправляется — отправлять попросту некуда. Подробнее →
/ip firewall nat
add chain=srcnat action=jump jump-target=cgnat-10.64add chain=cgnat-10.64-b3 action=netmap \    to-addresses=200.2.3.0/27 to-ports=3072-4095 \    comment="mikro:v1;pool=cgnat;blk=3;cpi=256"
План
  • 2 создать
  • 67 обновить
  • 66 удалить

Вы просматриваете план до того, как что-либо будет записано.

Жизнь пула

Пул, который можно изменить и через год

Обычно CGNAT настраивают один раз, а потом всю оставшуюся жизнь правят вручную, правило за правилом. Здесь пул остаётся тем, что можно открыть, изменить и применить заново, — потому что сама схема хранится в маршрутизаторе.

  1. Спроектируйте

    Дайте имя, задайте начало приватного диапазона и публичный префикс, выберите, сколько портов достаётся клиенту. Блоки, диапазоны портов и число правил считаются по ходу ввода. На маршрутизаторе пока ничего нет — значок говорит «Черновик».

    Спроектируйте
  2. Прочитайте план

    Все правила, которые будут записаны, целиком: /27, поделённый на 32, — это 133 правила. Пишет только «Применить», сообщая о каждом правиле по ходу дела.

    Прочитайте план
  3. Получается пул, а не груда правил

    После применения он становится активным и показывает, что принадлежит ему на маршрутизаторе. Схема живёт в комментариях к правилам, поэтому при каждом подключении приложение собирает пул заново из маршрутизатора.

    Получается пул, а не груда правил
  4. Измените через год

    Уменьшите вдвое число клиентов на адрес, включите Fasttrack и посмотрите: два правила добавлено, шестьдесят семь изменено, шестьдесят шесть удалено. Записывается только разница.

    Измените через год
  5. Ответьте на жалобу

    Публичный адрес и исходный порт вычисляют клиента за ними — пул, блок и диапазон портов — арифметикой, без журналов потоков, которые пришлось бы хранить.

    Ответьте на жалобу

Вопросы

Это калькулятор CGNAT или он настраивает маршрутизатор?
И то и другое. По ходу ввода он считает блоки, порты на каждого клиента и число правил — это калькулятор — а затем пишет правила netmap через REST API либо отдаёт скрипт, если вставить его вы предпочитаете сами.
Можно ли использовать это на маршрутизаторе, где уже есть правила CGNAT?
Да. Приложение управляет только правилами со своим структурированным комментарием; всё написанное вручную читается, но никогда не изменяется и не удаляется.
Сколько клиентов может делить один публичный адрес?
Любая степень двойки от 1 до 1024. Это число задаёт деление окна исходных портов: чем больше клиентов на адрес, тем уже диапазон портов у каждого.
Может ли он собрать конфигурацию CGNAT для RouterOS в виде скрипта?
Да. Любой пул выгружается в файл .rsc с теми же помеченными командами, которые отправило бы приложение, — для /import, для заявки на изменение или для маршрутизатора, доступного лишь через консоль.
А если я предпочту применить правила сам?
Экспортируйте пул как скрипт RouterOS и вставьте его в терминал. Сгенерированные команды — ровно те, что отправило бы приложение.
Записывает ли он, какой клиент какой порт использовал?
Нет, и это не нужно. Соответствие вычисляется из параметров пула, поэтому поиск работает задним числом, даже если логирование никогда не включали.

Получить Mikro Manager

Распространяется через Mac App Store — в песочнице, подписано и обновляется автоматически.

Скоро в Mac App Store.

Требуется macOS 14 или новее и устройство RouterOS v7 с включённым REST API.