# Troubleshooting (Устранение неполадок)

> Руководство по диагностике VyOS: устранение неполадок сети, packet capture, проблемы VPN, routing, производительность для Yandex Cloud и VK Cloud

Source: https://opennix.org/docs/vyos/admin-guide/vyos-troubleshooting/


Систематическое руководство по диагностике и устранению неполадок в VyOS. Это руководство охватывает общие проблемы, методологию troubleshooting и практические решения для всех основных компонентов системы.

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

### Систематический подход

**Шаг 1: Определение проблемы**
- Точное описание симптомов
- Воспроизводимость проблемы
- Время возникновения (после изменений, спонтанно)
- Влияние на пользователей/сервисы

**Шаг 2: Сбор информации**
- Системные логи
- Конфигурация устройства
- Статус компонентов
- Сетевая топология

**Шаг 3: Анализ**
- Корреляция событий
- Проверка гипотез
- Изоляция проблемы

**Шаг 4: Решение**
- Применение исправления
- Проверка результата
- Документирование решения

**Шаг 5: Профилактика**
- Анализ первопричины
- Предотвращение повторения
- Обновление процедур

### Инструменты диагностики

```bash
# Базовый набор команд для первичной диагностики
show version                        # Версия системы
show configuration                  # Текущая конфигурация
show interfaces                     # Статус интерфейсов
show ip route                       # Таблица маршрутизации
show log tail 100                   # Последние 100 строк логов
show system uptime                  # Время работы системы
show system resources               # Использование ресурсов

# Расширенная диагностика
monitor log                         # Мониторинг логов в реальном времени
monitor traffic interface eth0      # Захват трафика
show conntrack table ipv4           # Таблица соединений
show vpn ipsec sa                   # Статус IPsec туннелей
show dhcp server leases             # DHCP аренды
```

## Проблемы с сетевым подключением

### Проблема: Нет связи с удаленным хостом

#### Диагностика

```bash
# Шаг 1: Проверить статус локального интерфейса
show interfaces
show interfaces ethernet eth0

# Шаг 2: Проверить IP конфигурацию
show interfaces addresses

# Шаг 3: Проверить маршрутизацию
show ip route
show ip route 8.8.8.8

# Шаг 4: Проверить connectivity
ping 8.8.8.8
ping 8.8.8.8 source-address <your-ip>

# Шаг 5: Трассировка маршрута
traceroute 8.8.8.8

# Шаг 6: Проверить DNS
nslookup google.com
```

#### Типичные причины и решения

**Причина 1: Интерфейс down**

```bash
# Проверить статус
show interfaces ethernet eth0

# Если интерфейс administratively down
configure
delete interfaces ethernet eth0 disable
commit
save
exit

# Проверить физическое подключение
show interfaces ethernet eth0 physical
```

**Причина 2: Неверная конфигурация IP адреса**

```bash
# Проверить текущую конфигурацию
show interfaces ethernet eth0 address

# Исправить IP адрес
configure
set interfaces ethernet eth0 address 192.168.1.1/24
commit
save
exit

# Проверить результат
show interfaces addresses
ping 192.168.1.254  # Gateway
```

**Причина 3: Отсутствует маршрут**

```bash
# Проверить маршрут до целевой сети
show ip route 8.8.8.8

# Добавить default route если отсутствует
configure
set protocols static route 0.0.0.0/0 next-hop 192.168.1.254
commit
save
exit

# Проверить маршрутизацию
show ip route
ping 8.8.8.8
```

**Причина 4: Firewall блокирует трафик**

```bash
# Проверить правила firewall
show firewall

# Проверить счетчики на правилах
show firewall statistics

# Временно отключить firewall для теста
configure
set firewall all-ping enable
set firewall state-policy established action accept
set firewall state-policy related action accept
commit

# Проверить connectivity
ping 8.8.8.8

# Если помогло - настроить firewall правильно
set firewall name WAN_LOCAL default-action drop
set firewall name WAN_LOCAL rule 10 action accept
set firewall name WAN_LOCAL rule 10 state established enable
set firewall name WAN_LOCAL rule 10 state related enable
commit
save
```

**Причина 5: MTU проблемы**

```bash
# Проверить MTU
show interfaces ethernet eth0

# Тест с разными размерами пакетов
ping 8.8.8.8 size 1472 do-not-fragment  # 1472 + 28 = 1500
ping 8.8.8.8 size 1400 do-not-fragment

# Если большие пакеты не проходят - уменьшить MTU
configure
set interfaces ethernet eth0 mtu 1400
commit
save

# Для PPPoE обычно требуется MTU 1492
set interfaces ethernet eth0 mtu 1492
```

### Проблема: Медленная работа сети

#### Диагностика производительности

```bash
# Проверить загрузку интерфейсов
show interfaces
show interfaces counters

# Проверить ошибки на интерфейсах
show interfaces ethernet eth0 statistics

# Проверить дуплекс и скорость
show interfaces ethernet eth0 physical

# Мониторинг трафика
monitor traffic interface eth0

# Проверить системные ресурсы
show system cpu
show system memory
show system storage
```

#### Типичные причины и решения

**Причина 1: Несоответствие дуплекса**

```bash
# Проверить текущие настройки
show interfaces ethernet eth0 physical

# Если auto-negotiation не работает - задать вручную
configure
set interfaces ethernet eth0 duplex full
set interfaces ethernet eth0 speed 1000
commit
save

# Перезапустить интерфейс
sudo ip link set eth0 down
sudo ip link set eth0 up
```

**Причина 2: Высокая загрузка CPU**

```bash
# Проверить загрузку CPU
show system cpu
show system processes

# Определить процессы-потребители
top

# Если высокая нагрузка от conntrack
show conntrack table ipv4 | wc -l

# Увеличить conntrack table size
configure
set system conntrack table-size 262144
commit
save

# Оптимизировать timeouts
set system conntrack timeout tcp established 432000
set system conntrack timeout tcp close 10
```

**Причина 3: QoS ограничения**

```bash
# Проверить QoS политики
show qos

# Проверить применение политик
show qos interface eth0

# Временно отключить QoS для теста
configure
delete traffic-policy
delete interfaces ethernet eth0 traffic-policy
commit

# Если помогло - пересмотреть QoS конфигурацию
```

**Причина 4: DNS проблемы**

```bash
# Проверить DNS резолвинг
nslookup google.com
dig google.com

# Проверить время ответа DNS
time nslookup google.com

# Если медленно - изменить DNS серверы
configure
set system name-server 8.8.8.8
set system name-server 8.8.4.4
commit
save

# Для DNS forwarding - проверить кэш
show dns forwarding statistics
reset dns forwarding cache
```

## Проблемы с VPN

### Проблема: IPsec туннель не поднимается

#### Диагностика IPsec

```bash
# Проверить статус IPsec
show vpn ipsec sa
show vpn ipsec status

# Детальная информация о туннелях
show vpn ipsec sa detail

# Проверить конфигурацию
show configuration vpn ipsec

# Логи IPsec
show log vpn ipsec
monitor log | match ipsec
```

#### Типичные причины и решения

**Причина 1: Несоответствие параметров IKE/ESP**

```bash
# Проверить параметры на обеих сторонах
show configuration vpn ipsec ike-group
show configuration vpn ipsec esp-group

# Типичная рабочая конфигурация
configure
set vpn ipsec ike-group IKE-SITE proposal 1 encryption aes256
set vpn ipsec ike-group IKE-SITE proposal 1 hash sha256
set vpn ipsec ike-group IKE-SITE proposal 1 dh-group 14
set vpn ipsec ike-group IKE-SITE lifetime 28800

set vpn ipsec esp-group ESP-SITE proposal 1 encryption aes256
set vpn ipsec esp-group ESP-SITE proposal 1 hash sha256
set vpn ipsec esp-group ESP-SITE lifetime 3600
set vpn ipsec esp-group ESP-SITE pfs dh-group14

commit
save

# Перезапустить IPsec
sudo ipsec restart
```

**Причина 2: Неверный Pre-Shared Key**

```bash
# Проверить конфигурацию PSK (пароль не отображается)
show configuration vpn ipsec site-to-site peer <peer-ip> authentication

# Обновить PSK
configure
set vpn ipsec site-to-site peer <peer-ip> authentication pre-shared-secret 'new-secret'
commit
save

# Перезапустить туннель
reset vpn ipsec-peer <peer-ip>
```

**Причина 3: Firewall блокирует IPsec трафик**

```bash
# IPsec требует UDP 500 (IKE) и UDP 4500 (NAT-T)
# Также ESP (протокол 50)

configure
# Разрешить IKE
set firewall name WAN_LOCAL rule 100 action accept
set firewall name WAN_LOCAL rule 100 protocol udp
set firewall name WAN_LOCAL rule 100 destination port 500

# Разрешить NAT-T
set firewall name WAN_LOCAL rule 101 action accept
set firewall name WAN_LOCAL rule 101 protocol udp
set firewall name WAN_LOCAL rule 101 destination port 4500

# Разрешить ESP
set firewall name WAN_LOCAL rule 102 action accept
set firewall name WAN_LOCAL rule 102 protocol esp

commit
save
```

**Причина 4: NAT конфликт**

```bash
# Проверить NAT правила
show nat source

# IPsec трафик не должен проходить через NAT
# Добавить exclude правило
configure
set nat source rule 100 outbound-interface eth0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 destination address 192.168.2.0/24  # Remote network
set nat source rule 100 exclude

commit
save
```

**Причина 5: Неверные subnet конфигурации**

```bash
# Проверить local и remote prefixes
show configuration vpn ipsec site-to-site peer <peer-ip> tunnel

# Исправить если неверно
configure
set vpn ipsec site-to-site peer <peer-ip> tunnel 1 local prefix 192.168.1.0/24
set vpn ipsec site-to-site peer <peer-ip> tunnel 1 remote prefix 192.168.2.0/24
commit
save

# Перезапустить туннель
reset vpn ipsec-peer <peer-ip>

# Проверить статус
show vpn ipsec sa
```

### Проблема: WireGuard не работает

#### Диагностика WireGuard

```bash
# Проверить статус интерфейса
show interfaces wireguard wg0

# Проверить peers
show interfaces wireguard wg0 summary

# Проверить handshake
show interfaces wireguard wg0 detail

# Проверить конфигурацию
show configuration interfaces wireguard wg0
```

#### Решения для WireGuard

**Причина 1: Неверные публичные ключи**

```bash
# Сгенерировать новые ключи
generate wireguard default-keypair

# Получить публичный ключ для передачи peer
show wireguard keypairs pubkey default

# Установить публичный ключ peer
configure
set interfaces wireguard wg0 peer <peer-name> public-key '<peer-public-key>'
commit
save
```

**Причина 2: Firewall блокирует WireGuard**

```bash
# WireGuard использует UDP (обычно 51820)
configure
set firewall name WAN_LOCAL rule 200 action accept
set firewall name WAN_LOCAL rule 200 protocol udp
set firewall name WAN_LOCAL rule 200 destination port 51820
commit
save
```

**Причина 3: Нет handshake с peer**

```bash
# Проверить endpoint peer
show configuration interfaces wireguard wg0 peer <peer-name>

# Проверить persistent-keepalive
configure
set interfaces wireguard wg0 peer <peer-name> persistent-keepalive 25
commit
save

# Принудительно инициировать соединение
ping <peer-wg-ip>
```

## Проблемы с маршрутизацией

### Проблема: BGP соседство не устанавливается

#### Диагностика BGP

```bash
# Проверить BGP neighbors
show ip bgp summary
show ip bgp neighbors
show ip bgp neighbors <neighbor-ip> advertised-routes
show ip bgp neighbors <neighbor-ip> received-routes

# Проверить BGP конфигурацию
show configuration protocols bgp

# BGP логи
show log | match bgp
```

#### Решения для BGP

**Причина 1: TCP connectivity отсутствует**

```bash
# BGP использует TCP 179
# Проверить connectivity
telnet <neighbor-ip> 179

# Проверить firewall
configure
set firewall name WAN_LOCAL rule 300 action accept
set firewall name WAN_LOCAL rule 300 protocol tcp
set firewall name WAN_LOCAL rule 300 destination port 179
commit
save

# Проверить маршрут до neighbor
show ip route <neighbor-ip>
```

**Причина 2: Неверные параметры BGP**

```bash
# Проверить ASN на обеих сторонах
show configuration protocols bgp

# Проверить remote-as
show configuration protocols bgp <local-asn> neighbor <neighbor-ip>

# Исправить если неверно
configure
set protocols bgp <local-asn> neighbor <neighbor-ip> remote-as <correct-remote-asn>
commit
save

# Сбросить BGP session
reset ip bgp <neighbor-ip>
```

**Причина 3: MD5 authentication не совпадает**

```bash
# Проверить MD5 password
show configuration protocols bgp <asn> neighbor <neighbor-ip> password

# Обновить password (должен совпадать с peer)
configure
set protocols bgp <asn> neighbor <neighbor-ip> password 'correct-password'
commit
save

# Сбросить session
reset ip bgp <neighbor-ip>
```

**Причина 4: TTL security**

```bash
# Для eBGP multihop
configure
set protocols bgp <asn> neighbor <neighbor-ip> ebgp-multihop 2
commit
save

# Для TTL security
set protocols bgp <asn> neighbor <neighbor-ip> ttl-security hops 1
```

### Проблема: OSPF adjacency не формируется

#### Диагностика OSPF

```bash
# Проверить OSPF neighbors
show ip ospf neighbor
show ip ospf neighbor detail

# Проверить OSPF интерфейсы
show ip ospf interface

# Проверить OSPF database
show ip ospf database

# OSPF конфигурация
show configuration protocols ospf
```

#### Решения для OSPF

**Причина 1: Несоответствие area**

```bash
# Проверить area на обеих сторонах
show configuration protocols ospf area

# Исправить area
configure
set protocols ospf area 0 network 192.168.1.0/24
commit
save
```

**Причина 2: Hello/Dead intervals не совпадают**

```bash
# Проверить интервалы
show ip ospf interface eth1

# Установить интервалы (должны совпадать на обеих сторонах)
configure
set protocols ospf interface eth1 hello-interval 10
set protocols ospf interface eth1 dead-interval 40
commit
save
```

**Причина 3: Authentication mismatch**

```bash
# Настроить MD5 authentication (должен быть одинаковый на обеих сторонах)
configure
set protocols ospf area 0 authentication md5
set protocols ospf interface eth1 authentication md5 key-id 1 md5-key 'password'
commit
save
```

**Причина 4: Passive interface**

```bash
# Проверить passive interfaces
show configuration protocols ospf passive-interface

# Если интерфейс passive - удалить
configure
delete protocols ospf passive-interface eth1
commit
save
```

## Проблемы с DHCP

### Проблема: DHCP клиенты не получают адреса

#### Диагностика DHCP Server

```bash
# Проверить статус DHCP сервера
show service dhcp-server

# Проверить активные аренды
show dhcp server leases

# Проверить статистику
show dhcp server statistics

# Проверить конфигурацию
show configuration service dhcp-server

# Логи DHCP
show log dhcp
monitor log | match dhcp
```

#### Решения для DHCP

**Причина 1: DHCP сервис не запущен**

```bash
# Проверить сервис
show service dhcp-server

# Запустить сервис
sudo systemctl restart isc-dhcp-server  # VyOS 1.4
sudo systemctl restart kea-dhcp4-server  # VyOS 1.5

# Проверить статус
sudo systemctl status isc-dhcp-server  # VyOS 1.4
sudo systemctl status kea-dhcp4-server  # VyOS 1.5
```

**Причина 2: Неверная конфигурация subnet**

```bash
# Проверить subnet конфигурацию
show configuration service dhcp-server shared-network-name LAN

# Исправить subnet
configure
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 default-router 192.168.1.1
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 name-server 8.8.8.8
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 range 0 start 192.168.1.100
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 range 0 stop 192.168.1.200
commit
save
```

**Причина 3: Pool исчерпан**

```bash
# Проверить количество аренд
show dhcp server leases

# Подсчитать активные аренды
show dhcp server leases | grep "^IP" | wc -l

# Расширить pool
configure
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 range 0 stop 192.168.1.250
commit
save
```

**Причина 4: Firewall блокирует DHCP**

```bash
# DHCP использует UDP 67 (server) и 68 (client)
configure
set firewall name LAN_LOCAL rule 400 action accept
set firewall name LAN_LOCAL rule 400 protocol udp
set firewall name LAN_LOCAL rule 400 destination port 67
set firewall name LAN_LOCAL rule 400 source port 68

commit
save
```

**Причина 5: Static mapping конфликт (VyOS 1.5 Kea)**

```bash
# В VyOS 1.5 Kea требует IP или hostname в дополнение к MAC
configure
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 static-mapping workstation mac '00:11:22:33:44:55'
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 static-mapping workstation ip-address '192.168.1.50'
commit
save
```

### Проблема: DHCP клиент не получает адрес на WAN

#### Диагностика DHCP Client

```bash
# Проверить статус интерфейса
show interfaces ethernet eth0

# Проверить DHCP lease
show dhcp client leases

# Попробовать обновить lease
release dhcp interface eth0
renew dhcp interface eth0

# Логи
show log | match eth0
```

#### Решения для DHCP Client

**Причина 1: Интерфейс не настроен на DHCP**

```bash
configure
set interfaces ethernet eth0 address dhcp
commit
save
```

**Причина 2: DHCP клиент не отправляет запросы**

```bash
# Захватить трафик для проверки
sudo tcpdump -i eth0 port 67 or port 68 -v

# Если нет DHCP Discover - перезапустить интерфейс
configure
delete interfaces ethernet eth0 disable
set interfaces ethernet eth0 disable
commit
delete interfaces ethernet eth0 disable
commit
save
```

## Проблемы с производительностью

### Проблема: Высокая загрузка CPU

#### Диагностика CPU

```bash
# Проверить загрузку CPU
show system cpu
show system cpu detailed

# Топ процессов
show system processes

# Детальная информация о процессах
top
```

#### Решения для CPU

**Причина 1: Большая conntrack таблица**

```bash
# Проверить размер conntrack table
show conntrack table ipv4 | wc -l

# Проверить лимит
sudo sysctl net.netfilter.nf_conntrack_max

# Увеличить лимит
configure
set system conntrack table-size 262144
commit
save

# Оптимизировать timeouts
set system conntrack timeout tcp close 10
set system conntrack timeout tcp time-wait 60
commit
save

# Применить немедленно
sudo sysctl -w net.netfilter.nf_conntrack_max=262144
```

**Причина 2: Интенсивное логирование**

```bash
# Проверить размер логов
show log
du -sh /var/log/

# Уменьшить уровень логирования
configure
set system syslog global facility all level warning
commit
save

# Удалить старые логи
sudo find /var/log -name "*.log" -mtime +30 -delete
```

**Причина 3: Много BGP prefixes**

```bash
# Проверить количество BGP prefixes
show ip bgp summary

# Применить prefix filtering
configure
set policy prefix-list BGP-IN rule 10 action permit
set policy prefix-list BGP-IN rule 10 prefix 0.0.0.0/0
set policy prefix-list BGP-IN rule 10 le 24

set policy route-map BGP-FILTER rule 10 action permit
set policy route-map BGP-FILTER rule 10 match ip address prefix-list BGP-IN

set protocols bgp <asn> neighbor <neighbor-ip> address-family ipv4-unicast route-map import BGP-FILTER

commit
save
```

### Проблема: Высокое использование памяти

#### Диагностика памяти

```bash
# Проверить использование памяти
show system memory

# Детальная информация
free -h
cat /proc/meminfo

# Процессы по использованию памяти
ps aux --sort=-%mem | head -20
```

#### Решения для памяти

**Причина 1: Большой кэш**

```bash
# Проверить кэш
free -h

# Очистить page cache (безопасно)
sudo sync
sudo sysctl -w vm.drop_caches=1

# Очистить dentries и inodes
sudo sysctl -w vm.drop_caches=2

# Очистить всё
sudo sysctl -w vm.drop_caches=3
```

**Причина 2: DNS forwarding cache слишком большой**

```bash
# Проверить размер DNS кэша
show dns forwarding statistics

# Уменьшить размер кэша
configure
set service dns forwarding cache-size 1000
commit
save

# Очистить DNS кэш
reset dns forwarding cache
```

**Причина 3: Утечка памяти**

```bash
# Определить процесс с утечкой
ps aux --sort=-%mem | head -10

# Если проблема в VyOS процессе - перезапустить
sudo systemctl restart frr  # Для routing daemons
sudo systemctl restart vyos-configd  # Для config daemon

# В крайнем случае - reboot
reboot now
```

### Проблема: Высокая задержка (latency)

#### Диагностика задержки

```bash
# Проверить ping latency
ping 8.8.8.8
ping <local-gateway>

# Проверить buffer bloat
show qos interface eth0

# Мониторить задержку
mtr 8.8.8.8
```

#### Решения для задержки

**Причина 1: Buffer bloat**

```bash
# Применить fq_codel QoS
configure
set traffic-policy shaper WAN bandwidth 100mbit
set traffic-policy shaper WAN default bandwidth 100%
set traffic-policy shaper WAN default queue-type fq-codel

set interfaces ethernet eth0 traffic-policy out WAN

commit
save
```

**Причина 2: Высокая загрузка канала**

```bash
# Проверить загрузку интерфейсов
show interfaces

# Применить QoS приоритизацию
configure
set traffic-policy shaper WAN class 10 bandwidth 30%
set traffic-policy shaper WAN class 10 priority 1
set traffic-policy shaper WAN class 10 match VOIP ip dscp ef

set traffic-policy shaper WAN class 20 bandwidth 40%
set traffic-policy shaper WAN class 20 priority 2
set traffic-policy shaper WAN class 20 match INTERACTIVE ip dscp af21

commit
save
```

## Проблемы с системой

### Проблема: Конфигурация не сохраняется

#### Диагностика

```bash
# Проверить текущую конфигурацию
show configuration

# Проверить saved конфигурацию
show configuration saved

# Сравнить
compare saved
```

#### Решения

**Причина 1: Забыли выполнить save**

```bash
# Всегда после commit
commit
save
```

**Причина 2: Нет места на диске**

```bash
# Проверить место на диске
show system storage

# Если нет места - очистить
sudo apt-get clean
sudo apt-get autoclean
delete system image <old-version>

# Удалить старые логи
sudo find /var/log -name "*.gz" -delete
```

**Причина 3: Проблемы с файловой системой**

```bash
# Проверить файловую систему (только в maintenance mode)
# Reboot в single user mode
sudo fsck /dev/sda1
```

### Проблема: Система не загружается после изменений

#### Решение: Загрузка с backup конфигурации

```bash
# При загрузке в GRUB меню
# Выбрать: VyOS (config file: /config/config.boot.backup)

# После загрузки - восстановить конфигурацию
configure
load /config/config.boot.backup
commit
save
```

#### Решение: Сброс конфигурации

```bash
# В operational mode
load /opt/vyatta/etc/config.boot.default
commit
save
reboot
```

### Проблема: Высокая температура / Hardware проблемы

#### Диагностика hardware

```bash
# Температура (если доступно sensors)
show hardware cpu
show hardware temperature

# Проверить системные логи на hardware errors
show log | match error
show log | match hardware

# Дополнительные инструменты
sudo sensors
sudo dmesg | grep -i error
```

#### Решения

**Причина 1: Высокая температура CPU**

```bash
# Проверить вентиляторы (physical)
# Проверить загрузку CPU
show system cpu

# Снизить нагрузку если возможно
# Проверить cooling system физически
```

**Причина 2: Disk errors**

```bash
# Проверить S.M.A.R.T.
sudo smartctl -a /dev/sda

# Проверить filesystem errors
dmesg | grep -i "I/O error"

# Backup конфигурации немедленно
show configuration commands | sudo tee /tmp/config-backup.txt

# Планировать замену диска
```

## Проблемы с сервисами

### Проблема: SSH не доступен

#### Диагностика SSH

```bash
# Проверить SSH сервис (из консоли)
show service ssh

# Проверить конфигурацию
show configuration service ssh

# Проверить процесс
sudo systemctl status ssh

# Проверить порт
sudo netstat -tlnp | grep ssh
```

#### Решения для SSH

**Причина 1: SSH сервис отключен**

```bash
configure
delete service ssh disable
commit
save

# Проверить
show service ssh
```

**Причина 2: Firewall блокирует SSH**

```bash
configure
set firewall name WAN_LOCAL rule 500 action accept
set firewall name WAN_LOCAL rule 500 protocol tcp
set firewall name WAN_LOCAL rule 500 destination port 22
commit
save
```

**Причина 3: Неверный listen address**

```bash
# SSH должен слушать на правильном интерфейсе
configure
set service ssh listen-address 0.0.0.0
commit
save

# Перезапустить SSH
sudo systemctl restart ssh
```

### Проблема: NTP не синхронизируется

#### Диагностика NTP

```bash
# Проверить NTP status
show ntp

# Проверить NTP servers
show configuration service ntp

# Детальная информация
sudo ntpq -p
```

#### Решения для NTP

**Причина 1: Нет connectivity до NTP серверов**

```bash
# Проверить доступность NTP серверов
ping 0.pool.ntp.org
ping 1.pool.ntp.org

# Проверить UDP 123
sudo tcpdump -i eth0 udp port 123 -v
```

**Причина 2: Firewall блокирует NTP**

```bash
configure
set firewall name WAN_LOCAL rule 600 action accept
set firewall name WAN_LOCAL rule 600 protocol udp
set firewall name WAN_LOCAL rule 600 destination port 123

# Также разрешить outbound
set firewall name WAN_OUT rule 600 action accept
set firewall name WAN_OUT rule 600 protocol udp
set firewall name WAN_OUT rule 600 destination port 123

commit
save
```

**Причина 3: Неверная timezone**

```bash
# Установить правильную timezone
configure
set system time-zone Europe/Moscow
commit
save

# Перезапустить NTP
sudo systemctl restart ntp
```

## Сбор диагностической информации

### Полный набор диагностики для support ticket

```bash
#!/bin/vbash
# Скрипт сбора диагностической информации

TIMESTAMP=$(date +%Y%m%d-%H%M%S)
OUTPUT_DIR="/tmp/vyos-diag-${TIMESTAMP}"
mkdir -p "${OUTPUT_DIR}"

echo "Collecting diagnostic information..."

# Системная информация
show version > "${OUTPUT_DIR}/version.txt"
show system uptime > "${OUTPUT_DIR}/uptime.txt"
show system storage > "${OUTPUT_DIR}/storage.txt"
show system memory > "${OUTPUT_DIR}/memory.txt"
show system cpu > "${OUTPUT_DIR}/cpu.txt"

# Конфигурация
show configuration > "${OUTPUT_DIR}/configuration.txt"
show configuration commands > "${OUTPUT_DIR}/configuration-commands.txt"

# Интерфейсы
show interfaces > "${OUTPUT_DIR}/interfaces.txt"
show interfaces addresses > "${OUTPUT_DIR}/interfaces-addresses.txt"

# Маршрутизация
show ip route > "${OUTPUT_DIR}/ip-route.txt"
show ipv6 route > "${OUTPUT_DIR}/ipv6-route.txt"

# BGP (если используется)
show ip bgp summary > "${OUTPUT_DIR}/bgp-summary.txt" 2>/dev/null
show ip bgp neighbors > "${OUTPUT_DIR}/bgp-neighbors.txt" 2>/dev/null

# OSPF (если используется)
show ip ospf neighbor > "${OUTPUT_DIR}/ospf-neighbors.txt" 2>/dev/null

# VPN
show vpn ipsec sa > "${OUTPUT_DIR}/ipsec-sa.txt" 2>/dev/null
show interfaces wireguard > "${OUTPUT_DIR}/wireguard.txt" 2>/dev/null

# Firewall
show firewall > "${OUTPUT_DIR}/firewall.txt"
show firewall statistics > "${OUTPUT_DIR}/firewall-stats.txt"

# NAT
show nat source statistics > "${OUTPUT_DIR}/nat-stats.txt"

# Services
show dhcp server leases > "${OUTPUT_DIR}/dhcp-leases.txt" 2>/dev/null
show dns forwarding statistics > "${OUTPUT_DIR}/dns-stats.txt" 2>/dev/null

# Логи (последние 500 строк)
show log tail 500 > "${OUTPUT_DIR}/system-log.txt"

# Conntrack
show conntrack table ipv4 | head -100 > "${OUTPUT_DIR}/conntrack-sample.txt"

# Архивировать
cd /tmp
tar czf "vyos-diag-${TIMESTAMP}.tar.gz" "vyos-diag-${TIMESTAMP}/"

echo "Diagnostic information collected:"
echo "/tmp/vyos-diag-${TIMESTAMP}.tar.gz"
ls -lh "/tmp/vyos-diag-${TIMESTAMP}.tar.gz"

echo ""
echo "You can download this file with SCP:"
echo "scp vyos@router-ip:/tmp/vyos-diag-${TIMESTAMP}.tar.gz ."
```

### Сохранить скрипт и использовать

```bash
# Сохранить скрипт
sudo vi /config/scripts/collect-diag.sh
# Вставить код выше
sudo chmod +x /config/scripts/collect-diag.sh

# Запустить
sudo /config/scripts/collect-diag.sh
```

## Лучшие практики troubleshooting

### Общие рекомендации

1. **Всегда создавайте backup перед изменениями**
```bash
save /config/config.boot.backup-$(date +%Y%m%d)
```

2. **Используйте commit-confirm для критичных изменений**
```bash
commit-confirm 5  # Auto-rollback через 5 минут если не confirm
# Тестируем изменения
confirm  # Если всё OK
# Или просто ждём 5 минут для auto-rollback
```

3. **Документируйте изменения**
```bash
commit comment "Added firewall rule for SSH access from office"
```

4. **Используйте compare для проверки изменений**
```bash
compare  # Сравнить с running config
compare saved  # Сравнить с saved config
```

5. **Мониторьте логи во время troubleshooting**
```bash
monitor log  # В отдельной SSH сессии
```

6. **Тестируйте изменения поэтапно**
```bash
# Применяйте изменения по одному
set ...
commit
# Проверяем
# Следующее изменение
```

7. **Сохраняйте рабочую конфигурацию регулярно**
```bash
save
save /config/config.boot.working
```

8. **Используйте rollback при необходимости**
```bash
rollback 1  # Откат на 1 commit назад
rollback 2  # Откат на 2 commits назад
```

9. **Ведите журнал изменений**
```bash
# Создать файл CHANGELOG
sudo vi /config/CHANGELOG
# Записывать все значимые изменения
```

10. **Автоматизируйте сбор диагностики**
```bash
# Создать cron задачу для ежедневного backup конфигурации
set system task-scheduler task daily-backup executable path /config/scripts/daily-backup.sh
set system task-scheduler task daily-backup interval 1d
```

### Контрольный список для критичных проблем

**При потере connectivity:**
- [ ] Проверить physical link
- [ ] Проверить IP адресацию
- [ ] Проверить маршрутизацию
- [ ] Проверить firewall rules
- [ ] Проверить NAT rules (если применимо)
- [ ] Проверить MTU
- [ ] Проверить ARP таблицу

**При проблемах с VPN:**
- [ ] Проверить connectivity до peer
- [ ] Проверить firewall (UDP 500, 4500, ESP)
- [ ] Проверить IKE/ESP параметры
- [ ] Проверить PSK/certificates
- [ ] Проверить NAT exclude rules
- [ ] Проверить routing через VPN

**При проблемах с routing protocols:**
- [ ] Проверить adjacency/peering
- [ ] Проверить authentication
- [ ] Проверить timers/intervals
- [ ] Проверить ACLs/prefix-lists
- [ ] Проверить route-maps
- [ ] Проверить redistribution

**При проблемах с производительностью:**
- [ ] Проверить CPU usage
- [ ] Проверить memory usage
- [ ] Проверить disk space
- [ ] Проверить interface statistics (errors, drops)
- [ ] Проверить conntrack table size
- [ ] Проверить QoS policies
- [ ] Проверить hardware (temperature, fans)

## Полезные ресурсы

### Официальная документация
- VyOS Documentation: https://docs.vyos.io/
- VyOS Wiki: https://wiki.vyos.net/
- VyOS Forum: https://forum.vyos.io/

### Сообщество
- VyOS Slack: https://vyos.slack.com/
- VyOS Reddit: https://www.reddit.com/r/vyos/
- GitHub Issues: https://github.com/vyos/vyos-1x/issues

### Полезные команды для справки

```bash
# Поиск команд
find /configure/

# Help по команде
help <command>

# Автодополнение
<Tab>

# История команд
history

# Очистка экрана
clear
```

## Заключение

Эффективное устранение неполадок в VyOS требует:

- **Систематического подхода**: Следование методологии от симптомов к решению
- **Знания инструментов**: Использование правильных диагностических команд
- **Опыта**: Понимание типичных проблем и их решений
- **Документирования**: Ведение журнала изменений и решений
- **Превентивности**: Мониторинг и профилактика проблем

Используйте это руководство как справочник при возникновении проблем, но также развивайте навыки анализа и диагностики для решения нестандартных ситуаций.

