# IP параметры системы VyOS

> Настройка системных IP-параметров в VyOS: ARP таблицы, IP forwarding, multipath routing, ECMP балансировка и TCP/UDP настройки для Yandex Cloud и VK Cloud

Source: https://opennix.org/docs/vyos/system/vyos-ip/



Системные настройки IP и IPv6 в VyOS позволяют управлять параметрами сетевого стека, оптимизировать производительность и настраивать специфичное поведение протоколов IPv4 и IPv6 на уровне ядра операционной системы.

## Основные возможности

- **IPv4 параметры**: Управление IP forwarding, ARP, ICMP, RP filter
- **IPv6 параметры**: Настройка IPv6 forwarding, Router Advertisement, privacy extensions
- **Multipath routing**: Балансировка трафика между несколькими путями
- **ARP настройки**: Контроль разрешения адресов, ARP cache
- **TCP/IP параметры**: Оптимизация TCP для производительности
- **ICMP настройки**: Контроль ответов на ping и другие ICMP сообщения
- **Source validation**: Защита от IP spoofing через RP filter

## IPv4 Configuration

### IP Forwarding

```bash
# Включить IP forwarding (по умолчанию включено на VyOS)
set system ip disable-forwarding

# IP forwarding включен по умолчанию, эта команда ОТКЛЮЧАЕТ его
# Для роутера должен быть включен - НЕ использовать эту команду
```

**Примечание**: VyOS по умолчанию работает как роутер с включенным IP forwarding. Команда `disable-forwarding` используется только для специальных случаев (например, firewall без маршрутизации).

### ARP Settings

```bash
# Настроить ARP cache timeout (по умолчанию 30 секунд)
set system ip arp table-size 8192

# Ignore ARP requests для адресов, не настроенных локально
set system ip arp-reply-mode restricted

commit
save
```

**ARP Modes**:
- `restricted`: Отвечать только на ARP для локальных IP
- `reply-any`: Отвечать на ARP для любых IP (по умолчанию)

### Disable ICMP Redirects

```bash
# Отключить отправку ICMP redirects
set system ip disable-icmp-redirect

commit
save
```

**Применение**: Повышает безопасность, предотвращает манипуляцию маршрутизацией клиентов.

### Multipath Routing

```bash
# Включить балансировку между равноценными путями
set system ip multipath layer4-hashing

commit
save
```

**Layer4-hashing**: Использует source IP, destination IP, protocol, source port, destination port для распределения трафика. Обеспечивает сохранение порядка пакетов для одной сессии.

### IP Source Validation (RP Filter)

```bash
# Включить Reverse Path Filtering для защиты от spoofing
set system ip source-validation strict

commit
save
```

**Modes**:
- `strict`: Проверять, что входящий пакет пришел с интерфейса, куда есть маршрут к source IP (RFC 3704)
- `loose`: Проверять только наличие маршрута к source IP в таблице маршрутизации
- Отсутствует (по умолчанию): RP filter отключен

### Ignore Bogons (RFC 1918, RFC 5735)

```bash
# Отключить прием пакетов с bogon источниками на внешнем интерфейсе
# Реализуется через firewall
set firewall group network-group BOGONS network 0.0.0.0/8
set firewall group network-group BOGONS network 10.0.0.0/8
set firewall group network-group BOGONS network 100.64.0.0/10
set firewall group network-group BOGONS network 127.0.0.0/8
set firewall group network-group BOGONS network 169.254.0.0/16
set firewall group network-group BOGONS network 172.16.0.0/12
set firewall group network-group BOGONS network 192.0.0.0/24
set firewall group network-group BOGONS network 192.0.2.0/24
set firewall group network-group BOGONS network 192.168.0.0/16
set firewall group network-group BOGONS network 198.18.0.0/15
set firewall group network-group BOGONS network 198.51.100.0/24
set firewall group network-group BOGONS network 203.0.113.0/24
set firewall group network-group BOGONS network 224.0.0.0/4
set firewall group network-group BOGONS network 240.0.0.0/4

set firewall name WAN_IN rule 10 action drop
set firewall name WAN_IN rule 10 source group network-group BOGONS
set firewall name WAN_IN rule 10 description 'Drop bogon sources'

commit
save
```

## IPv6 Configuration

### IPv6 Forwarding

```bash
# Включить IPv6 forwarding (по умолчанию включено)
# Отключение (только для специальных случаев):
set system ipv6 disable-forwarding

# Для роутера IPv6 forwarding должен быть ВКЛЮЧЕН
# Не использовать эту команду на production роутерах
```

### IPv6 Neighbor Discovery

```bash
# Настроить параметры IPv6 Neighbor Discovery
# Увеличить размер neighbor cache
set system ipv6 neighbor table-size 8192

commit
save
```

### Disable IPv6

```bash
# Полностью отключить IPv6 (если не используется)
set system ipv6 disable

commit
save
```

**Применение**: Используется только если IPv6 не нужен в сети. Уменьшает поверхность атаки.

### IPv6 Multipath

```bash
# Включить балансировку между равноценными IPv6 путями
set system ipv6 multipath layer4-hashing

commit
save
```

### IPv6 Source Validation

```bash
# Включить RP filter для IPv6
set system ipv6 source-validation strict

commit
save
```

### Accept Router Advertisements

```bash
# Контроль приема Router Advertisement на интерфейсах
# По умолчанию VyOS не принимает RA (работает как роутер)

# Включить прием RA на конкретном интерфейсе (например, для dual-stack WAN)
set interfaces ethernet eth0 ipv6 address autoconf

commit
save
```

**Примечание**: Для роутера обычно RA не нужны. Используется только на WAN интерфейсе при получении IPv6 от провайдера через SLAAC.

### IPv6 Privacy Extensions (RFC 4941)

```bash
# Включить privacy extensions для генерации временных IPv6 адресов
set interfaces ethernet eth1 ipv6 privacy-extension prefer-temporary

commit
save
```

**Privacy Extension Modes**:
- `prefer-temporary`: Использовать временные адреса для исходящих соединений
- `prefer-public`: Использовать постоянные адреса (по умолчанию)

## Расширенная конфигурация

### TCP Performance Tuning

VyOS позволяет настраивать параметры TCP для оптимизации производительности:

```bash
# Настройки выполняются через sysctl
# Увеличить TCP буферы для высокоскоростных соединений
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"

# Включить TCP window scaling
sudo sysctl -w net.ipv4.tcp_window_scaling=1

# Включить TCP timestamps
sudo sysctl -w net.ipv4.tcp_timestamps=1

# Включить SACK (Selective Acknowledgment)
sudo sysctl -w net.ipv4.tcp_sack=1

# Для постоянного применения добавить в /etc/sysctl.conf
```

**Создание постоянной конфигурации**:
```bash
sudo tee -a /etc/sysctl.d/99-vyos-tcp.conf > /dev/null <<'EOF'
# TCP Performance Tuning
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF

sudo sysctl -p /etc/sysctl.d/99-vyos-tcp.conf
```

### High-Performance Router Settings

```bash
# Увеличить размер connection tracking table
sudo sysctl -w net.netfilter.nf_conntrack_max=262144

# Увеличить hashsize для conntrack
echo 65536 | sudo tee /sys/module/nf_conntrack/parameters/hashsize

# Оптимизация ARP cache
sudo sysctl -w net.ipv4.neigh.default.gc_thresh1=1024
sudo sysctl -w net.ipv4.neigh.default.gc_thresh2=4096
sudo sysctl -w net.ipv4.neigh.default.gc_thresh3=8192

# IPv6 neighbor cache
sudo sysctl -w net.ipv6.neigh.default.gc_thresh1=1024
sudo sysctl -w net.ipv6.neigh.default.gc_thresh2=4096
sudo sysctl -w net.ipv6.neigh.default.gc_thresh3=8192

# Постоянная конфигурация
sudo tee /etc/sysctl.d/99-vyos-performance.conf > /dev/null <<'EOF'
# Connection Tracking
net.netfilter.nf_conntrack_max = 262144

# ARP Cache
net.ipv4.neigh.default.gc_thresh1 = 1024
net.ipv4.neigh.default.gc_thresh2 = 4096
net.ipv4.neigh.default.gc_thresh3 = 8192

# IPv6 Neighbor Cache
net.ipv6.neigh.default.gc_thresh1 = 1024
net.ipv6.neigh.default.gc_thresh2 = 4096
net.ipv6.neigh.default.gc_thresh3 = 8192
EOF

sudo sysctl -p /etc/sysctl.d/99-vyos-performance.conf
```

### DDoS Protection Settings

```bash
# Защита от SYN flood
sudo sysctl -w net.ipv4.tcp_syncookies=1
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=4096
sudo sysctl -w net.ipv4.tcp_synack_retries=2

# Защита от ICMP flood
sudo sysctl -w net.ipv4.icmp_ratelimit=100
sudo sysctl -w net.ipv4.icmp_ratemask=6168

# Игнорировать broadcast ping
sudo sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

# Игнорировать bogus ICMP errors
sudo sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1

# Постоянная конфигурация
sudo tee /etc/sysctl.d/99-vyos-ddos-protection.conf > /dev/null <<'EOF'
# SYN Flood Protection
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 2

# ICMP Flood Protection
net.ipv4.icmp_ratelimit = 100
net.ipv4.icmp_ratemask = 6168
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
EOF

sudo sysctl -p /etc/sysctl.d/99-vyos-ddos-protection.conf
```

## Примеры конфигурации

### 1. Edge Router с защитой от spoofing

**Задача**: Настроить пограничный роутер с защитой от IP spoofing и bogons.

```bash
# Включить строгую проверку источников (RP filter)
set system ip source-validation strict

# Отключить ICMP redirects
set system ip disable-icmp-redirect

# Multipath с layer4 hashing
set system ip multipath layer4-hashing

# Firewall для блокировки bogons на WAN
set firewall group network-group BOGONS network 0.0.0.0/8
set firewall group network-group BOGONS network 10.0.0.0/8
set firewall group network-group BOGONS network 127.0.0.0/8
set firewall group network-group BOGONS network 169.254.0.0/16
set firewall group network-group BOGONS network 172.16.0.0/12
set firewall group network-group BOGONS network 192.168.0.0/16
set firewall group network-group BOGONS network 224.0.0.0/4
set firewall group network-group BOGONS network 240.0.0.0/4

set firewall name WAN_IN rule 10 action drop
set firewall name WAN_IN rule 10 source group network-group BOGONS
set firewall name WAN_IN rule 10 description 'Drop bogon sources'

set firewall name WAN_LOCAL rule 10 action drop
set firewall name WAN_LOCAL rule 10 source group network-group BOGONS

set firewall interface eth0 in name WAN_IN
set firewall interface eth0 local name WAN_LOCAL

commit
save
```

**Дополнительные sysctl настройки**:
```bash
sudo tee /etc/sysctl.d/99-edge-router-security.conf > /dev/null <<'EOF'
# Reverse Path Filtering
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

# Do not send ICMP redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Ignore source routed packets
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Log Martians (packets with impossible addresses)
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
EOF

sudo sysctl -p /etc/sysctl.d/99-edge-router-security.conf
```

### 2. Dual-Stack роутер с IPv6

**Задача**: Настроить роутер для одновременной работы IPv4 и IPv6.

```bash
# IPv4 настройки
set system ip multipath layer4-hashing
set system ip source-validation strict

# IPv6 настройки
set system ipv6 multipath layer4-hashing
set system ipv6 source-validation strict

# WAN интерфейс - получение IPv6 от провайдера
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 address dhcpv6
set interfaces ethernet eth0 ipv6 address autoconf

# LAN интерфейс - раздача IPv4 и IPv6
set interfaces ethernet eth1 address 192.168.1.1/24
set interfaces ethernet eth1 address 2001:db8:1::1/64

# DHCPv4 сервер
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
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 option default-router 192.168.1.1
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 option name-server 192.168.1.1

# Router Advertisement для IPv6
set service router-advert interface eth1 prefix 2001:db8:1::/64
set service router-advert interface eth1 name-server 2001:4860:4860::8888
set service router-advert interface eth1 name-server 2001:4860:4860::8844

# DHCPv6 сервер (stateless - только опции)
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 name-server 2001:4860:4860::8888

# NAT для IPv4
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 translation address masquerade

commit
save
```

**Проверка**:
```bash
# Проверить IPv4 connectivity
ping -c 3 8.8.8.8

# Проверить IPv6 connectivity
ping6 -c 3 2001:4860:4860::8888

# Проверить dual-stack DNS
host google.com
```

### 3. High-Performance роутер для ЦОД

**Задача**: Оптимизировать VyOS для высоконагруженной среды (10+ Gbps).

```bash
# Базовая конфигурация
set system ip multipath layer4-hashing
set system ipv6 multipath layer4-hashing

commit
save
```

**Advanced sysctl оптимизации**:
```bash
sudo tee /etc/sysctl.d/99-datacenter-performance.conf > /dev/null <<'EOF'
# TCP Performance для 10GbE+
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mem = 134217728 134217728 134217728

# TCP Tuning
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_moderate_rcvbuf = 1

# Congestion Control (BBR для низкой latency)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# Connection Tracking для высокой нагрузки
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 7200
net.netfilter.nf_conntrack_generic_timeout = 120

# ARP/Neighbor Cache
net.ipv4.neigh.default.gc_thresh1 = 8192
net.ipv4.neigh.default.gc_thresh2 = 16384
net.ipv4.neigh.default.gc_thresh3 = 32768
net.ipv6.neigh.default.gc_thresh1 = 8192
net.ipv6.neigh.default.gc_thresh2 = 16384
net.ipv6.neigh.default.gc_thresh3 = 32768

# Receive Packet Steering (RPS) - распределение по CPU
net.core.netdev_max_backlog = 30000

# Optimize for low latency
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_slow_start_after_idle = 0
EOF

sudo sysctl -p /etc/sysctl.d/99-datacenter-performance.conf

# Настроить conntrack hashsize
echo 262144 | sudo tee /sys/module/nf_conntrack/parameters/hashsize
```

**IRQ балансировка для 10GbE NIC**:
```bash
# Установить irqbalance для автоматического распределения IRQ
sudo apt-get update
sudo apt-get install irqbalance

# Включить и запустить
sudo systemctl enable irqbalance
sudo systemctl start irqbalance
```

**Мониторинг производительности**:
```bash
# Смотреть conntrack statistics
cat /proc/net/stat/nf_conntrack

# Проверить TCP statistics
cat /proc/net/snmp | grep Tcp

# Проверить network buffer drops
netstat -s | grep -i drop

# Проверить IRQ распределение
cat /proc/interrupts
```

### 4. IPv6-only сеть с NAT64

**Задача**: Настроить IPv6-only LAN с NAT64 для доступа к IPv4 ресурсам.

```bash
# IPv6 на LAN
set interfaces ethernet eth1 address 2001:db8:1::1/64

# Router Advertisement
set service router-advert interface eth1 prefix 2001:db8:1::/64
set service router-advert interface eth1 name-server 2001:db8:1::1

# DHCPv6 сервер
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 name-server 2001:db8:1::1

# DNS64 (через bind9 или unbound)
# Требует установки дополнительного ПО
# См. документацию DNS для настройки DNS64

# NAT64 (через Jool или Tayga)
# Требует установки дополнительного ПО

commit
save
```

**Установка Tayga для NAT64**:
```bash
# Установить tayga
sudo apt-get update
sudo apt-get install tayga

# Конфигурация tayga
sudo tee /etc/tayga.conf > /dev/null <<'EOF'
tun-device nat64
ipv4-addr 192.0.2.1
ipv6-addr 2001:db8:ffff::1
prefix 64:ff9b::/96
dynamic-pool 192.0.2.128/25
data-dir /var/spool/tayga
EOF

# Включить IP forwarding для tayga
sudo systemctl enable tayga
sudo systemctl start tayga

# Маршрутизация для NAT64
sudo ip route add 64:ff9b::/96 dev nat64
```

**Проверка NAT64**:
```bash
# С IPv6-only клиента
ping6 64:ff9b::8.8.8.8
# Это будет переведено в IPv4 ping к 8.8.8.8
```

### 5. Роутер с ARP spoofing защитой

**Задача**: Защитить локальную сеть от ARP spoofing атак.

```bash
# Ограниченный ARP reply mode
set system ip arp-reply-mode restricted

# Статические ARP записи для критичных серверов
set protocols static arp 192.168.1.10 hwaddr 00:50:56:12:34:56
set protocols static arp 192.168.1.11 hwaddr 00:50:56:12:34:57
set protocols static arp 192.168.1.12 hwaddr 00:50:56:12:34:58

commit
save
```

**Dynamic ARP Inspection через firewall**:
```bash
# Создать whitelist разрешенных MAC-адресов
set firewall group mac-group TRUSTED_MACS mac-address 00:50:56:12:34:56
set firewall group mac-group TRUSTED_MACS mac-address 00:50:56:12:34:57
set firewall group mac-group TRUSTED_MACS mac-address 00:50:56:12:34:58

# Блокировать ARP от неизвестных устройств (требует custom script)
# VyOS не имеет встроенного DAI, требуется bridge + ebtables
```

**Мониторинг ARP**:
```bash
# Скрипт для мониторинга ARP изменений
sudo tee /config/scripts/arp-monitor.sh > /dev/null <<'EOF'
#!/bin/bash
# Мониторинг ARP таблицы и алертинг на изменения

ARP_LOG="/var/log/arp-changes.log"
TELEGRAM_BOT_TOKEN="YOUR_TOKEN"
TELEGRAM_CHAT_ID="YOUR_CHAT_ID"

send_alert() {
    local message="$1"
    curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \
        -d "chat_id=$TELEGRAM_CHAT_ID" \
        -d "text=$message" > /dev/null
}

# Сохранить текущую ARP таблицу
CURRENT_ARP=$(ip neigh show | sort)

# Сравнить с предыдущей
if [ -f /tmp/previous_arp.txt ]; then
    DIFF=$(diff /tmp/previous_arp.txt <(echo "$CURRENT_ARP"))

    if [ -n "$DIFF" ]; then
        echo "$(date): ARP table changed" >> "$ARP_LOG"
        echo "$DIFF" >> "$ARP_LOG"

        # Отправить алерт
        send_alert "ARP Table Changed on $(hostname):
$DIFF"
    fi
fi

# Сохранить для следующей проверки
echo "$CURRENT_ARP" > /tmp/previous_arp.txt
EOF

sudo chmod +x /config/scripts/arp-monitor.sh

# Запланировать проверку каждые 5 минут
set system task-scheduler task arp-monitor interval '*/5 * * * *'
set system task-scheduler task arp-monitor executable path '/config/scripts/arp-monitor.sh'

commit
save
```

### 6. Роутер для IPv6 Transition (Dual-Stack Lite)

**Задача**: Настроить DS-Lite для провайдера с дефицитом IPv4 адресов.

```bash
# IPv6 на WAN (от провайдера)
set interfaces ethernet eth0 address dhcpv6
set interfaces ethernet eth0 ipv6 address autoconf

# IPv4 на LAN (приватная сеть)
set interfaces ethernet eth1 address 192.168.1.1/24

# DHCP для клиентов
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
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 option default-router 192.168.1.1

# DS-Lite туннель (AFTR endpoint от провайдера)
set interfaces tunnel tun0 encapsulation ipip6
set interfaces tunnel tun0 source-address 2001:db8:1::2
set interfaces tunnel tun0 remote 2001:db8:aftr::1
set interfaces tunnel tun0 address 192.0.0.2/30

# Маршрутизация IPv4 через туннель
set protocols static route 0.0.0.0/0 interface tun0

commit
save
```

**Примечание**: DS-Lite требует поддержки провайдера (AFTR - Address Family Transition Router). Провайдер должен предоставить адрес AFTR endpoint.

## Мониторинг и диагностика

### Операционные команды

```bash
# Показать текущие IP параметры
show system ip

# Показать IPv6 параметры
show system ipv6

# ARP таблица
show arp

# IPv6 neighbor таблица
show ipv6 neighbors

# Connection tracking statistics
show conntrack table ipv4
show conntrack table ipv6

# Статистика ICMP
show interfaces ethernet eth0 statistics

# TCP статистика
netstat -s
```

### Sysctl параметры

```bash
# Показать все IP-related sysctl
sysctl -a | grep net.ipv4
sysctl -a | grep net.ipv6

# Проверить конкретный параметр
sysctl net.ipv4.ip_forward
sysctl net.ipv4.conf.all.rp_filter

# Изменить временно (до перезагрузки)
sudo sysctl -w net.ipv4.tcp_syncookies=1

# Показать все измененные параметры
sudo sysctl -a | grep -v "= 0$"
```

### Connection Tracking

```bash
# Количество conntrack записей
cat /proc/sys/net/netfilter/nf_conntrack_count

# Максимум conntrack
cat /proc/sys/net/netfilter/nf_conntrack_max

# Conntrack таблица
conntrack -L

# Статистика conntrack
cat /proc/net/stat/nf_conntrack

# Топ источников по количеству соединений
conntrack -L | awk '{print $5}' | cut -d= -f2 | sort | uniq -c | sort -rn | head -10
```

### Performance Monitoring

```bash
# Проверить network drops
netstat -s | grep -i drop

# Проверить TCP retransmits
netstat -s | grep -i retrans

# Проверить UDP statistics
netstat -s | grep -i udp

# Interface statistics
show interfaces ethernet eth0 statistics
```

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

### 1. IP forwarding не работает

**Симптомы**: Клиенты не могут получить доступ в интернет через роутер.

**Проверка**:
```bash
# Проверить IP forwarding
sysctl net.ipv4.ip_forward
# Должно быть: net.ipv4.ip_forward = 1

# Проверить конфигурацию VyOS
show configuration system ip | grep forwarding
# Не должно быть: disable-forwarding
```

**Решение**:
```bash
# Если forwarding отключен - удалить disable
delete system ip disable-forwarding

commit
save

# Проверить в ядре
sudo sysctl -w net.ipv4.ip_forward=1
```

### 2. IPv6 connectivity отсутствует

**Симптомы**: IPv4 работает, IPv6 нет.

**Проверка**:
```bash
# Проверить IPv6 forwarding
sysctl net.ipv6.conf.all.forwarding
# Должно быть: 1

# Проверить, не отключен ли IPv6
show configuration system ipv6

# Проверить IPv6 адреса на интерфейсах
show interfaces

# Проверить IPv6 connectivity
ping6 2001:4860:4860::8888
```

**Решение**:
```bash
# Если IPv6 отключен - включить
delete system ipv6 disable

commit
save

# Проверить Router Advertisement (если это LAN)
show service router-advert

# Проверить firewall (не блокирует ли ICMPv6)
show firewall
# ICMPv6 types 133-137 должны быть разрешены
```

### 3. Conntrack table переполнена

**Симптомы**: "nf_conntrack: table full, dropping packet" в логах.

**Проверка**:
```bash
# Текущее количество conntrack записей
cat /proc/sys/net/netfilter/nf_conntrack_count

# Максимум
cat /proc/sys/net/netfilter/nf_conntrack_max

# Если count близко к max - таблица заполнена
```

**Решение**:
```bash
# Увеличить nf_conntrack_max
sudo sysctl -w net.netfilter.nf_conntrack_max=262144

# Увеличить hashsize
echo 65536 | sudo tee /sys/module/nf_conntrack/parameters/hashsize

# Уменьшить timeout для established соединений
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=3600

# Сделать постоянным
sudo tee /etc/sysctl.d/99-conntrack.conf > /dev/null <<'EOF'
net.netfilter.nf_conntrack_max = 262144
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
EOF

sudo sysctl -p /etc/sysctl.d/99-conntrack.conf
```

### 4. ARP cache переполнен

**Симптомы**: Не удается получить ARP для новых хостов.

**Проверка**:
```bash
# Размер ARP cache
ip neigh show | wc -l

# Проверить sysctl пороги
sysctl net.ipv4.neigh.default.gc_thresh1
sysctl net.ipv4.neigh.default.gc_thresh2
sysctl net.ipv4.neigh.default.gc_thresh3
```

**Решение**:
```bash
# Увеличить ARP cache thresholds
sudo sysctl -w net.ipv4.neigh.default.gc_thresh1=2048
sudo sysctl -w net.ipv4.neigh.default.gc_thresh2=4096
sudo sysctl -w net.ipv4.neigh.default.gc_thresh3=8192

# Для IPv6
sudo sysctl -w net.ipv6.neigh.default.gc_thresh1=2048
sudo sysctl -w net.ipv6.neigh.default.gc_thresh2=4096
sudo sysctl -w net.ipv6.neigh.default.gc_thresh3=8192

# Сделать постоянным
sudo tee /etc/sysctl.d/99-arp-cache.conf > /dev/null <<'EOF'
net.ipv4.neigh.default.gc_thresh1 = 2048
net.ipv4.neigh.default.gc_thresh2 = 4096
net.ipv4.neigh.default.gc_thresh3 = 8192
net.ipv6.neigh.default.gc_thresh1 = 2048
net.ipv6.neigh.default.gc_thresh2 = 4096
net.ipv6.neigh.default.gc_thresh3 = 8192
EOF

sudo sysctl -p /etc/sysctl.d/99-arp-cache.conf
```

### 5. Низкая производительность TCP

**Симптомы**: Медленная скорость загрузки/выгрузки больших файлов.

**Проверка**:
```bash
# Проверить TCP буферы
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem

# Проверить window scaling
sysctl net.ipv4.tcp_window_scaling

# Проверить congestion control
sysctl net.ipv4.tcp_congestion_control
```

**Решение**:
```bash
# Увеличить TCP буферы
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"

# Включить важные опции
sudo sysctl -w net.ipv4.tcp_window_scaling=1
sudo sysctl -w net.ipv4.tcp_timestamps=1
sudo sysctl -w net.ipv4.tcp_sack=1

# Использовать BBR для congestion control (требует Linux 4.9+)
sudo sysctl -w net.core.default_qdisc=fq
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

# Сделать постоянным
sudo tee /etc/sysctl.d/99-tcp-performance.conf > /dev/null <<'EOF'
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF

sudo sysctl -p /etc/sysctl.d/99-tcp-performance.conf
```

### 6. RP filter блокирует легитимный трафик

**Симптомы**: Ассиметричная маршрутизация не работает, пакеты дропаются.

**Проверка**:
```bash
# Проверить RP filter режим
sysctl net.ipv4.conf.all.rp_filter

# Проверить логи (если включен log_martians)
dmesg | grep -i "martian"

# Проверить VyOS конфигурацию
show configuration system ip | grep source-validation
```

**Решение**:
```bash
# Переключить на loose mode (менее строгий)
delete system ip source-validation
set system ip source-validation loose

commit
save

# Или отключить RP filter для конкретных интерфейсов
sudo sysctl -w net.ipv4.conf.eth1.rp_filter=0

# Для постоянного применения
sudo tee /etc/sysctl.d/99-rp-filter.conf > /dev/null <<'EOF'
net.ipv4.conf.eth1.rp_filter = 0
EOF
```

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

1. **IP Forwarding**
   - Оставлять включенным на роутерах (по умолчанию)
   - Отключать только на firewall без маршрутизации
   - Проверять после обновления VyOS

2. **Source Validation (RP Filter)**
   - Использовать strict mode на edge роутерах
   - Использовать loose mode при ассиметричной маршрутизации
   - Отключать только в крайних случаях (VRF, сложная топология)

3. **IPv6 Configuration**
   - Включать IPv6, даже если не используется сейчас
   - Планировать dual-stack с самого начала
   - Использовать Router Advertisement для SLAAC
   - DHCPv6 для дополнительных опций (DNS)

4. **Connection Tracking**
   - Увеличивать nf_conntrack_max на высоконагруженных роутерах
   - Мониторить conntrack count/max ratio
   - Настраивать timeouts под нагрузку
   - Hashsize = conntrack_max / 8 (оптимально)

5. **Performance Tuning**
   - Увеличивать TCP буферы для WAN > 100 Mbps
   - Использовать BBR congestion control для низкой latency
   - Включать TCP window scaling, SACK, timestamps
   - Настраивать IRQ балансировку на многоядерных системах

6. **Security**
   - Отключать ICMP redirects на WAN
   - Блокировать bogon источники на edge
   - Включать SYN cookies для защиты от SYN flood
   - Rate limiting для ICMP

7. **ARP/Neighbor Cache**
   - Увеличивать thresholds для больших сетей (>1000 хостов)
   - Использовать статические ARP для критичных серверов
   - Мониторить ARP изменения для обнаружения spoofing

8. **Multipath Routing**
   - Использовать layer4-hashing для сохранения порядка пакетов
   - Применять как для IPv4, так и для IPv6
   - Необходимо для ECMP и load balancing

9. **Monitoring**
   - Мониторить conntrack usage
   - Отслеживать TCP retransmits
   - Проверять network drops
   - Логировать martians на edge роутерах

10. **Documentation**
    - Документировать все нестандартные sysctl параметры
    - Хранить конфигурационные файлы в /etc/sysctl.d/
    - Использовать описательные имена файлов
    - Тестировать изменения перед production

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

Правильная конфигурация системных параметров IP и IPv6 критична для производительности, безопасности и стабильности работы VyOS роутера. Настройка RP filter, multipath routing, connection tracking, TCP параметров и других опций сетевого стека позволяет оптимизировать роутер под конкретные требования сети - от edge роутера с защитой от spoofing до высокопроизводительного ЦОД маршрутизатора.

