Диагностика IPsec VPN в pfSense - устранение неполадок

IPsec - протокол с жёсткими требованиями к совпадению параметров на обеих сторонах туннеля. Несоответствие даже одного параметра (алгоритм шифрования, группа DH, маска подсети) приводит к отказу в установлении соединения, причём сообщения об ошибках не всегда указывают на первопричину. Систематический подход к диагностике позволяет сократить время поиска проблемы с часов до минут.

Данное руководство описывает методологию диагностики IPsec VPN в pfSense: от включения отладочных логов до анализа конкретных сообщений об ошибках. Материал применим как к site-to-site, так и к mobile client конфигурациям.

Включение отладочных логов

По умолчанию pfSense записывает в журнал IPsec только базовые события. Для детальной диагностики необходимо увеличить уровень логирования.

Настройка уровня логирования

Перейдите в VPN > IPsec > Advanced Settings и настройте параметры логирования:

ПараметрРекомендуемый уровеньНазначение
IKE SADiagДетальная информация о согласовании Phase 1
IKE Child SADiagДетальная информация о согласовании Phase 2
Configuration BackendDiagЗагрузка конфигурации и параметров
IKE Network EventsControlСетевые события (подключения, разрывы)
IKE Message EncodingControlКодирование и декодирование IKE-сообщений
IKE ManagerControlУправление IKE SA
все остальныеControlСтандартный уровень

Нажмите Save. Изменение уровня логирования не прерывает существующие IPsec-туннели.

Внимание:

Уровень Diag генерирует значительный объём логов. После завершения диагностики рекомендуется вернуть уровни к Control, чтобы избежать заполнения дискового пространства.

Просмотр логов

Логи IPsec доступны в Status > System Logs > IPsec. Для фильтрации используйте поле поиска в верхней части страницы.

Для просмотра логов в реальном времени через командную строку:

# Real-time IPsec log monitoring
clog -f /var/log/ipsec.log

# Filter for specific peer IP
clog -f /var/log/ipsec.log | grep "203.0.113.10"

# Filter for errors only
clog -f /var/log/ipsec.log | grep -i "error\|failed\|no proposal"

Ключевые индикаторы в логах

Следующие записи указывают на успешное или неуспешное согласование:

Запись в логеЗначение
IKE_SA ... establishedPhase 1 успешно установлена
CHILD_SA ... establishedPhase 2 успешно установлена, туннель активен
received NO_PROPOSAL_CHOSENУдалённая сторона отклонила предложенные параметры
received AUTHENTICATION_FAILEDОшибка аутентификации (PSK или сертификат)
no matching CHILD_SA config foundНесовпадение подсетей (Traffic Selectors)
giving up after N retransmitsУдалённая сторона не отвечает
peer didn't accept any proposalНи один из предложенных наборов параметров не подошёл

Типичные ошибки Phase 1

Phase 1 (IKE SA) отвечает за аутентификацию сторон и согласование параметров безопасности. Ошибки на этом этапе полностью блокируют установление туннеля.

Несовпадение параметров шифрования

Сообщение об ошибкеПричинаРешение
received NO_PROPOSAL_CHOSENНесовпадение алгоритма шифрования, хеша или DH GroupСравните параметры Encryption Algorithm на обеих сторонах; все три компонента (шифр, хеш, DH Group) должны совпадать
no acceptable ENCRYPTION_ALGORITHM foundУдалённая сторона не поддерживает предложенный алгоритмДобавьте алгоритм, поддерживаемый удалённой стороной, или согласуйте общий набор
no acceptable INTEGRITY_ALGORITHM foundНесовпадение алгоритма хешированияУстановите одинаковый Hash Algorithm (SHA256, SHA384, SHA512) на обеих сторонах
no acceptable DIFFIE_HELLMAN_GROUP foundНесовпадение группы DHУстановите одинаковый DH Group; рекомендуется Group 14 (2048 bit) или выше

При использовании AES-GCM в Phase 1 обратите внимание, что некоторые реализации (Cisco ASA, устаревшие версии MikroTik) не поддерживают GCM для IKE. В этом случае используйте AES-CBC с отдельным алгоритмом хеширования.

Ошибки аутентификации

Сообщение об ошибкеПричинаРешение
received AUTHENTICATION_FAILEDНесовпадение PSK или ошибка проверки сертификатаПри PSK: проверьте точное совпадение ключей (регистр, пробелы, спецсимволы). При сертификатах: убедитесь, что CA-сертификат импортирован на обеих сторонах
PEER_AUTH_FAILEDУдалённая сторона не прошла проверку подлинностиПроверьте идентификатор удалённой стороны (IP, FQDN, DN)
invalid HASH_V1 payload length, decryption failed?Несовпадение PSK (IKEv1)Пересоздайте PSK на обеих сторонах
could not decrypt payloadsНесовпадение PSKПроверьте PSK на обеих сторонах, обращая внимание на невидимые символы (пробелы в конце строки)

Внимание:

При копировании PSK через буфер обмена нередко добавляются невидимые символы (пробелы, символы переноса строки). Рекомендуется вводить ключ вручную или использовать генератор случайных строк.

Ошибки идентификаторов

Сообщение об ошибкеПричинаРешение
no IKE config found for ... - ...Идентификатор удалённой стороны не совпадает с настройкамиПроверьте значения My identifier и Peer identifier на обеих сторонах
remote host is behind NAT, sending keep alives + отказPeer identifier настроен на IP, но NAT подменяет адресИзмените Peer identifier на ID типа Distinguished Name или User FQDN вместо Peer IP Address
parsed CERT_REQ payload, but no certificate foundЗапрошен сертификат, но он не настроенПроверьте, что серверный сертификат указан в Phase 1 и не истёк

Недоступность удалённого узла

Сообщение об ошибкеПричинаРешение
giving up after 5 retransmitsУдалённый узел не отвечаетПроверьте: 1) IP-адрес удалённого узла; 2) UDP 500 и 4500 не блокируются; 3) IPsec-сервис запущен на удалённом узле
connection timed outНет сетевой связностиПроверьте маршрутизацию до удалённого узла (ping, traceroute)
sending retransmit N of request messageПакеты отправляются, но ответ не приходитПроблема может быть на промежуточном оборудовании (файрвол ISP, NAT-устройство)

DPD-ошибки

Сообщение об ошибкеПричинаРешение
DPD: peer is considered deadУдалённый узел не ответил на DPD-запросыПроверьте сетевую связность; увеличьте DPD Delay (30 секунд) и Max Failures (10)
deleting IKE_SA ... after DPD timeoutТуннель удалён из-за DPD-таймаутаЕсли канал связи нестабилен, увеличьте DPD-таймеры или используйте keep-alive ping
Частые разрывы и переподключенияПотеря UDP-пакетов на промежуточном оборудованииПроверьте качество канала; при использовании QoS убедитесь, что UDP 500/4500 не ограничивается

Типичные ошибки Phase 2

Phase 2 (Child SA / IPsec SA) согласуется внутри защищённого канала Phase 1. Ошибки Phase 2 возникают при установленной Phase 1 - статус Phase 1 показывает Established, но Child SA не создаётся.

Несовпадение подсетей (Traffic Selectors)

Сообщение об ошибкеПричинаРешение
no matching CHILD_SA config foundПодсети в Phase 2 не совпадают с предложенными удалённой сторонойУбедитесь, что Local Network на одной стороне соответствует Remote Network на другой (зеркальное совпадение)
TS_UNACCEPTABLETraffic Selectors отклоненыПроверьте маску подсети: /24 и /32 - разные значения. Распространённая ошибка - указать хост (10.1.0.0/32) вместо сети (10.1.0.0/24)
received TS_UNACCEPTABLE notify, no CHILD_SA builtУдалённая сторона не приняла предложенные подсетиСравните Traffic Selectors в логах обеих сторон

Внимание:

Несовпадение подсетей - наиболее распространённая причина отказа Phase 2. Маска подсети должна совпадать побитово: 10.1.0.0/24 на одной стороне и 10.1.0.0/24 на другой (не 10.1.0.0/23 или 10.1.0.0/32).

Несовпадение параметров шифрования Phase 2

Сообщение об ошибкеПричинаРешение
NO_PROPOSAL_CHOSEN (при установленной Phase 1)Несовпадение алгоритма шифрования или хеша Phase 2Проверьте Encryption Algorithm и Hash Algorithm в Phase 2 на обеих сторонах
no acceptable ENCRYPTION_ALGORITHM foundПредложенный алгоритм не поддерживаетсяСогласуйте общий алгоритм; AES-256-GCM или AES-256-CBC - наиболее совместимые варианты
no acceptable INTEGRITY_ALGORITHM foundНесовпадение Hash AlgorithmУстановите одинаковый Hash Algorithm в Phase 2

Несовпадение PFS

Сообщение об ошибкеПричинаРешение
no acceptable DIFFIE_HELLMAN_GROUP found (в Phase 2)Несовпадение PFS GroupУстановите одинаковый PFS key group на обеих сторонах или отключите PFS на обеих
INVALID_KE_PAYLOADУдалённая сторона отправила ключ DH другой длиныПроверьте PFS Group; одна сторона может использовать Group 14, другая - Group 2
Phase 2 устанавливается, но через час падаетPFS включён на одной стороне и отключён на другойПри rekeying PFS-параметры проверяются повторно; обеспечьте совпадение или отключите PFS на обеих сторонах

Туннель установлен, но трафик не проходит

Если Phase 1 и Phase 2 установлены (статус Established), но пользовательский трафик не проходит, проблема лежит за пределами IPsec-согласования.

ПроблемаПричинаРешение
Нет ответа на ping через туннельОтсутствуют правила на вкладке Firewall > Rules > IPsecСоздайте правила, разрешающие трафик между подсетями
Трафик идёт только в одном направленииПравила файрвола настроены только в одну сторонуДобавьте правила для обоих направлений на обеих сторонах
Ответные пакеты не возвращаютсяАсимметричная маршрутизация: ответный трафик уходит мимо туннеляПроверьте таблицу маршрутизации на удалённой стороне; убедитесь, что ответный трафик попадает в Policy SPD
Пакеты фрагментируются и теряютсяMTU-проблемы из-за IPsec overheadУменьшите MSS через System > Advanced > Firewall & NAT (MSS Clamping) или уменьшите MTU на интерфейсах
Трафик ICMP проходит, TCP зависаетMSS не уменьшен для учёта IPsec overheadВключите MSS Clamping; IPsec добавляет 50-73 байта к каждому пакету
Дублированные SA (два одинаковых Child SA)Одновременный rekeying обеими сторонамиПерезапустите IPsec-сервис на одной стороне: ipsec restart

Проблемы с NAT-T

NAT Traversal (NAT-T) необходим, когда между двумя узлами IPsec-туннеля находится NAT-устройство (маршрутизатор, провайдерское оборудование). NAT-T инкапсулирует пакеты ESP в UDP порт 4500, позволяя им проходить через NAT.

Когда NAT-T необходим

  • Один или оба узла IPsec находятся за NAT (имеют приватный IP-адрес на WAN-интерфейсе)
  • Между узлами находится маршрутизатор, выполняющий трансляцию адресов
  • Провайдер использует Carrier-Grade NAT (CG-NAT)

Типичные проблемы NAT-T

ПроблемаПричинаРешение
Phase 1 не устанавливается через NATNAT Traversal отключёнУстановите NAT Traversal в Auto или Force на обеих сторонах
Phase 1 устанавливается, Phase 2 - нетUDP 4500 блокируется промежуточным оборудованиемПроверьте проброс UDP 4500 на NAT-устройстве
remote host is behind NAT + ошибка идентификатораPeer identifier настроен на IP-адрес, но NAT подменил адресИзмените Peer identifier на Distinguished Name или User FQDN
Периодические разрывы через NATNAT-таблица на промежуточном устройстве истекаетВключите DPD с интервалом менее таймаута NAT-таблицы (обычно 60-300 секунд); убедитесь, что NAT keep-alive пакеты отправляются
Двойной NAT (NAT на обеих сторонах)ESP не может пройти через два NAT-устройства без NAT-TВключите Force NAT-T на обеих сторонах; обеспечьте проброс UDP 500 и 4500 на обоих NAT-устройствах

Проверка NAT-T

Для проверки работы NAT-T выполните захват пакетов на WAN-интерфейсе:

# Capture IKE and NAT-T traffic
tcpdump -ni em0 udp port 500 or udp port 4500

# Expected output with NAT-T active:
# 10.0.0.1.4500 > 203.0.113.10.4500: UDP-encap: ESP(spi=0x12345678,seq=0x1)

Если трафик виден на порту 4500 с пометкой UDP-encap: ESP, NAT-T работает корректно. Если трафик идёт по протоколу ESP (порт 50) при наличии NAT, туннель будет нестабильным.

Диагностические команды

pfSense предоставляет набор команд для диагностики IPsec через Diagnostics > Command Prompt или SSH-подключение.

Состояние IPsec SA

# Complete SA status with negotiated parameters
ipsec statusall

# Brief status (established tunnels only)
ipsec status

# View IP addresses assigned to mobile clients
ipsec leases

Команда ipsec statusall отображает:

  • Согласованные алгоритмы шифрования и хеширования
  • Группу DH и PFS
  • Время до истечения SA
  • Traffic Selectors (подсети)
  • Количество переданных байтов
  • Текущий статус IKE SA и Child SA

Таблица Security Policy Database (SPD)

# View installed security policies
setkey -DP

# View installed security associations
setkey -D

Команда setkey -DP показывает, какие пакеты должны обрабатываться IPsec (направляться в туннель). Если политика отсутствует для нужной пары подсетей, трафик не будет зашифрован.

Правила файрвола

# View all active firewall rules
pfctl -sr

# View rules for IPsec interface (enc0)
pfctl -sr | grep enc0

# View blocked packets in real time
tcpdump -ni pflog0

Захват пакетов

# Capture IKE negotiation on WAN
tcpdump -ni em0 udp port 500 or udp port 4500

# Capture ESP traffic (without NAT-T)
tcpdump -ni em0 proto 50

# Capture decrypted traffic on IPsec interface
tcpdump -ni enc0

# Capture with detailed output and write to file
tcpdump -ni em0 -vvv -s 0 -w /tmp/ipsec-capture.pcap udp port 500 or udp port 4500

Захват на интерфейсе enc0 показывает расшифрованный трафик внутри туннеля. Это позволяет определить, доходят ли пакеты до pfSense через туннель и в каком виде.

Просмотр маршрутов

# View routing table
netstat -rn

# Check if route for remote subnet exists
netstat -rn | grep "10.2.0.0"

# View gateway groups status
pfctl -vvsA

Управление IPsec-сервисом

# Restart IPsec service (drops all tunnels)
ipsec restart

# Reload configuration without dropping tunnels
ipsec update

# Terminate specific IKE SA
ipsec down <connection_name>

# Re-initiate specific connection
ipsec up <connection_name>

Внимание:

Команда ipsec restart разрывает все активные туннели. В производственной среде предпочтительнее использовать ipsec update для применения изменений конфигурации без разрыва существующих соединений.

Проблемы при переустановлении (Rekeying)

Туннели IPsec имеют ограниченное время жизни. По истечении этого времени происходит rekeying - согласование нового ключевого материала. Ошибки при rekeying приводят к периодическим разрывам туннеля.

ПроблемаПричинаРешение
Туннель падает каждые N часовОшибка при rekeying Phase 1 или Phase 2Проверьте, совпадают ли Lifetime на обеих сторонах; проверьте логи в момент rekeying
Туннель падает и не восстанавливаетсяChild SA Start Action не настроенУстановите Child SA Start Action в Start для автоматического переподключения
Двойные SA после rekeyingОбе стороны одновременно инициируют rekeyingУстановите разные Lifetime на разных сторонах (например, 28800 и 28200 для Phase 1) или убедитесь, что Rand Time не обнулён
Односторонний rekeying работает, двусторонний - нетНастройки принимаются при инициации с одной стороны, но не с другойВсе параметры должны совпадать; проверьте, не добавлены ли дополнительные алгоритмы на одной стороне

Чек-лист диагностики

При возникновении проблем с IPsec-туннелем рекомендуется последовательно пройти следующий чек-лист.

1. Сетевая связность

  • Удалённый узел доступен: ping <remote_public_ip>
  • Маршрут до удалённого узла существует: traceroute <remote_public_ip>
  • UDP 500 не блокируется: nc -uzv <remote_public_ip> 500
  • UDP 4500 не блокируется: nc -uzv <remote_public_ip> 4500

2. Параметры Phase 1

  • Версия IKE совпадает (IKEv1 или IKEv2)
  • Алгоритм шифрования совпадает
  • Hash Algorithm совпадает
  • DH Group совпадает
  • Lifetime совпадает (допускается разница; меньшее значение используется)
  • Метод аутентификации совпадает (PSK или сертификаты)
  • PSK идентичен на обеих сторонах (при использовании PSK)
  • Идентификаторы (My/Peer) настроены корректно

3. Параметры Phase 2

  • Подсети (Traffic Selectors) зеркально совпадают
  • Маски подсетей корректны (/24 vs /32)
  • Алгоритм шифрования Phase 2 совпадает
  • Hash Algorithm Phase 2 совпадает
  • PFS Group совпадает или отключён на обеих сторонах
  • Протокол ESP (не AH)

4. Сертификаты (при использовании)

  • CA-сертификат импортирован на обеих сторонах
  • Серверный сертификат не истёк (проверьте дату)
  • SAN в серверном сертификате содержит IP или FQDN сервера
  • Цепочка доверия сертификатов полная
  • Для Apple-устройств: Lifetime серверного сертификата не более 825 дней

5. Правила файрвола

  • UDP 500 и 4500 разрешены на WAN
  • Правила на вкладке IPsec разрешают трафик между подсетями
  • Нет конфликтующих плавающих правил
  • NAT Traversal включён (Auto или Force) при наличии NAT

6. Маршрутизация и SA

  • В ipsec statusall отображаются установленные SA
  • В setkey -DP присутствуют политики для нужных подсетей
  • В netstat -rn присутствует маршрут до удалённой подсети (для VTI)
  • Счётчики байтов в Status > IPsec увеличиваются при прохождении трафика

Связанные разделы

Last updated on