Safe Mode на MikroTik — защита от ошибок
Safe Mode на MikroTik — защита от ошибок при настройке
Safe Mode — встроенный механизм RouterOS, который автоматически откатывает изменения конфигурации при потере связи с маршрутизатором. Это незаменимый инструмент при удалённом администрировании, особенно при настройке Firewall, маршрутизации и IP-адресации — любых изменений, которые могут заблокировать доступ к устройству.
Статья актуальна для RouterOS 7.20+.
Описание
Зачем нужен Safe Mode
Представьте ситуацию: вы администрируете маршрутизатор MikroTik удалённо через WinBox или SSH. Вам нужно добавить правило Firewall. Вы добавляете правило, которое по ошибке блокирует весь трафик — включая ваше собственное подключение. Связь теряется. Маршрутизатор находится в другом городе. Единственный вариант — просить кого-то на месте перезагрузить устройство или подключиться по консоли.
Safe Mode решает эту проблему. Когда Safe Mode активирован, все ваши изменения помечаются как «ожидающие» (pending). Если сессия обрывается (вы теряете связь с маршрутизатором), RouterOS автоматически откатывает все pending-изменения через ~9 минут (TCP timeout). Конфигурация возвращается в состояние до входа в Safe Mode.
Как это работает внутри
Технически Safe Mode работает следующим образом:
- При входе в Safe Mode RouterOS начинает отслеживать все изменения конфигурации в текущей сессии.
- Каждое изменение помечается как «pending» — применено, но не подтверждено.
- Если администратор вручную выходит из Safe Mode (подтверждает изменения), все pending-изменения становятся постоянными.
- Если TCP-сессия обрывается (потеря связи), RouterOS ждёт timeout (~9 минут) и откатывает все pending-изменения.
- После отката конфигурация возвращается в точное состояние до входа в Safe Mode.
Важно: изменения применяются немедленно, даже в Safe Mode. То есть если вы добавили правило Firewall — оно сразу начинает работать. Но если связь потеряна, RouterOS через ~9 минут удалит это правило автоматически.
Настройка (активация Safe Mode)
Включение через CLI (SSH/Terminal)
Для входа в Safe Mode в командной строке используйте комбинацию Ctrl+X:
routeros[admin@MikroTik] >
После нажатия Ctrl+X в приглашении появится метка <SAFE>:
routeros[admin@MikroTik] <SAFE> >
Это означает, что Safe Mode активен. Все последующие изменения будут помечены как pending.
Включение через WinBox
В WinBox Safe Mode включается через кнопку Safe Mode в верхней части окна Terminal. Также можно использовать Ctrl+X в окне терминала WinBox.
При включении Safe Mode в WinBox кнопка подсвечивается, а в заголовке терминала появляется метка <SAFE>.
Выход из Safe Mode (подтверждение изменений)
Чтобы подтвердить все изменения и выйти из Safe Mode, нажмите Ctrl+X ещё раз:
routeros[admin@MikroTik] <SAFE> > # Нажимаем Ctrl+X [admin@MikroTik] >
Метка <SAFE> исчезает — все изменения зафиксированы, откат больше невозможен.
Отмена изменений вручную (без потери связи)
Если вы хотите откатить изменения вручную, не дожидаясь потери связи, используйте Ctrl+D (или закройте сессию):
Нажатие Ctrl+D в Safe Mode немедленно откатывает все pending-изменения и завершает сессию.
Практический пример: безопасная настройка Firewall
Рассмотрим типичный сценарий — добавление правил Firewall на удалённом маршрутизаторе.
Шаг 1: Войдите в Safe Mode
Подключитесь к маршрутизатору через SSH или WinBox Terminal:
[admin@MikroTik] ># Нажмите Ctrl+X для входа в Safe Mode [admin@MikroTik] <SAFE> >
Шаг 2: Внесите изменения
Добавьте правила Firewall:
[admin@MikroTik] >/ip/firewall/filter add chain=input connection-state=established,related action=accept add chain=input connection-state=invalid action=drop add chain=input protocol=tcp dst-port=22 action=accept \ comment="Allow SSH" add chain=input protocol=tcp dst-port=8291 action=accept \ comment="Allow WinBox" add chain=input protocol=icmp action=accept comment="Allow ICMP" add chain=input action=drop comment="Drop all other input"
Правила применяются немедленно. Если вы допустили ошибку (например, забыли разрешить WinBox), связь оборвётся.
Шаг 3: Проверьте доступность
После добавления правил убедитесь, что связь с маршрутизатором работает. Попробуйте:
- Открыть новую сессию WinBox/SSH.
- Выполнить ping до маршрутизатора.
- Проверить, что нужные сервисы доступны.
[admin@MikroTik] ># Если всё работает — подтвердите изменения (Ctrl+X) [admin@MikroTik] <SAFE> > # Ctrl+X [admin@MikroTik] >
Что произойдёт при ошибке
Допустим, вы забыли добавить правило для WinBox (порт 8291) и последним правилом добавили drop all. Ваше подключение WinBox оборвётся. Что произойдёт дальше:
- TCP-сессия WinBox разорвана.
- RouterOS ждёт TCP timeout (~9 минут).
- По истечении timeout RouterOS определяет, что сессия Safe Mode потеряна.
- Все pending-изменения откатываются — правила Firewall удаляются.
- Маршрутизатор возвращается в исходное состояние.
- Вы можете подключиться снова и исправить ошибку.
Что откатывается, а что нет
Откатываются (pending-изменения в Safe Mode):
- Добавленные правила Firewall, NAT, Mangle.
- Изменённые IP-адреса.
- Изменённые маршруты.
- Добавленные/удалённые интерфейсы (Bridge ports, VLAN).
- Изменения в DHCP, DNS, настройках сервисов.
- Любые изменения конфигурации, сделанные через CLI в сессии Safe Mode.
НЕ откатываются:
- Перезагрузка маршрутизатора (
/system/reboot). - Обновление RouterOS (
/system/package/update/install). - Сброс конфигурации (
/system/reset-configuration). - Операции с файловой системой (загрузка/удаление файлов).
- Изменения, сделанные скриптами, запущенными через Scheduler.
- Изменения, сделанные другими администраторами в их сессиях.
Важный момент: Safe Mode отслеживает только изменения, сделанные в текущей сессии. Если вы запустите скрипт, который вносит изменения — эти изменения могут не попасть под Safe Mode в зависимости от контекста выполнения.
Safe Mode vs Backup
| Характеристика | Safe Mode | Backup |
|---|---|---|
| Назначение | Защита от ошибок в реальном времени | Полное сохранение конфигурации |
| Автоматический откат | Да (при потере связи) | Нет (ручное восстановление) |
| Область действия | Текущая сессия | Вся конфигурация |
| Время отката | ~9 минут (TCP timeout) | Мгновенно (но требует перезагрузки) |
| Подходит для скриптов | Нет | Да |
| Защита от перезагрузки | Нет | Да |
Рекомендация: используйте оба механизма. Перед серьёзными изменениями сделайте backup, а затем работайте в Safe Mode:
[admin@MikroTik] ># Сначала — backup /system/backup/save name=before-changes /export file=before-changes-export # Затем — Safe Mode (Ctrl+X) [admin@MikroTik] <SAFE> > # ... вносите изменения ...
Если Safe Mode не спас (например, маршрутизатор перезагрузился) — у вас есть backup для восстановления.
Ограничения Safe Mode
1. Только одна сессия
Safe Mode может быть активен только в одной сессии одновременно. Если администратор A вошёл в Safe Mode, а администратор B пытается войти — он получит предупреждение.
При попытке входа в Safe Mode, который уже занят другим администратором:
codeHijacking Safe Mode from admin@192.168.88.100
Если администратор B подтвердит — Safe Mode перейдёт к нему, а pending-изменения администратора A будут немедленно откачены. Это может быть неожиданным поведением.
2. Не работает для скриптов
Скрипты, запущенные через Scheduler или System → Scripts, не могут использовать Safe Mode. Это логично — скрипт не имеет интерактивной сессии, которую можно потерять.
Для защиты от ошибок в скриптах используйте:
- Предварительное тестирование.
- Проверки условий внутри скрипта.
- Backup перед выполнением.
3. TCP timeout ~9 минут
Откат происходит не мгновенно. После потери связи RouterOS ждёт, пока TCP-сессия «умрёт» — это занимает примерно 9 минут (зависит от настроек TCP keepalive). Всё это время некорректная конфигурация остаётся активной.
Если вы заблокировали доступ из-за Firewall — придётся ждать ~9 минут, прежде чем откат произойдёт и вы сможете подключиться снова.
4. Не защищает от всех ошибок
Safe Mode не защищает от:
- Ошибок в конфигурации, которые не обрывают связь (например, некорректный DHCP).
- Физических проблем (отключение кабеля, питания).
- Ошибок других администраторов, работающих параллельно.
Проверка состояния Safe Mode
Проверить, активен ли Safe Mode в текущей сессии:
[admin@MikroTik] ># Наличие метки <SAFE> в приглашении означает активный Safe Mode [admin@MikroTik] <SAFE> >
Из другой сессии можно увидеть, что Safe Mode активен, по наличию pending-изменений. Просмотрите активные сессии:
[admin@MikroTik] >/system/resource/print
К сожалению, RouterOS не предоставляет явной команды для проверки статуса Safe Mode из другой сессии. Признаком служит предупреждение при попытке войти в Safe Mode.
Типичные ошибки
1. Забыли выйти из Safe Mode
Самая частая ошибка — администратор завершает настройку, но забывает подтвердить изменения (Ctrl+X). Если после этого сессия завершается (закрытие WinBox, разрыв SSH) — все изменения откатятся через ~9 минут.
Решение: всегда проверяйте метку <SAFE> в приглашении. Если она есть — не закрывайте сессию до подтверждения (Ctrl+X).
2. Второй администратор «перехватывает» Safe Mode
Если два администратора работают одновременно и один из них пытается войти в Safe Mode, который уже занят — pending-изменения первого администратора будут откачены. Это может привести к неожиданной потере конфигурации.
Решение: координируйте действия с коллегами. Перед критичными изменениями убедитесь, что никто другой не использует Safe Mode:
[admin@MikroTik] ># Проверьте активные сессии /user/active/print
3. Ожидание мгновенного отката
Safe Mode не откатывает изменения мгновенно при потере связи. TCP timeout может занимать до 9 минут. В течение этого времени маршрутизатор работает с некорректной конфигурацией.
Решение: учитывайте время отката при планировании. Если вам нужен мгновенный откат — используйте Scheduler с задержкой:
[admin@MikroTik] ># Создайте задание, которое восстановит backup через 5 минут /system/scheduler/add name="rollback" interval=0 \ start-time=startup on-event="/system/backup/load name=before-changes" \ start-date=[/system/clock/get date]
Это «страховочный» подход для критичных изменений.
4. Использование Safe Mode для долгих настроек
Safe Mode предназначен для коротких, атомарных операций: добавить несколько правил, проверить, подтвердить. Если настройка занимает часы — Safe Mode не подходит. TCP-сессия может оборваться по естественным причинам (нестабильный интернет), и все изменения откатятся.
Решение: для долгих настроек используйте backup + поэтапное применение. Вносите изменения блоками, подтверждая каждый блок.
5. Перезагрузка в Safe Mode
Если маршрутизатор перезагрузится во время активного Safe Mode, pending-изменения будут потеряны (откатятся). Это может произойти при:
- Отключении питания.
- Принудительной перезагрузке.
- Обновлении RouterOS.
Решение: не перезагружайте маршрутизатор, находясь в Safe Mode. Сначала подтвердите изменения (Ctrl+X), затем перезагружайте.
Лучшие практики
-
Всегда используйте Safe Mode при удалённой настройке Firewall. Это главный сценарий, где Safe Mode спасает от блокировки.
-
Делайте backup перед Safe Mode. Двойная защита: Safe Mode откатит при потере связи, backup спасёт при перезагрузке.
-
Вносите минимальные изменения за раз. Не добавляйте 50 правил в Safe Mode — добавьте 5, проверьте, подтвердите, войдите в Safe Mode снова.
-
Проверяйте доступ из второй сессии. Перед подтверждением изменений откройте параллельную сессию WinBox/SSH и убедитесь, что всё работает.
-
Координируйте с коллегами. Не используйте Safe Mode, если другие администраторы вносят изменения одновременно.
[admin@MikroTik] ># Типичный рабочий процесс: # 1. Backup /system/backup/save name=pre-firewall # 2. Safe Mode (Ctrl+X) # 3. Изменения /ip/firewall/filter/add chain=input protocol=tcp dst-port=443 \ action=accept comment="Allow HTTPS" # 4. Проверка (открыть вторую сессию) # 5. Подтверждение (Ctrl+X)
Резюме
Safe Mode — простой, но мощный механизм защиты от ошибок при удалённом администрировании MikroTik. Он автоматически откатывает изменения при потере связи, что критически важно при настройке Firewall и IP-адресации. Ограничения — одна сессия, неприменимость к скриптам и задержка отката ~9 минут — легко компенсируются правильным рабочим процессом. Комбинация Safe Mode + Backup обеспечивает максимальную защиту от ошибок конфигурации.
[admin@MikroTik] >
[admin@MikroTik] <SAFE> >
[admin@MikroTik] <SAFE> >
# Нажимаем Ctrl+X
[admin@MikroTik] >
# Нажмите Ctrl+X для входа в Safe Mode
[admin@MikroTik] <SAFE> >
/ip/firewall/filter
add chain=input connection-state=established,related action=accept
add chain=input connection-state=invalid action=drop
add chain=input protocol=tcp dst-port=22 action=accept \
comment="Allow SSH"
add chain=input protocol=tcp dst-port=8291 action=accept \
comment="Allow WinBox"
add chain=input protocol=icmp action=accept comment="Allow ICMP"
add chain=input action=drop comment="Drop all other input"
# Если всё работает — подтвердите изменения (Ctrl+X)
[admin@MikroTik] <SAFE> >
# Ctrl+X
[admin@MikroTik] >
# Сначала — backup
/system/backup/save name=before-changes
/export file=before-changes-export
# Затем — Safe Mode (Ctrl+X)
[admin@MikroTik] <SAFE> >
# ... вносите изменения ...
Hijacking Safe Mode from admin@192.168.88.100
# Наличие метки <SAFE> в приглашении означает активный Safe Mode
[admin@MikroTik] <SAFE> >
/system/resource/print
# Проверьте активные сессии
/user/active/print
# Создайте задание, которое восстановит backup через 5 минут
/system/scheduler/add name="rollback" interval=0 \
start-time=startup on-event="/system/backup/load name=before-changes" \
start-date=[/system/clock/get date]
# Типичный рабочий процесс:
# 1. Backup
/system/backup/save name=pre-firewall
# 2. Safe Mode (Ctrl+X)
# 3. Изменения
/ip/firewall/filter/add chain=input protocol=tcp dst-port=443 \
action=accept comment="Allow HTTPS"
# 4. Проверка (открыть вторую сессию)
# 5. Подтверждение (Ctrl+X)