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
- При назначении IPv6 адреса, система отправляет Neighbor Solicitation (NS) для проверки уникальности
- Если другой узел использует этот адрес, он ответит Neighbor Advertisement (NA)
- При получении 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
- Сохранение порядка пакетов: Все пакеты одной TCP/UDP сессии идут по одному пути
- Лучшее распределение: Более равномерная балансировка между путями
- Избежание переупорядочивания: Предотвращает TCP retransmits из-за out-of-order пакетов
- 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 хостов | 16384 | Data centers |
| > 15000 хостов | 32768 | ISP, крупные ЦОД |
Проверка
# Показать текущие 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_thresh3Neighbor 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.confNexthop 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.confPrivacy 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=14400Duplicate 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=0Router 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=1Performance 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 neighbors2. 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 RA3. 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
savePerformance 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.confConntrack 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-hashsize5. 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
saveSecurity 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 -lPerformance мониторинг
# 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 firewall2. 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
save3. 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 stale4. 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 static5. 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 DROP6. 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 сети.
Ключевые моменты:
- Forwarding должен быть включен на роутерах (по умолчанию в VyOS)
- Strict DAD предотвращает конфликты адресов в автоматизированных средах
- Layer 4 hashing критичен для корректной работы ECMP
- Neighbor table size должен соответствовать размеру сети
- Security hardening через sysctl и firewall защищает от атак
- Monitoring позволяет выявлять проблемы до их влияния на production
Следование лучшим практикам и регулярный мониторинг обеспечивают надежную работу IPv6 инфраструктуры в современных cloud и enterprise сетях.