IPv6 - Системные настройки IPv6

Системные настройки IPv6 в VyOS обеспечивают управление параметрами IPv6 на уровне всей системы, включая forwarding, Duplicate Address Detection (DAD), multipath routing, neighbor discovery и другие критичные параметры сетевого стека IPv6.

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

  • IPv6 Forwarding: Управление маршрутизацией IPv6 пакетов между интерфейсами
  • Strict DAD: Строгий режим обнаружения дублирующихся адресов
  • Multipath Hashing: Layer 4 хеширование для балансировки IPv6 трафика
  • Neighbor Table: Управление таблицей соседей IPv6 (аналог ARP для IPv4)
  • Nexthop Tracking: Контроль отслеживания next-hop для динамической маршрутизации
  • Interface-specific Settings: Отключение IPv6 на конкретных интерфейсах
  • Sysctl Parameters: Низкоуровневые параметры ядра для IPv6

Обзор IPv6 в VyOS

VyOS полностью поддерживает IPv6 и работает в режиме dual-stack (одновременно IPv4 и IPv6) по умолчанию. Системные настройки IPv6 позволяют контролировать поведение IPv6 стека на уровне ядра операционной системы.

Ключевые отличия от IPv4

  • Neighbor Discovery Protocol (NDP) вместо ARP
  • SLAAC (Stateless Address Autoconfiguration) для автоматической настройки
  • Router Advertisement (RA) для объявления префиксов
  • Duplicate Address Detection (DAD) для предотвращения конфликтов адресов
  • Privacy Extensions (RFC 4941) для временных адресов
  • 128-битные адреса вместо 32-битных

IPv6 Forwarding

Описание

IPv6 forwarding управляет способностью системы маршрутизировать IPv6 пакеты между интерфейсами. По умолчанию VyOS работает как роутер с включенным IPv6 forwarding.

Конфигурация

# ВНИМАНИЕ: Эта команда ОТКЛЮЧАЕТ IPv6 forwarding
# Используется только в специальных случаях (firewall без маршрутизации)
set system ipv6 disable-forwarding

commit
save

Важно:

  • IPv6 forwarding включен по умолчанию на VyOS
  • Команда disable-forwarding отключает маршрутизацию IPv6
  • Для работы роутера forwarding должен быть ВКЛЮЧЕН
  • Отключайте только если VyOS используется как endpoint, а не роутер

Проверка состояния

# Проверить IPv6 forwarding в ядре
sysctl net.ipv6.conf.all.forwarding
# Должно быть: net.ipv6.conf.all.forwarding = 1 (для роутера)

# Проверить конфигурацию VyOS
show configuration system ipv6 | grep forwarding

# Если видим "disable-forwarding" - forwarding выключен

Применение

  • Роутеры: Forwarding должен быть ВКЛЮЧЕН (по умолчанию)
  • Firewall без маршрутизации: Можно отключить
  • Endpoint системы: Отключить для безопасности

Strict DAD (Duplicate Address Detection)

Описание

Strict DAD (Duplicate Address Detection) - строгий режим обнаружения дублирующихся IPv6 адресов. При обнаружении дублирующегося Link-Local адреса, IPv6 полностью отключается на интерфейсе.

Как работает DAD

  1. При назначении IPv6 адреса, система отправляет Neighbor Solicitation (NS) для проверки уникальности
  2. Если другой узел использует этот адрес, он ответит Neighbor Advertisement (NA)
  3. При получении NA:
    • Обычный режим: Адрес помечается как duplicate, но интерфейс продолжает работать
    • Strict DAD: IPv6 полностью отключается на интерфейсе

Конфигурация

# Включить strict DAD
set system ipv6 strict-dad

commit
save

Проверка

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

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

# Проверить логи для сообщений о duplicate addresses
show log | match "duplicate"

Пример сценария

# Ситуация: В сети два роутера с одинаковым Link-Local адресом
# fe80::1 настроен на двух разных интерфейсах в одном сегменте

# Без strict-dad:
# - Адрес помечается как DAD failed
# - Интерфейс продолжает работать с другими адресами

# Со strict-dad:
# - IPv6 полностью отключается на интерфейсе
# - Предотвращается потенциальная некорректная маршрутизация

Применение

  • Production сети: Рекомендуется включать для предотвращения IPv6 конфликтов
  • Managed Infrastructure: Обязательно при автоматической конфигурации
  • Cloud Environments: Критично для Yandex Cloud, VK Cloud (автоматическое назначение адресов)

Multipath Hashing для IPv6

Описание

Multipath hashing определяет алгоритм распределения IPv6 трафика между несколькими равноценными путями (ECMP - Equal-Cost Multi-Path). Layer 4 хеширование использует информацию транспортного уровня для обеспечения консистентной маршрутизации.

Конфигурация

# Включить Layer 4 хеширование для IPv6 multipath
set system ipv6 multipath layer4-hashing

commit
save

Как работает Layer 4 Hashing

Без layer4-hashing (по умолчанию):

  • Используется только Source IPv6 и Destination IPv6
  • Хеш: hash(src_ipv6, dst_ipv6)

С layer4-hashing:

  • Используется Source IPv6, Destination IPv6, Protocol, Source Port, Destination Port
  • Хеш: hash(src_ipv6, dst_ipv6, protocol, src_port, dst_port)

Преимущества Layer 4 Hashing

  1. Сохранение порядка пакетов: Все пакеты одной TCP/UDP сессии идут по одному пути
  2. Лучшее распределение: Более равномерная балансировка между путями
  3. Избежание переупорядочивания: Предотвращает TCP retransmits из-за out-of-order пакетов
  4. Per-flow балансировка: Каждый поток трафика (flow) получает свой путь

Пример конфигурации ECMP с IPv6

# Настроить два равноценных IPv6 маршрута
set protocols static route6 2001:db8:100::/48 next-hop 2001:db8:1::1
set protocols static route6 2001:db8:100::/48 next-hop 2001:db8:1::2

# Включить layer4-hashing
set system ipv6 multipath layer4-hashing

commit
save

Проверка

# Проверить IPv6 маршруты с ECMP
show ipv6 route

# Должны видеть несколько next-hop для одного префикса
# Example:
# S>  2001:db8:100::/48 [1/0] via 2001:db8:1::1, eth0, weight 1, 00:01:23
#                              via 2001:db8:1::2, eth1, weight 1, 00:01:23

# Проверить sysctl параметр
sysctl net.ipv6.fib_multipath_hash_policy
# Значение: 1 (layer4 hashing)

Применение

  • Dual-WAN роутеры: Балансировка между двумя IPv6 каналами
  • BGP ECMP: Распределение трафика между несколькими BGP next-hops
  • Data Center: Load balancing между серверами
  • ISP Networks: Равномерное распределение в core сети

Neighbor Table Size

Описание

Neighbor Table - это IPv6 эквивалент ARP cache для IPv4. Хранит соответствие между IPv6 адресами и MAC адресами. Размер таблицы критичен для больших сетей.

Конфигурация

# Настроить максимальный размер neighbor table
set system ipv6 neighbor table-size 8192

# Доступные значения: 1024, 2048, 4096, 8192, 16384, 32768

commit
save

Выбор размера таблицы

Размер сетиРекомендуемый table-sizeПрименение
< 100 хостов1024 (по умолчанию)Малые офисы
100-500 хостов2048Средние офисы
500-2000 хостов4096Большие офисы, филиалы
2000-5000 хостов8192Корпоративные сети
5000-15000 хостов16384Data centers
> 15000 хостов32768ISP, крупные ЦОД

Проверка

# Показать текущие IPv6 neighbors
show ipv6 neighbors

# Пример вывода:
# IPv6 Address                  Interface    Link-layer Address    State    Age
# fe80::250:56ff:fe12:3456     eth1         00:50:56:12:34:56     REACHABLE 15
# 2001:db8:1::100              eth1         00:50:56:12:34:57     STALE     120

# Подсчитать количество записей
show ipv6 neighbors | grep -c REACHABLE

# Проверить sysctl параметры
sysctl net.ipv6.neigh.default.gc_thresh1
sysctl net.ipv6.neigh.default.gc_thresh2
sysctl net.ipv6.neigh.default.gc_thresh3

Neighbor Discovery States

  • INCOMPLETE: Адрес разрешается, NS отправлен
  • REACHABLE: Адрес доступен, подтверждено в течение ReachableTime
  • STALE: Запись устарела, требуется подтверждение при использовании
  • DELAY: Ожидание подтверждения reachability
  • PROBE: Активная проверка reachability (Neighbor Unreachability Detection)
  • FAILED: Neighbor недоступен

Расширенная настройка через sysctl

# Настроить garbage collection thresholds
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

# gc_thresh1: Минимум записей до начала GC
# gc_thresh2: Мягкий лимит (GC становится агрессивнее)
# gc_thresh3: Жесткий лимит (новые записи не создаются)

# Постоянная конфигурация
sudo tee /etc/sysctl.d/99-ipv6-neighbor.conf > /dev/null <<'EOF'
net.ipv6.neigh.default.gc_thresh1 = 1024
net.ipv6.neigh.default.gc_thresh2 = 4096
net.ipv6.neigh.default.gc_thresh3 = 8192
net.ipv6.neigh.default.gc_interval = 30
net.ipv6.neigh.default.gc_stale_time = 60
EOF

sudo sysctl -p /etc/sysctl.d/99-ipv6-neighbor.conf

Nexthop Tracking

Описание

Nexthop tracking (NHT) контролирует, как динамические протоколы маршрутизации отслеживают доступность next-hop адресов. Опция no-resolve-via-default запрещает использовать default route для разрешения next-hop.

Конфигурация

# Запретить разрешение next-hop через default route
set system ipv6 nht no-resolve-via-default

commit
save

Как работает Nexthop Tracking

Без no-resolve-via-default (по умолчанию):

# BGP neighbor 2001:db8:100::1
# Routing table:
# ::/0 via 2001:db8:1::1
#
# BGP считает 2001:db8:100::1 доступным через default route
# Сессия BGP устанавливается

С no-resolve-via-default:

# BGP neighbor 2001:db8:100::1
# Routing table:
# ::/0 via 2001:db8:1::1
# НЕТ специфичного маршрута к 2001:db8:100::1
#
# BGP НЕ считает 2001:db8:100::1 доступным
# Сессия BGP не устанавливается

Применение

Рекомендуется включать:

  • В BGP сетях для предотвращения false-positive доступности peers
  • При использовании IBGP с loopback адресами
  • В OSPF/IS-IS для контроля next-hop разрешения

Не включать:

  • Если BGP peers доступны только через default route
  • В простых конфигурациях с одним upstream провайдером

Пример с BGP

# BGP конфигурация с no-resolve-via-default
set system ipv6 nht no-resolve-via-default

# BGP peers должны иметь специфичные маршруты
set protocols bgp local-as 65001
set protocols bgp neighbor 2001:db8:100::1 remote-as 65002
set protocols bgp neighbor 2001:db8:100::1 address-family ipv6-unicast

# Добавить статический маршрут к BGP peer
set protocols static route6 2001:db8:100::1/128 next-hop 2001:db8:1::1

commit
save

Отключение IPv6 на интерфейсах

Глобальное отключение IPv6

# ВНИМАНИЕ: Полностью отключает IPv6 на всей системе
set system ipv6 disable

commit
save

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

Проверка

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

# Проверить в ядре
sysctl net.ipv6.conf.all.disable_ipv6
# Значение: 1 (IPv6 отключен)

# Проверить интерфейсы (не должно быть IPv6 адресов)
show interfaces

Отключение IPv6 на конкретном интерфейсе

VyOS не имеет встроенной команды для отключения IPv6 на конкретном интерфейсе через CLI. Используется sysctl:

# Отключить IPv6 на eth0
sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=1

# Постоянная конфигурация
sudo tee /etc/sysctl.d/99-disable-ipv6-eth0.conf > /dev/null <<'EOF'
net.ipv6.conf.eth0.disable_ipv6 = 1
EOF

sudo sysctl -p /etc/sysctl.d/99-disable-ipv6-eth0.conf

Применение selective disable

  • Отключить на WAN (если провайдер не предоставляет IPv6)
  • Отключить на management интерфейсах (для безопасности)
  • Оставить на LAN (для dual-stack клиентов)

Sysctl Parameters для IPv6

Критичные параметры безопасности

# Отключить прием Router Advertisements (для роутеров)
sudo sysctl -w net.ipv6.conf.all.accept_ra=0
sudo sysctl -w net.ipv6.conf.default.accept_ra=0

# Отключить Router Advertisement forwarding
sudo sysctl -w net.ipv6.conf.all.forwarding=1

# Отключить прием redirects
sudo sysctl -w net.ipv6.conf.all.accept_redirects=0
sudo sysctl -w net.ipv6.conf.default.accept_redirects=0

# Отключить source routing
sudo sysctl -w net.ipv6.conf.all.accept_source_route=0
sudo sysctl -w net.ipv6.conf.default.accept_source_route=0

# Постоянная конфигурация
sudo tee /etc/sysctl.d/99-ipv6-security.conf > /dev/null <<'EOF'
# IPv6 Security Parameters
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
net.ipv6.conf.all.forwarding = 1
EOF

sudo sysctl -p /etc/sysctl.d/99-ipv6-security.conf

Privacy Extensions (RFC 4941)

# Включить privacy extensions для временных адресов
# (обычно на клиентах, не на роутерах)
sudo sysctl -w net.ipv6.conf.all.use_tempaddr=2
sudo sysctl -w net.ipv6.conf.default.use_tempaddr=2

# 0 = отключено
# 1 = включено, но предпочтение публичным адресам
# 2 = включено, предпочтение временным адресам

# Настроить время жизни временных адресов
sudo sysctl -w net.ipv6.conf.all.temp_valid_lft=86400
sudo sysctl -w net.ipv6.conf.all.temp_prefered_lft=14400

Duplicate Address Detection

# Количество NS сообщений для DAD (по умолчанию 1)
sudo sysctl -w net.ipv6.conf.all.dad_transmits=1
sudo sysctl -w net.ipv6.conf.default.dad_transmits=1

# Оптимистичный DAD (использовать адрес до завершения DAD)
sudo sysctl -w net.ipv6.conf.all.optimistic_dad=0
sudo sysctl -w net.ipv6.conf.default.optimistic_dad=0

Router Advertisement Parameters

# Максимальное количество RA для обработки
sudo sysctl -w net.ipv6.conf.all.max_addresses=16

# Время жизни default route из RA
sudo sysctl -w net.ipv6.route.max_size=4096

# Autoconf (SLAAC) параметры
sudo sysctl -w net.ipv6.conf.all.autoconf=1
sudo sysctl -w net.ipv6.conf.default.autoconf=1

Performance Tuning для IPv6

sudo tee /etc/sysctl.d/99-ipv6-performance.conf > /dev/null <<'EOF'
# IPv6 Performance Parameters

# Neighbor Table Size
net.ipv6.neigh.default.gc_thresh1 = 1024
net.ipv6.neigh.default.gc_thresh2 = 4096
net.ipv6.neigh.default.gc_thresh3 = 8192
net.ipv6.neigh.default.gc_interval = 30
net.ipv6.neigh.default.gc_stale_time = 60

# Route Cache
net.ipv6.route.max_size = 16384
net.ipv6.route.gc_interval = 30
net.ipv6.route.gc_timeout = 60
net.ipv6.route.gc_min_interval = 5

# IPv6 Fragment Reassembly
net.ipv6.ip6frag_high_thresh = 4194304
net.ipv6.ip6frag_low_thresh = 3145728
net.ipv6.ip6frag_time = 60

# ICMPv6 Rate Limiting
net.ipv6.icmp.ratelimit = 1000

# Multipath Hashing
net.ipv6.fib_multipath_hash_policy = 1
EOF

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

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

1. Dual-Stack роутер для Yandex Cloud

Задача: Настроить VyOS в Yandex Cloud с dual-stack IPv4/IPv6.

# Системные настройки IPv6
set system ipv6 multipath layer4-hashing
set system ipv6 strict-dad
set system ipv6 neighbor table-size 4096

# WAN интерфейс (eth0) - получение IPv6 от Yandex Cloud
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 address dhcpv6
set interfaces ethernet eth0 ipv6 address autoconf

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

# DHCPv4 сервер для LAN
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 (SLAAC)
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 сервер для дополнительных опций
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
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 name-server 2001:4860:4860::8844

# NAT для IPv4 (IPv6 работает без NAT)
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

# Firewall для IPv6 (разрешить ICMPv6)
set firewall name WAN6_LOCAL default-action drop
set firewall name WAN6_LOCAL rule 10 action accept
set firewall name WAN6_LOCAL rule 10 state established
set firewall name WAN6_LOCAL rule 10 state related
set firewall name WAN6_LOCAL rule 10 description 'Allow established/related'

set firewall name WAN6_LOCAL rule 20 action accept
set firewall name WAN6_LOCAL rule 20 protocol ipv6-icmp
set firewall name WAN6_LOCAL rule 20 description 'Allow ICMPv6'

set firewall interface eth0 local name WAN6_LOCAL

commit
save

Дополнительные sysctl для Yandex Cloud:

sudo tee /etc/sysctl.d/99-yandex-cloud-ipv6.conf > /dev/null <<'EOF'
# Yandex Cloud IPv6 Settings

# Принимать RA только на WAN
net.ipv6.conf.eth0.accept_ra = 2
net.ipv6.conf.eth0.autoconf = 1
net.ipv6.conf.eth1.accept_ra = 0

# Forwarding
net.ipv6.conf.all.forwarding = 1

# Security
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_source_route = 0

# Neighbor table для небольшой сети
net.ipv6.neigh.default.gc_thresh1 = 512
net.ipv6.neigh.default.gc_thresh2 = 2048
net.ipv6.neigh.default.gc_thresh3 = 4096
EOF

sudo sysctl -p /etc/sysctl.d/99-yandex-cloud-ipv6.conf

Проверка конфигурации:

# Проверить IPv6 адреса
show interfaces

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

# Проверить Router Advertisement
show ipv6 route

# Должны видеть:
# - Link-local адреса на всех интерфейсах (fe80::...)
# - Global unicast адрес на eth0 от Yandex Cloud
# - Configured адрес на eth1 (2001:db8:1::1/64)

# Проверить neighbor discovery
show ipv6 neighbors

2. IPv6-only сеть для VK Cloud

Задача: Настроить VyOS в VK Cloud для IPv6-only инфраструктуры.

# Системные настройки IPv6
set system ipv6 multipath layer4-hashing
set system ipv6 strict-dad
set system ipv6 neighbor table-size 8192
set system ipv6 nht no-resolve-via-default

# WAN интерфейс - только IPv6
set interfaces ethernet eth0 address dhcpv6
set interfaces ethernet eth0 ipv6 address autoconf
set interfaces ethernet eth0 description 'WAN VK Cloud IPv6'

# LAN интерфейс - только IPv6
set interfaces ethernet eth1 address 2001:db8:100::1/64
set interfaces ethernet eth1 description 'LAN IPv6-only'

# Router Advertisement для клиентов
set service router-advert interface eth1 prefix 2001:db8:100::/64
set service router-advert interface eth1 prefix 2001:db8:100::/64 preferred-lifetime 14400
set service router-advert interface eth1 prefix 2001:db8:100::/64 valid-lifetime 86400
set service router-advert interface eth1 name-server 2001:4860:4860::8888
set service router-advert interface eth1 name-server 2001:4860:4860::8844
set service router-advert interface eth1 other-config-flag

# DHCPv6 сервер (stateful для управления адресацией)
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:100::/64
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:100::/64 range 0 start 2001:db8:100::1000
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:100::/64 range 0 stop 2001:db8:100::1fff
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:100::/64 name-server 2001:4860:4860::8888
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:100::/64 name-server 2001:4860:4860::8844

# Firewall для IPv6
set firewall name WAN6_IN default-action drop
set firewall name WAN6_IN rule 10 action accept
set firewall name WAN6_IN rule 10 state established
set firewall name WAN6_IN rule 10 state related

set firewall name WAN6_IN rule 20 action drop
set firewall name WAN6_IN rule 20 state invalid

set firewall name WAN6_IN rule 30 action accept
set firewall name WAN6_IN rule 30 protocol ipv6-icmp

set firewall name WAN6_LOCAL default-action drop
set firewall name WAN6_LOCAL rule 10 action accept
set firewall name WAN6_LOCAL rule 10 state established
set firewall name WAN6_LOCAL rule 10 state related

set firewall name WAN6_LOCAL rule 20 action accept
set firewall name WAN6_LOCAL rule 20 protocol ipv6-icmp

set firewall name WAN6_LOCAL rule 30 action accept
set firewall name WAN6_LOCAL rule 30 source address fe80::/10
set firewall name WAN6_LOCAL rule 30 description 'Allow link-local'

set firewall interface eth0 in name WAN6_IN
set firewall interface eth0 local name WAN6_LOCAL

# Отключить IPv4 (опционально, если действительно IPv6-only)
# set system ip disable-forwarding

commit
save

Специфичные настройки для IPv6-only:

sudo tee /etc/sysctl.d/99-vk-cloud-ipv6-only.conf > /dev/null <<'EOF'
# VK Cloud IPv6-only Configuration

# IPv6 Forwarding
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.forwarding = 1

# Accept RA только на WAN (для получения default route)
net.ipv6.conf.eth0.accept_ra = 2
net.ipv6.conf.eth0.autoconf = 1
net.ipv6.conf.eth1.accept_ra = 0
net.ipv6.conf.eth1.autoconf = 0

# Router Advertisement (роутер должен отправлять RA)
net.ipv6.conf.eth1.forwarding = 1

# Увеличить neighbor table для большой IPv6 сети
net.ipv6.neigh.default.gc_thresh1 = 2048
net.ipv6.neigh.default.gc_thresh2 = 4096
net.ipv6.neigh.default.gc_thresh3 = 8192

# Multipath hashing
net.ipv6.fib_multipath_hash_policy = 1

# Security
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Disable IPv4 (опционально)
# net.ipv4.conf.all.forwarding = 0
EOF

sudo sysctl -p /etc/sysctl.d/99-vk-cloud-ipv6-only.conf

Проверка IPv6-only конфигурации:

# Проверить получение IPv6 от VK Cloud
show interfaces ethernet eth0

# Должны видеть:
# - Link-local адрес (fe80::...)
# - Global unicast адрес от DHCPv6/SLAAC

# Проверить IPv6 routing
show ipv6 route

# Должны видеть:
# - ::/0 default route через eth0
# - 2001:db8:100::/64 connected через eth1

# Тест connectivity
ping6 2001:4860:4860::8888

# Проверить DHCPv6 server
show dhcpv6 server leases

# Проверить Router Advertisement
show ipv6 route | grep RA

3. BGP IPv6 Multihoming с ECMP

Задача: Настроить dual-uplink с BGP IPv6 и ECMP балансировкой.

# Системные настройки IPv6
set system ipv6 multipath layer4-hashing
set system ipv6 strict-dad
set system ipv6 neighbor table-size 16384
set system ipv6 nht no-resolve-via-default

# Uplink 1 - ISP A
set interfaces ethernet eth0 address 2001:db8:a::2/64
set interfaces ethernet eth0 description 'ISP-A Uplink'

# Uplink 2 - ISP B
set interfaces ethernet eth1 address 2001:db8:b::2/64
set interfaces ethernet eth1 description 'ISP-B Uplink'

# LAN
set interfaces ethernet eth2 address 2001:db8:100::1/64
set interfaces ethernet eth2 description 'LAN'

# BGP Configuration
set protocols bgp local-as 65001
set protocols bgp parameters router-id 10.0.0.1

# BGP neighbor ISP-A
set protocols bgp neighbor 2001:db8:a::1 remote-as 65100
set protocols bgp neighbor 2001:db8:a::1 address-family ipv6-unicast
set protocols bgp neighbor 2001:db8:a::1 description 'ISP-A'

# BGP neighbor ISP-B
set protocols bgp neighbor 2001:db8:b::1 remote-as 65200
set protocols bgp neighbor 2001:db8:b::1 address-family ipv6-unicast
set protocols bgp neighbor 2001:db8:b::1 description 'ISP-B'

# Announce LAN prefix
set protocols bgp address-family ipv6-unicast network 2001:db8:100::/48

# Maximum paths для ECMP
set protocols bgp address-family ipv6-unicast maximum-paths 2

# Router Advertisement на LAN
set service router-advert interface eth2 prefix 2001:db8:100::/64

commit
save

Настройка ECMP через sysctl:

sudo tee /etc/sysctl.d/99-bgp-ipv6-ecmp.conf > /dev/null <<'EOF'
# BGP IPv6 ECMP Configuration

# Layer 4 hashing для per-flow балансировки
net.ipv6.fib_multipath_hash_policy = 1

# Увеличить neighbor table для BGP full table
net.ipv6.neigh.default.gc_thresh1 = 4096
net.ipv6.neigh.default.gc_thresh2 = 8192
net.ipv6.neigh.default.gc_thresh3 = 16384

# Route table size для BGP
net.ipv6.route.max_size = 32768

# Forwarding
net.ipv6.conf.all.forwarding = 1

# BGP specific: не принимать RA на uplinks
net.ipv6.conf.eth0.accept_ra = 0
net.ipv6.conf.eth1.accept_ra = 0
net.ipv6.conf.eth2.accept_ra = 0
EOF

sudo sysctl -p /etc/sysctl.d/99-bgp-ipv6-ecmp.conf

Проверка ECMP:

# Проверить BGP sessions
show bgp ipv6 summary

# Проверить BGP routes с ECMP
show bgp ipv6

# Проверить установленные маршруты
show ipv6 route

# Для префикса с ECMP должны видеть несколько next-hops:
# B>* ::/0 [20/0] via 2001:db8:a::1, eth0, weight 1, 00:10:23
#                via 2001:db8:b::1, eth1, weight 1, 00:10:23

# Тестировать балансировку
# С LAN клиента запустить несколько соединений и проверить распределение

4. Data Center с IPv6 и высокой нагрузкой

Задача: Оптимизировать VyOS для Data Center с IPv6 трафиком > 1 Gbps.

# Системные настройки IPv6
set system ipv6 multipath layer4-hashing
set system ipv6 strict-dad
set system ipv6 neighbor table-size 32768
set system ipv6 nht no-resolve-via-default

commit
save

Performance tuning для Data Center:

sudo tee /etc/sysctl.d/99-datacenter-ipv6-performance.conf > /dev/null <<'EOF'
# Data Center IPv6 Performance Tuning

# Forwarding
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.forwarding = 1

# Neighbor Table для большой сети (10K+ servers)
net.ipv6.neigh.default.gc_thresh1 = 8192
net.ipv6.neigh.default.gc_thresh2 = 16384
net.ipv6.neigh.default.gc_thresh3 = 32768
net.ipv6.neigh.default.gc_interval = 30
net.ipv6.neigh.default.gc_stale_time = 60
net.ipv6.neigh.default.base_reachable_time_ms = 30000

# Route Table для BGP/OSPF
net.ipv6.route.max_size = 65536
net.ipv6.route.gc_interval = 30
net.ipv6.route.gc_timeout = 60
net.ipv6.route.gc_min_interval = 5

# Multipath ECMP с Layer 4 hashing
net.ipv6.fib_multipath_hash_policy = 1

# Fragment Reassembly для Jumbo Frames
net.ipv6.ip6frag_high_thresh = 8388608
net.ipv6.ip6frag_low_thresh = 6291456
net.ipv6.ip6frag_time = 60

# ICMPv6 Rate Limiting (защита от floods)
net.ipv6.icmp.ratelimit = 1000

# Disable RA на всех интерфейсах (data center internal)
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0

# Security
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# TCP Performance для IPv6
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864

# Congestion Control
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# Netfilter Conntrack
net.netfilter.nf_conntrack_max = 1048576
EOF

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

Conntrack hashsize для высокой нагрузки:

# Установить hashsize = conntrack_max / 8
echo 131072 | sudo tee /sys/module/nf_conntrack/parameters/hashsize

# Сделать постоянным (добавить в rc.local или systemd service)
sudo tee /etc/systemd/system/conntrack-hashsize.service > /dev/null <<'EOF'
[Unit]
Description=Set nf_conntrack hashsize
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo 131072 > /sys/module/nf_conntrack/parameters/hashsize'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable conntrack-hashsize
sudo systemctl start conntrack-hashsize

5. IPv6 Security Hardening

Задача: Настроить IPv6 с максимальной безопасностью для edge роутера.

# Системные настройки IPv6
set system ipv6 multipath layer4-hashing
set system ipv6 strict-dad
set system ipv6 neighbor table-size 4096

# Firewall для IPv6
set firewall name WAN6_IN default-action drop
set firewall name WAN6_IN enable-default-log

# Разрешить established/related
set firewall name WAN6_IN rule 10 action accept
set firewall name WAN6_IN rule 10 state established
set firewall name WAN6_IN rule 10 state related
set firewall name WAN6_IN rule 10 description 'Allow established/related'

# Дроп invalid
set firewall name WAN6_IN rule 20 action drop
set firewall name WAN6_IN rule 20 state invalid
set firewall name WAN6_IN rule 20 log
set firewall name WAN6_IN rule 20 description 'Drop invalid'

# Разрешить необходимые ICMPv6 (только критичные типы)
set firewall name WAN6_IN rule 30 action accept
set firewall name WAN6_IN rule 30 protocol ipv6-icmp
set firewall name WAN6_IN rule 30 icmpv6 type 1
set firewall name WAN6_IN rule 30 description 'Allow ICMPv6 Destination Unreachable'

set firewall name WAN6_IN rule 31 action accept
set firewall name WAN6_IN rule 31 protocol ipv6-icmp
set firewall name WAN6_IN rule 31 icmpv6 type 2
set firewall name WAN6_IN rule 31 description 'Allow ICMPv6 Packet Too Big'

set firewall name WAN6_IN rule 32 action accept
set firewall name WAN6_IN rule 32 protocol ipv6-icmp
set firewall name WAN6_IN rule 32 icmpv6 type 3
set firewall name WAN6_IN rule 32 description 'Allow ICMPv6 Time Exceeded'

set firewall name WAN6_IN rule 33 action accept
set firewall name WAN6_IN rule 33 protocol ipv6-icmp
set firewall name WAN6_IN rule 33 icmpv6 type 4
set firewall name WAN6_IN rule 33 description 'Allow ICMPv6 Parameter Problem'

set firewall name WAN6_IN rule 34 action accept
set firewall name WAN6_IN rule 34 protocol ipv6-icmp
set firewall name WAN6_IN rule 34 icmpv6 type 128
set firewall name WAN6_IN rule 34 description 'Allow ICMPv6 Echo Request (ping6)'

# Блокировать Router Advertisement из WAN (защита от rogue RA)
set firewall name WAN6_IN rule 40 action drop
set firewall name WAN6_IN rule 40 protocol ipv6-icmp
set firewall name WAN6_IN rule 40 icmpv6 type 134
set firewall name WAN6_IN rule 40 log
set firewall name WAN6_IN rule 40 description 'Block rogue Router Advertisement'

# Firewall LOCAL
set firewall name WAN6_LOCAL default-action drop
set firewall name WAN6_LOCAL enable-default-log

set firewall name WAN6_LOCAL rule 10 action accept
set firewall name WAN6_LOCAL rule 10 state established
set firewall name WAN6_LOCAL rule 10 state related

set firewall name WAN6_LOCAL rule 20 action drop
set firewall name WAN6_LOCAL rule 20 state invalid
set firewall name WAN6_LOCAL rule 20 log

# Разрешить link-local (для Neighbor Discovery)
set firewall name WAN6_LOCAL rule 30 action accept
set firewall name WAN6_LOCAL rule 30 source address fe80::/10
set firewall name WAN6_LOCAL rule 30 description 'Allow link-local'

# Разрешить необходимый ICMPv6
set firewall name WAN6_LOCAL rule 40 action accept
set firewall name WAN6_LOCAL rule 40 protocol ipv6-icmp
set firewall name WAN6_LOCAL rule 40 icmpv6 type 1
set firewall name WAN6_LOCAL rule 40 description 'Allow ICMPv6 types'

# Разрешить DHCPv6 client (если используется)
set firewall name WAN6_LOCAL rule 50 action accept
set firewall name WAN6_LOCAL rule 50 protocol udp
set firewall name WAN6_LOCAL rule 50 source port 547
set firewall name WAN6_LOCAL rule 50 destination port 546
set firewall name WAN6_LOCAL rule 50 description 'Allow DHCPv6 client'

# Применить firewall
set firewall interface eth0 in name WAN6_IN
set firewall interface eth0 local name WAN6_LOCAL

commit
save

Security sysctl для IPv6:

sudo tee /etc/sysctl.d/99-ipv6-security-hardening.conf > /dev/null <<'EOF'
# IPv6 Security Hardening

# Forwarding (для роутера)
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.forwarding = 1

# Отключить Router Advertisement acceptance (защита от rogue RA)
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.all.accept_ra_defrtr = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.all.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_pinfo = 0

# Отключить autoconf (SLAAC)
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0

# Отключить redirects
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

# Отключить source routing
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Логирование martians
net.ipv6.conf.all.log_martians = 1
net.ipv6.conf.default.log_martians = 1

# Максимум адресов на интерфейсе (защита от RA flood)
net.ipv6.conf.all.max_addresses = 16
net.ipv6.conf.default.max_addresses = 16

# Disable privacy extensions на роутере
net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.default.use_tempaddr = 0

# DAD для всех адресов
net.ipv6.conf.all.dad_transmits = 1
net.ipv6.conf.default.dad_transmits = 1

# ICMPv6 rate limiting (защита от ICMPv6 flood)
net.ipv6.icmp.ratelimit = 1000
EOF

sudo sysctl -p /etc/sysctl.d/99-ipv6-security-hardening.conf

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

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

# Показать IPv6 конфигурацию системы
show system ipv6

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

# IPv6 Neighbor Table (аналог ARP)
show ipv6 neighbors

# Пример вывода:
# IPv6 Address                  Interface    Link-layer Address    State    Age
# fe80::250:56ff:fe12:3456     eth1         00:50:56:12:34:56     REACHABLE 15
# 2001:db8:1::100              eth1         00:50:56:12:34:57     STALE     120

# IPv6 Routing Table
show ipv6 route

# IPv6 BGP (если используется)
show bgp ipv6 summary
show bgp ipv6

# Router Advertisement информация
show ipv6 route | grep RA

# ICMPv6 statistics
show ipv6 statistics

# Сбросить neighbor cache
reset ipv6 neighbors

# Сбросить route cache
reset ipv6 route cache

Проверка Neighbor Discovery

# Мониторинг NDP в реальном времени
sudo tcpdump -i eth1 -nn icmp6

# Фильтр для конкретных типов ICMPv6:
# Type 133: Router Solicitation
# Type 134: Router Advertisement
# Type 135: Neighbor Solicitation
# Type 136: Neighbor Advertisement
# Type 137: Redirect

# Только Neighbor Solicitation/Advertisement
sudo tcpdump -i eth1 -nn 'icmp6 and (ip6[40] == 135 or ip6[40] == 136)'

# Только Router Advertisement
sudo tcpdump -i eth1 -nn 'icmp6 and ip6[40] == 134'

Sysctl мониторинг

# Все IPv6 параметры
sysctl -a | grep net.ipv6

# Проверить forwarding
sysctl net.ipv6.conf.all.forwarding

# Проверить multipath hashing
sysctl net.ipv6.fib_multipath_hash_policy
# 0 = layer3 (src/dst IP only)
# 1 = layer4 (src/dst IP + ports)

# Neighbor table статистика
sysctl net.ipv6.neigh.default.gc_thresh1
sysctl net.ipv6.neigh.default.gc_thresh2
sysctl net.ipv6.neigh.default.gc_thresh3

# Проверить текущее количество neighbors
ip -6 neigh show | wc -l

# Route table size
sysctl net.ipv6.route.max_size
ip -6 route show | wc -l

Performance мониторинг

# IPv6 statistics
cat /proc/net/snmp6

# Ключевые метрики:
# Ip6InReceives - входящие пакеты
# Ip6OutRequests - исходящие пакеты
# Ip6InDiscards - дропы на входе
# Ip6OutDiscards - дропы на выходе
# Icmp6InMsgs - входящие ICMPv6 сообщения
# Icmp6OutMsgs - исходящие ICMPv6 сообщения

# IPv6 routing statistics
cat /proc/net/ipv6_route

# Neighbor table statistics
cat /proc/net/ndisc_cache

# ICMPv6 statistics detail
netstat -s -6 | grep -i icmp

Диагностика проблем

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

# Traceroute для IPv6
traceroute6 2001:4860:4860::8888

# MTU Path Discovery
ping6 -M do -s 1400 2001:4860:4860::8888

# Проверить IPv6 DNS resolution
host -t AAAA google.com
dig google.com AAAA

# Проверить DHCPv6 client
show dhcpv6 client leases

# Логи для IPv6 проблем
show log | match -i ipv6
show log | match -i icmp6
show log | match -i neighbor

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

1. IPv6 forwarding не работает

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

Проверка:

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

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

Решение:

# Удалить disable-forwarding если присутствует
delete system ipv6 disable-forwarding

commit
save

# Проверить в ядре
sudo sysctl -w net.ipv6.conf.all.forwarding=1

# Проверить firewall (может блокировать IPv6 форвардинг)
show firewall

2. Duplicate Address Detection (DAD) failures

Симптомы: Интерфейс не получает IPv6 адрес, логи показывают “duplicate address detected”.

Проверка:

# Проверить состояние адресов
ip -6 addr show

# Если адрес помечен как "dadfailed":
# inet6 2001:db8:1::1/64 scope global tentative dadfailed

# Проверить логи
show log | match "duplicate"
dmesg | grep -i "duplicate address"

# Проверить neighbor table для конфликтующего адреса
show ipv6 neighbors | grep 2001:db8:1::1

Решение:

# Вариант 1: Изменить адрес на уникальный
delete interfaces ethernet eth1 address 2001:db8:1::1/64
set interfaces ethernet eth1 address 2001:db8:1::2/64
commit
save

# Вариант 2: Найти и исправить устройство с дублирующимся адресом
# Использовать tcpdump для поиска
sudo tcpdump -i eth1 -nn 'icmp6 and ip6[40] == 136'
# Neighbor Advertisement покажет MAC адрес конфликтующего устройства

# Вариант 3: Временно отключить strict-dad для восстановления
delete system ipv6 strict-dad
commit

# После исправления конфликта - включить обратно
set system ipv6 strict-dad
commit
save

3. Neighbor table переполнена

Симптомы: “Neighbor table overflow” в логах, невозможность обнаружить новые IPv6 хосты.

Проверка:

# Текущее количество neighbors
ip -6 neigh show | wc -l

# Проверить thresholds
sysctl net.ipv6.neigh.default.gc_thresh1
sysctl net.ipv6.neigh.default.gc_thresh2
sysctl net.ipv6.neigh.default.gc_thresh3

# Если количество neighbors близко к gc_thresh3 - проблема

Решение:

# Увеличить neighbor table size через VyOS
set system ipv6 neighbor table-size 16384
commit
save

# Временно увеличить через sysctl
sudo sysctl -w net.ipv6.neigh.default.gc_thresh1=4096
sudo sysctl -w net.ipv6.neigh.default.gc_thresh2=8192
sudo sysctl -w net.ipv6.neigh.default.gc_thresh3=16384

# Постоянная конфигурация
sudo tee /etc/sysctl.d/99-ipv6-neighbor-fix.conf > /dev/null <<'EOF'
net.ipv6.neigh.default.gc_thresh1 = 4096
net.ipv6.neigh.default.gc_thresh2 = 8192
net.ipv6.neigh.default.gc_thresh3 = 16384
EOF

sudo sysctl -p /etc/sysctl.d/99-ipv6-neighbor-fix.conf

# Очистить STALE записи
sudo ip -6 neigh flush dev eth1 nud stale

4. ECMP не балансирует трафик равномерно

Симптомы: Весь IPv6 трафик идет через один путь, несмотря на наличие ECMP.

Проверка:

# Проверить наличие multipath routes
show ipv6 route

# Должны видеть несколько next-hops
# Example:
# S>  2001:db8:100::/48 [1/0] via 2001:db8:1::1, eth0
#                              via 2001:db8:1::2, eth1

# Проверить multipath hash policy
sysctl net.ipv6.fib_multipath_hash_policy
# 0 = layer3 (плохо для балансировки)
# 1 = layer4 (хорошо)

# Проверить VyOS конфигурацию
show configuration system ipv6 | grep multipath

Решение:

# Включить layer4-hashing
set system ipv6 multipath layer4-hashing
commit
save

# Проверить применение
sysctl net.ipv6.fib_multipath_hash_policy
# Должно быть: 1

# Если все еще не работает - проверить веса маршрутов
# BGP: проверить что пути имеют одинаковый вес
show bgp ipv6 <prefix>

# Статические маршруты: проверить distance
show ipv6 route static

5. Rogue Router Advertisement

Симптомы: Клиенты получают некорректные default routes, сеть нестабильна.

Проверка:

# Мониторить RA в сети
sudo tcpdump -i eth1 -nn 'icmp6 and ip6[40] == 134' -v

# Проверить откуда приходят RA
# Вывод покажет source MAC и link-local адрес

# Проверить клиентские маршруты
# На клиенте:
ip -6 route show | grep default
# Должен быть только один default route от легитимного роутера

Решение:

# Вариант 1: Блокировать RA на firewall
set firewall name LAN_IN rule 10 action drop
set firewall name LAN_IN rule 10 protocol ipv6-icmp
set firewall name LAN_IN rule 10 icmpv6 type 134
set firewall name LAN_IN rule 10 description 'Block rogue RA from LAN'

set firewall interface eth1 in name LAN_IN

commit
save

# Вариант 2: Использовать RA Guard (требует switch support)
# Настроить на managed switch RA Guard для блокировки RA от клиентских портов

# Вариант 3: Найти источник rogue RA
# Использовать tcpdump вывод для определения MAC адреса
# Отключить порт на switch или устройство

# Вариант 4: Включить RA Guard через ebtables (Linux bridge)
# Если VyOS работает как bridge:
sudo ebtables -A FORWARD -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type router-advertisement -j DROP

6. ICMPv6 “Packet Too Big” игнорируется (PMTUD failure)

Симптомы: Большие пакеты не доставляются, соединения зависают после handshake.

Проверка:

# Тест с большим пакетом
ping6 -M do -s 1400 2001:4860:4860::8888
# Если timeout - PMTUD не работает

# Проверить firewall
show firewall

# ICMPv6 type 2 (Packet Too Big) должен быть разрешен

Решение:

# Разрешить ICMPv6 Type 2 (Packet Too Big) в firewall
set firewall name WAN6_IN rule 100 action accept
set firewall name WAN6_IN rule 100 protocol ipv6-icmp
set firewall name WAN6_IN rule 100 icmpv6 type 2
set firewall name WAN6_IN rule 100 description 'Allow Packet Too Big for PMTUD'

set firewall name WAN6_LOCAL rule 100 action accept
set firewall name WAN6_LOCAL rule 100 protocol ipv6-icmp
set firewall name WAN6_LOCAL rule 100 icmpv6 type 2

commit
save

# Альтернатива: MSS clamping для TCP
# set firewall modify MSS_CLAMP rule 10 action modify
# set firewall modify MSS_CLAMP rule 10 protocol tcp
# set firewall modify MSS_CLAMP rule 10 tcp flags syn
# set firewall modify MSS_CLAMP rule 10 set tcp-mss 1380

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

1. IPv6 Forwarding

  • Оставлять включенным на всех роутерах (по умолчанию)
  • Отключать только на чистых endpoint системах
  • Проверять после каждого обновления VyOS

2. Strict DAD

  • Включать в production средах для предотвращения конфликтов
  • Обязательно в cloud environments (Yandex Cloud, VK Cloud)
  • Мониторить логи на DAD failures

3. Multipath Layer4 Hashing

  • Всегда включать при использовании ECMP
  • Обеспечивает per-flow балансировку
  • Предотвращает переупорядочивание пакетов TCP

4. Neighbor Table Size

  • Выбирать размер на основе количества хостов в сети
  • Для роутеров с BGP: увеличивать до 16384-32768
  • Мониторить заполнение neighbor cache

5. Nexthop Tracking

  • Включать no-resolve-via-default в BGP сетях
  • Предотвращает false-positive доступность peers
  • Критично для IBGP с loopback адресами

6. Security

  • Блокировать rogue Router Advertisements на LAN
  • Разрешать только необходимые ICMPv6 типы
  • Отключать прием RA на роутерах (accept_ra=0)
  • Отключать source routing и redirects

7. Router Advertisement

  • Использовать managed-flag для DHCPv6 адресации
  • Настраивать reasonable lifetime значения
  • Не отправлять RA на WAN интерфейсах

8. Performance

  • Увеличивать neighbor/route table для больших сетей
  • Настраивать TCP параметры для WAN > 100 Mbps
  • Использовать BBR congestion control
  • Оптимизировать GC intervals для neighbor table

9. Monitoring

  • Мониторить neighbor table usage
  • Отслеживать DAD failures
  • Проверять ECMP балансировку
  • Логировать rogue RA attempts

10. Documentation

  • Документировать все sysctl изменения
  • Хранить конфигурацию в /etc/sysctl.d/
  • Использовать описательные имена файлов (99-ipv6-*.conf)
  • Тестировать изменения в staging перед production

Заключение

Правильная конфигурация системных параметров IPv6 в VyOS обеспечивает стабильную, производительную и безопасную работу IPv6 сети. Настройка forwarding, strict DAD, multipath hashing, neighbor table и других параметров позволяет оптимизировать роутер под конкретные требования - от простого dual-stack gateway для малого офиса до высокопроизводительного IPv6 роутера для Data Center или ISP сети.

Ключевые моменты:

  1. Forwarding должен быть включен на роутерах (по умолчанию в VyOS)
  2. Strict DAD предотвращает конфликты адресов в автоматизированных средах
  3. Layer 4 hashing критичен для корректной работы ECMP
  4. Neighbor table size должен соответствовать размеру сети
  5. Security hardening через sysctl и firewall защищает от атак
  6. Monitoring позволяет выявлять проблемы до их влияния на production

Следование лучшим практикам и регулярный мониторинг обеспечивают надежную работу IPv6 инфраструктуры в современных cloud и enterprise сетях.