Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

CHILD_SA_NOT_FOUND Сетевое оборудование и VPN

IPsec Error CHILD_SA_NOT_FOUND: получен Delete для несуществующего SPI

Обновлено: 24.08.2026 · Официальная документация ↗

Во время штатной работы туннеля IPsec в логах появляются следующие аномалии:

  • Ошибки: IPsec Error: CHILD_SA_NOT_FOUND: Delete received for non-existent SPI 0x... или unable to find Child SA for delete payload.
  • Внезапная кратковременная потеря трафика в момент планового пересогласования ключей (Rekeying).
  • Наличие зависших односторонних туннелей (пакеты отправляются, но расшифровка ответов не происходит).

1. Причины возникновения рассинхронизации SPI (RFC 7296)

Каждая Фаза 2 идентифицируется уникальным 32-битным числом — Security Parameter Index (SPI). Когда одна сторона удаляет устаревшую SA (после успешного рекеинга или по таймауту), она отправляет информационный пакет Informational Exchange (DELETE Payload) с указанием SPI. Если вторая сторона уже удалила эту SA локально или если между шлюзами возникла задержка доставки пакетов, шлюз фиксирует ошибку CHILD_SA_NOT_FOUND.

2. Просмотр активных SPI в ядре операционной системы

# Вывод всех зарегистрированных состояний SPI в Linux
ip xfrm state list

# Поиск конкретного проблемного SPI (например, c2b1a034)
ip xfrm state show spi 0xc2b1a034

3. Устранение состояния гонки при Rekeying (Rekey Collision)

Если оба шлюза одновременно инициируют пересогласование ключей, создаются дублирующие SA, после чего одна из них удаляется с генерацией предупреждения.

Решение: распределите роли инициатора и ответчика через параметр rekey_margin в swanctl.conf:

connections {
    site-to-site {
        children {
            sa-branch {
                # Время жизни SA
                life_time = 3600s
                # Начать пересогласование за 10 минут до истечения
                rekey_time = 3000s
                # Случайный разброс времени старта рекея (предотвращает одновременный старт)
                rand_time = 300s
            }
        }
    }
}

4. Принудительная синхронизация и очистка битых состояний

# Полный сброс всех состояний XFRM ядра (осторожно: кратковременно разорвет все туннели!)
ip xfrm state flush
ip xfrm policy flush

# Перезапуск согласования
swanctl --initiate --child sa-branch

5. Настройка DPD (Dead Peer Detection) для своевременного клиринга

connections {
    site-to-site {
        dpd_delay = 15s
        dpd_timeout = 45s
    }
}
💡 Практика специалистов: Если ошибки удаления SPI возникают на высоконагруженных шлюзах, увеличьте параметр ядра 'net.core.xfrm_acq_expires' со стандартных 30 секунд до 60–90 секунд, чтобы предотвратить преждевременное уничтожение полуготовых структур ядром.

Частые вопросы (FAQ)

Критична ли ошибка CHILD_SA_NOT_FOUND для работы туннеля?

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

Что такое SPI в заголовке IPsec?

SPI (Security Parameters Index) — это уникальный 4-байтовый идентификатор в заголовке ESP, позволяющий шлюзу-получателю мгновенно сопоставить зашифрованный пакет с конкретными ключами и политиками безопасности.

Почему возникают 'зомби' SA в Linux XFRM?

Зомби-состояния возникают, когда управляющий демон IKE (charon) аварийно завершился или был перезапущен с ключом kill -9, не очистив предварительно созданные структуры в ядре.

Как автоматизировать очистку зависших состояний без перезапуска сети?

Используйте встроенную проверку DPD с действием 'dpdaction = restart' (или 'close'), что заставит демон штатно чистить старые SA перед созданием новых.

Полезные материалы
Рекомендуем