MikroTik Log: bgp,error notification sent: hold time expired — Решение
Периодический разрыв BGP-соседства и флаппинг маршрутных таблиц в системном журнале:
bgp,error notification sent: hold time expired (Error code: 4, Subcode: 0)bgp,info Connection reset by peer / HoldTimer expiredbgp,warning BGP session down, peer <IP> unreachable- Сессия переходит из состояния
EstablishedвIdleилиActive, прерывая прохождение транзитного сетевого трафика.
1. Причины срабатывания Hold Timer
Ошибка означает, что маршрутизатор не получил ни одного служебного сообщения Keepalive или Update от BGP-пира в течение времени Hold Time (по умолчанию 90 или 180 секунд). Основные причины: перегрузка CPU при получении Full View, блокировка пакетов TCP порт 179 в Firewall, дропы из-за несовпадения MTU или перегрузка физического линка.
2. Проверка доступности порта TCP 179 и фильтрации Firewall
Убедитесь, что фаервол не дропает сессии BGP при высокой нагрузке:
/ip firewall filter add chain=input protocol=tcp port=179 action=accept place-before=1 comment="Accept BGP TCP 179"3. Корректировка таймеров BGP (RouterOS v7)
Если канал связи подвержен кратковременным задержкам или микропотерям, увеличьте интервалы таймеров в BGP Connection/Template:
/routing bgp connection set [find name="bgp-peer-isp"] hold-time=180s keepalive-time=60s4. Проверка MTU и фрагментации TCP BGP Update пакетов
Пакеты BGP Update с большими таблицами маршрутов генерируют сегменты максимального размера. Если на пути занижен MTU, пакеты теряются. Настройте фиксацию MSS или Path MTU Discovery:
/ip firewall mangle add chain=output protocol=tcp tcp-flags=syn port=179 action=change-mss new-mss=1400 passthrough=yes Частые вопросы (FAQ)
Что такое BGP Hold Time?
Hold Time — максимальный интервал времени в секундах, в течение которого маршрутизатор ожидает получения управляющих сообщений Keepalive или Update от соседа перед объявлением пира недоступным.
Почему Hold Timer сбрасывается именно в момент получения Full-View таблицы?
Обработка сотен тысяч маршрутов вызывает всплеск утилизации CPU до 100%, из-за чего процесс маршрутизации не успевает своевременно ответить на входящие Keepalive-сообщения.
Как проверить загрузку процессора при флапе BGP?
Используйте инструмент профайлера: /tool profile cpu=all. В RouterOS v7 обработка BGP распределена по нескольким ядрам через процесс routing.
Как включить логирование BGP сообщений?
Выполните команду: /system logging add topics=bgp,raw action=memory.