# Инструменты диагностики pfSense - сетевой анализ

> Диагностика сети в pfSense - ping, traceroute, DNS lookup, packet capture, pfInfo, ARP таблица, таблица состояний и системная активность

Source: https://opennix.org/docs/pfsense/monitoring/pfsense-diagnostics/


pfSense предоставляет набор инструментов диагностики сети, доступных через меню **Diagnostics** веб-интерфейса. Эти утилиты позволяют проверять связность, анализировать маршруты, захватывать пакеты и исследовать внутреннее состояние файрвола без необходимости подключения по SSH. Каждый инструмент ориентирован на определённый аспект диагностики - от базовой проверки доступности до анализа таблицы состояний pf в реальном времени.

Систематическое использование диагностических инструментов в определённой последовательности существенно ускоряет выявление и устранение сетевых проблем.

## Обзор меню Diagnostics

| Инструмент | Меню | Назначение |
|---|---|---|
| Ping | Diagnostics > Ping | Проверка доступности хоста |
| Traceroute | Diagnostics > Traceroute | Анализ маршрута до хоста |
| DNS Lookup | Diagnostics > DNS Lookup | Разрешение DNS-имён |
| ARP Table | Diagnostics > ARP Table | Таблица соответствий MAC-IP |
| NDP Table | Diagnostics > NDP Table | Таблица соседей IPv6 |
| States | Diagnostics > States | Таблица состояний файрвола |
| pfInfo | Diagnostics > pfInfo | Статистика pf |
| pfTop | Diagnostics > pfTop | Активные соединения в реальном времени |
| Packet Capture | Diagnostics > Packet Capture | Захват пакетов |
| Command Prompt | Diagnostics > Command Prompt | Выполнение команд и PHP |
| System Activity | Diagnostics > System Activity | Процессы и нагрузка |
| S.M.A.R.T. Status | Diagnostics > S.M.A.R.T. Status | Здоровье дисков |

## Ping

Утилита ping доступна через **Diagnostics > Ping** и позволяет проверить доступность удалённого хоста с учётом маршрутизации и правил файрвола pfSense.

### Параметры

- **Hostname** - IP-адрес или доменное имя целевого хоста
- **IP Protocol** - IPv4 или IPv6
- **Source Address** - интерфейс, с которого отправляются ICMP-запросы. Выбор источника критически важен при диагностике Multi-WAN и VPN: запрос с WAN-интерфейса и с LAN-интерфейса может следовать разными маршрутами
- **Maximum number of pings** - количество запросов (1, 3, 5, 10)
- **Seconds between pings** - интервал между запросами

### Интерпретация результатов

Результат содержит время отклика (RTT) для каждого запроса и итоговую статистику: отправлено, получено, потеряно, минимальное/среднее/максимальное RTT.

Типичные сценарии:

| Результат | Возможная причина |
|---|---|
| 100% packet loss | Хост недоступен, маршрут отсутствует, блокировка ICMP на промежуточном узле |
| Высокий RTT (>100 мс в LAN) | Перегрузка канала, проблема с оборудованием |
| Нестабильный RTT | Потери на промежуточном канале, проблема с QoS |
| Request timeout с периодическими ответами | Ограничение скорости ICMP на целевом хосте |

> **Внимание**:
>
> При выборе Source Address следует учитывать, что ping с интерфейса WAN использует публичный IP, а ping с LAN - внутренний адрес. При диагностике VPN-туннелей необходимо выбирать интерфейс, IP-адрес которого входит в адресное пространство туннеля.

## Traceroute

Утилита traceroute доступна через **Diagnostics > Traceroute** и отображает маршрут пакетов до целевого хоста с указанием каждого промежуточного узла.

### Параметры

- **Hostname** - IP-адрес или доменное имя
- **IP Protocol** - IPv4 или IPv6
- **Source Address** - интерфейс-источник
- **Maximum number of hops** - максимальная глубина трассировки (по умолчанию 18)
- **Reverse Resolve IP** - обратное разрешение DNS для IP-адресов промежуточных узлов
- **Use ICMP** - использование ICMP вместо UDP (некоторые хосты блокируют UDP-пробы)

### Интерпретация результатов

Каждая строка вывода содержит номер хопа, IP-адрес (или имя хоста) и три значения RTT. Символ `*` означает отсутствие ответа от данного узла.

Типичные паттерны:

- **Все хопы отображаются** - маршрут полностью прослеживается, проблема на целевом хосте
- **Звёздочки начиная с определённого хопа** - трафик блокируется на данном узле или далее
- **Резкий рост RTT на конкретном хопе** - перегрузка канала между данным и предыдущим узлом
- **Непоследовательный маршрут** - асимметричная маршрутизация или балансировка нагрузки

## DNS Lookup

Утилита доступна через **Diagnostics > DNS Lookup** и выполняет разрешение DNS-имён с использованием DNS-серверов, настроенных в pfSense.

### Параметры

- **Hostname** - доменное имя для разрешения

### Результаты

Вывод включает:

- Полученные IP-адреса (A/AAAA записи)
- DNS-сервер, ответивший на запрос
- Время разрешения
- Результаты обратного DNS-запроса (PTR) для полученных IP-адресов

Этот инструмент полезен для проверки корректности работы DNS Resolver (Unbound) или DNS Forwarder (dnsmasq), настроенных в pfSense. При расхождении результатов с ожидаемыми следует проверить настройки DNS в **System > General Setup** и конфигурацию DNS Resolver в **Services > DNS Resolver**.

## ARP Table

Таблица ARP доступна через **Diagnostics > ARP Table** и отображает соответствия между IP-адресами и MAC-адресами устройств в локальной сети.

### Отображаемые поля

| Поле | Описание |
|---|---|
| Interface | Интерфейс, через который обнаружено устройство |
| IP Address | IPv4-адрес устройства |
| MAC Address | MAC-адрес устройства |
| Hostname | Имя хоста (если разрешено через DNS/DHCP) |
| Status | Состояние записи: permanent, reachable, stale, expired |
| Link Type | Тип подключения: ethernet |

### Применение

- **Обнаружение IP-конфликтов** - два разных MAC-адреса для одного IP указывают на конфликт
- **Идентификация устройств** - определение MAC-адреса устройства по его IP (или наоборот) для привязки к конкретному оборудованию
- **Обнаружение ARP-spoofing** - аномальные записи могут свидетельствовать об атаке типа MITM
- **Проверка связности L2** - отсутствие записи для хоста в той же подсети указывает на проблему канального уровня

## NDP Table

Таблица NDP (Neighbor Discovery Protocol) доступна через **Diagnostics > NDP Table** и выполняет для IPv6 ту же функцию, что ARP для IPv4 - отображает соответствия между IPv6-адресами и MAC-адресами соседних устройств.

Отображаемые поля аналогичны ARP Table: интерфейс, IPv6-адрес, MAC-адрес, имя хоста и состояние.

## Таблица состояний (States)

Таблица состояний доступна через **Diagnostics > States** и отображает все текущие соединения, отслеживаемые файрволом pf.

### Отображаемые поля

| Поле | Описание |
|---|---|
| Interface | Интерфейс, на котором создано состояние |
| Protocol | Протокол: TCP, UDP, ICMP и др. |
| Source | Адрес и порт источника |
| Destination | Адрес и порт назначения |
| State | Состояние соединения (для TCP: ESTABLISHED, TIME_WAIT и др.) |
| Packets | Количество переданных пакетов |
| Bytes | Объём переданных данных |
| Age | Время существования записи |
| Expires in | Время до удаления записи |

### Фильтрация состояний

Страница предоставляет поле поиска для фильтрации по IP-адресу, порту или протоколу. Это позволяет быстро найти все соединения конкретного хоста или все соединения на определённый порт.

### Удаление состояний

Индивидуальные состояния можно удалить кнопкой в строке записи. Массовое удаление состояний выполняется через **Diagnostics > States > Reset States**. Удаление состояния принудительно прерывает соединение - клиенту потребуется установить новое.

> **Внимание**:
>
> Массовый сброс состояний прерывает все активные соединения через файрвол. Эту операцию следует выполнять только при необходимости - например, после изменения правил NAT, когда старые состояния содержат устаревшие трансляции.

### Применение

- **Диагностика проблем подключения** - проверка наличия или отсутствия ожидаемого состояния
- **Выявление аномалий** - большое количество состояний от одного IP может указывать на сканирование или атаку
- **Мониторинг VPN** - проверка прохождения трафика через VPN-туннель
- **Анализ NAT** - проверка корректности трансляции адресов

## pfInfo

Страница pfInfo доступна через **Diagnostics > pfInfo** и отображает полную статистику подсистемы pf (packet filter).

### Отображаемые данные

- **State Table** - текущее и максимальное количество записей в таблице состояний, процент использования
- **Counters** - счётчики пакетов: match, bad-offset, fragment, short, normalize, memory, bad-timestamp, congestion, ip-option, proto-cksum, state-mismatch, state-insert, state-limit, src-limit, synproxy
- **Source Tracking Table** - количество записей отслеживания источников
- **Limits** - настроенные лимиты: states, src-nodes, frags, tables, table-entries
- **Timeouts** - таймауты для различных протоколов и состояний

### Применение

- **Мониторинг заполнения таблицы состояний** - приближение к максимуму вызывает отбрасывание новых соединений
- **Выявление аномалий** - высокие значения bad-offset, fragment или state-mismatch указывают на проблемы или атаки
- **Планирование ёмкости** - анализ пиковых значений для корректировки лимитов в **System > Advanced > Firewall & NAT**

## pfTop

Утилита pfTop доступна через **Diagnostics > pfTop** и отображает таблицу состояний файрвола в реальном времени, аналогично утилите `top` для процессов.

### Режимы отображения

pfTop поддерживает несколько режимов сортировки и отображения:

- **Default** - все состояния, отсортированные по количеству байт
- **Long** - расширенный формат с дополнительными полями
- **Queue** - отображение очередей Traffic Shaper
- **Rules** - статистика по правилам файрвола
- **Size** - сортировка по объёму переданных данных
- **Speed** - сортировка по текущей скорости передачи
- **State** - сортировка по состоянию соединения
- **Time** - сортировка по времени существования

### Применение

- **Выявление потребителей полосы** - сортировка по Speed или Size показывает хосты с наибольшим трафиком
- **Мониторинг в реальном времени** - наблюдение за активными соединениями во время диагностики
- **Анализ правил** - режим Rules показывает, какие правила обрабатывают наибольший трафик

## Packet Capture

Инструмент захвата пакетов доступен через **Diagnostics > Packet Capture** и позволяет записывать сетевой трафик для последующего анализа. Функциональность основана на утилите tcpdump.

### Параметры захвата

| Параметр | Описание |
|---|---|
| Interface | Сетевой интерфейс для захвата (WAN, LAN, OPTx, VPN) |
| Promiscuous | Захват всех пакетов на интерфейсе (не только адресованных pfSense) |
| Address Family | IPv4, IPv6 или оба |
| Protocol | Фильтр протокола: Any, ICMP, TCP, UDP, ARP, CARP и др. |
| Host Address | IP-адрес для фильтрации (источник или назначение) |
| Port | Порт для фильтрации (источник или назначение) |
| Packet Length | Максимальная длина захватываемого пакета (snaplen) |
| Count | Количество пакетов для захвата (0 - без ограничения) |
| Level of Detail | Уровень детализации вывода: Normal, Medium, High, Full |

### Выполнение захвата

1. Настроить параметры фильтрации
2. Нажать **Start** для начала захвата
3. Воспроизвести проблемный трафик
4. Нажать **Stop** для остановки захвата
5. Просмотреть результаты непосредственно на странице или скачать файл pcap

### Скачивание pcap

После остановки захвата файл pcap доступен для скачивания по ссылке на странице. Файл можно открыть в Wireshark для детального анализа с применением фильтров отображения, следованием за потоком TCP и декодированием протоколов прикладного уровня.

### Рекомендации по захвату

- Указывать максимально узкие фильтры (хост, порт, протокол) для сокращения объёма данных
- Устанавливать разумное ограничение Count для предотвращения переполнения памяти
- Для диагностики NAT выполнять захват одновременно на WAN и LAN интерфейсах (в двух вкладках браузера) для сравнения адресов до и после трансляции
- Для VPN-диагностики захватывать трафик на физическом интерфейсе (зашифрованный) и на виртуальном интерфейсе туннеля (расшифрованный)

## Command Prompt

Страница доступна через **Diagnostics > Command Prompt** и предоставляет возможность выполнения команд операционной системы и PHP-кода непосредственно из веб-интерфейса.

### Выполнение команд Shell

Поле **Execute Shell Command** позволяет запускать любые команды FreeBSD:

```bash
# Проверка загрузки процессора
top -b -n 1 | head -5

# Просмотр таблицы маршрутизации
netstat -rn

# Проверка сетевых интерфейсов
ifconfig -a

# Просмотр правил pf
pfctl -sr

# Проверка состояния служб
sockstat -l
```

### Выполнение PHP-команд

Поле **Execute PHP Command** позволяет запускать PHP-код с доступом к внутреннему API pfSense. Это используется для отладки конфигурации и выполнения операций, недоступных через стандартный интерфейс.

> **Внимание**:
>
> Command Prompt предоставляет полный доступ к системе с правами root. Некорректные команды могут вывести систему из строя. Следует использовать этот инструмент только при необходимости и с чётким пониманием выполняемых действий.

### Загрузка и скачивание файлов

Страница также предоставляет функции загрузки файлов на pfSense и скачивания файлов с устройства. Это полезно для передачи конфигурационных файлов, скриптов или результатов диагностики.

## System Activity

Страница доступна через **Diagnostics > System Activity** и отображает вывод утилиты `top` - список процессов, отсортированных по потреблению ресурсов.

### Отображаемые данные

- **Load Averages** - средняя нагрузка за 1, 5 и 15 минут
- **CPU Usage** - потребление CPU по категориям (user, system, interrupt, idle)
- **Memory Usage** - использование оперативной памяти
- **Swap Usage** - использование пространства подкачки
- **Process List** - список процессов с PID, пользователем, приоритетом, потреблением CPU и памяти

### Применение

- **Выявление ресурсоёмких процессов** - определение процессов, создающих чрезмерную нагрузку
- **Диагностика зависаний** - проверка состояния процессов (running, sleeping, zombie)
- **Мониторинг памяти** - контроль использования swap (активное использование swap указывает на нехватку RAM)

## S.M.A.R.T. Status

Страница доступна через **Diagnostics > S.M.A.R.T. Status** и отображает данные диагностики S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) для жёстких дисков и SSD.

### Доступные тесты

- **Info** - общая информация о диске: модель, серийный номер, прошивка, ёмкость
- **Health** - общая оценка здоровья диска (PASSED/FAILED)
- **SMART Attributes** - детальные атрибуты: температура, количество переназначенных секторов, часы работы, количество циклов включения
- **Logs** - журнал ошибок и результаты предыдущих тестов
- **Short/Long Self-Test** - запуск самодиагностики диска

Регулярная проверка S.M.A.R.T. позволяет обнаружить деградацию диска до его полного выхода из строя.

## Методология диагностики

Систематический подход к диагностике сетевых проблем в pfSense:

### Шаг 1: Определение симптомов

Определить характер проблемы: полная потеря связности, снижение производительности, периодические отказы, проблема с конкретным сервисом.

### Шаг 2: Проверка базовой связности

1. **Ping** шлюза из pfSense - проверяет работоспособность WAN-подключения
2. **Ping** целевого хоста из pfSense - проверяет маршрутизацию
3. **DNS Lookup** - проверяет разрешение имён

### Шаг 3: Анализ маршрута

1. **Traceroute** до целевого хоста - определяет точку обрыва маршрута
2. Выбор правильного Source Address для проверки маршрутизации через конкретный интерфейс

### Шаг 4: Проверка файрвола

1. **States** - проверить наличие или отсутствие записи состояния для проблемного соединения
2. **Системные логи (Firewall)** - проверить, не блокируется ли трафик правилами файрвола
3. **pfInfo** - проверить, не достигнут ли лимит таблицы состояний

### Шаг 5: Углублённый анализ

1. **Packet Capture** - захватить трафик на интерфейсах для анализа на уровне пакетов
2. **pfTop** - проверить активные соединения в реальном времени
3. **ARP Table** - проверить разрешение адресов на канальном уровне

### Шаг 6: Анализ ресурсов

1. **System Activity** - проверить нагрузку на CPU и память
2. **S.M.A.R.T.** - проверить здоровье дисков
3. **Dashboard** - оценить общее состояние системы

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

- [Графики мониторинга pfSense](/docs/pfsense/monitoring/pfsense-monitoring-graphs/) - визуализация исторических данных производительности для выявления трендов
- [Системные логи pfSense](/docs/pfsense/monitoring/pfsense-system-logs/) - журналы событий для детального анализа инцидентов
- [Правила файрвола pfSense](/docs/pfsense/firewall/pfsense-firewall-rules/) - настройка правил фильтрации, влияющих на результаты диагностики

