DHCPv6 Server в VyOS

DHCPv6 (Dynamic Host Configuration Protocol for IPv6) - это протокол автоматической конфигурации IPv6-адресов и параметров сети для клиентов. VyOS предоставляет полнофункциональный DHCPv6-сервер для централизованного управления IPv6-адресацией в сети.

Обзор

DHCPv6 используется для:

  • Автоматическое назначение IPv6 адресов: Централизованное управление адресацией
  • Конфигурация параметров: DNS-серверы, домен поиска, NTP-серверы
  • Статические резервирования: Фиксированные адреса для серверов и оборудования
  • Prefix delegation: Делегирование префиксов для роутеров (DHCPv6-PD)
  • Интеграция с SLAAC: Работа совместно с Router Advertisement

DHCPv6 vs SLAAC

ХарактеристикаDHCPv6SLAAC (Stateless)
Назначение адресаStateful (сервер контролирует)Stateless (клиент генерирует)
DNS-серверыДаЧерез RDNSS (RA)
Домен поискаДаЧерез DNSSL (RA)
Централизованное управлениеДаОграниченное
Статические резервированияДаНет
Отслеживание клиентовДа (lease tracking)Нет

Режимы работы:

  • Stateful DHCPv6: Полное управление адресами (managed flag в RA)
  • Stateless DHCPv6: Только параметры, адреса через SLAAC (other-config flag)
  • Гибридный: SLAAC для адресов + DHCPv6 для параметров

Базовая конфигурация

Простой DHCPv6 сервер

# Shared network для DHCPv6
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 address-range start 2001:db8:1::100 stop 2001:db8:1::200

# DNS-серверы
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

# Домен поиска
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 domain-search example.com

# Применить на интерфейс
set service dhcpv6-server shared-network-name LAN interface eth1

commit
save

Router Advertisement для managed режима

DHCPv6 требует Router Advertisement для информирования клиентов:

# Router Advertisement на интерфейсе
set service router-advert interface eth1 prefix 2001:db8:1::/64

# Managed flag (клиенты используют DHCPv6 для адресов)
set service router-advert interface eth1 managed-flag

# Other-config flag (клиенты используют DHCPv6 для параметров)
set service router-advert interface eth1 other-config-flag

commit
save

Статическое резервирование (static mapping)

# Статическое резервирование по DUID
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping server1 identifier 00:01:00:01:12:34:56:78:ab:cd:ef:01:23:45
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping server1 ipv6-address 2001:db8:1::10

commit
save

Примечание: DHCPv6 использует DUID (DHCP Unique Identifier) вместо MAC-адреса.

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

Stateless DHCPv6 (только параметры)

# DHCPv6 для параметров (без адресов)
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
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 domain-search example.com

# НЕ устанавливать address-range (клиенты получают адреса через SLAAC)

set service dhcpv6-server shared-network-name LAN interface eth1

# Router Advertisement без managed flag
set service router-advert interface eth1 prefix 2001:db8:1::/64
set service router-advert interface eth1 other-config-flag  # Только параметры

commit
save

DHCPv6 Prefix Delegation (PD)

Prefix Delegation позволяет делегировать IPv6 префиксы downstream роутерам:

# Prefix delegation pool
set service dhcpv6-server shared-network-name LAN subnet 2001:db8::/48 prefix-delegation prefix 2001:db8:1000::/52 delegated-length 56

# Применить на интерфейс
set service dhcpv6-server shared-network-name LAN interface eth1

commit
save

Downstream роутер запросит /56 префикс из pool 2001:db8:1000::/52.

Множественные shared networks

# LAN 1
set service dhcpv6-server shared-network-name LAN1 subnet 2001:db8:1::/64 address-range start 2001:db8:1::100 stop 2001:db8:1::200
set service dhcpv6-server shared-network-name LAN1 subnet 2001:db8:1::/64 name-server 2001:4860:4860::8888
set service dhcpv6-server shared-network-name LAN1 interface eth1

# LAN 2
set service dhcpv6-server shared-network-name LAN2 subnet 2001:db8:2::/64 address-range start 2001:db8:2::100 stop 2001:db8:2::200
set service dhcpv6-server shared-network-name LAN2 subnet 2001:db8:2::/64 name-server 2001:4860:4860::8888
set service dhcpv6-server shared-network-name LAN2 interface eth2

commit
save

Lease time configuration

# Настройка времени аренды
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 lease-time default 86400  # 24 часа
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 lease-time minimum 3600   # 1 час
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 lease-time maximum 172800 # 48 часов

commit
save

NTP и SIP серверы

# NTP серверы через DHCPv6
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 nis-server 2001:db8:1::50

# SIP серверы (для VoIP)
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 sip-server-address 2001:db8:1::60

commit
save

Vendor options

# Vendor-specific options
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 vendor-option cisco option 1 value 'option-value'

commit
save

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

Пример 1: Базовый managed DHCPv6

# DHCPv6 сервер
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 address-range start 2001:db8:1::100 stop 2001:db8:1::200
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
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 domain-search example.com
set service dhcpv6-server shared-network-name LAN interface eth1

# Router Advertisement
set service router-advert interface eth1 prefix 2001:db8:1::/64
set service router-advert interface eth1 managed-flag
set service router-advert interface eth1 other-config-flag

# IPv6 на интерфейсе
set interfaces ethernet eth1 address 2001:db8:1::1/64

commit
save

Пример 2: Stateless DHCPv6 + SLAAC

# DHCPv6 только для параметров (без адресов)
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 domain-search example.com
set service dhcpv6-server shared-network-name LAN interface eth1

# Router Advertisement для SLAAC (без managed flag)
set service router-advert interface eth1 prefix 2001:db8:1::/64
set service router-advert interface eth1 other-config-flag  # Только параметры через DHCPv6

# IPv6 на интерфейсе
set interfaces ethernet eth1 address 2001:db8:1::1/64

commit
save

Пример 3: Статические резервирования для серверов

# DHCPv6 pool
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 address-range start 2001:db8:1::100 stop 2001:db8:1::200
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 interface eth1

# Статические резервирования
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping web-server identifier 00:01:00:01:aa:bb:cc:dd:11:22:33:44:55:66
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping web-server ipv6-address 2001:db8:1::10

set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping db-server identifier 00:01:00:01:aa:bb:cc:dd:77:88:99:aa:bb:cc
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping db-server ipv6-address 2001:db8:1::11

set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping dns-server identifier 00:01:00:01:aa:bb:cc:dd:dd:ee:ff:00:11:22
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping dns-server ipv6-address 2001:db8:1::53

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

commit
save

Пример 4: DHCPv6 Prefix Delegation для филиалов

Головной офис (делегирует префиксы):

# DHCPv6 с Prefix Delegation
set service dhcpv6-server shared-network-name WAN subnet 2001:db8::/48 prefix-delegation prefix 2001:db8:1000::/52 delegated-length 56
set service dhcpv6-server shared-network-name WAN interface eth0

# Router Advertisement на WAN
set service router-advert interface eth0 prefix 2001:db8::/64

# IPv6 на WAN интерфейсе
set interfaces ethernet eth0 address 2001:db8::1/64

commit
save

Филиал (запрашивает prefix delegation):

# DHCPv6 client для получения префикса
set interfaces ethernet eth0 dhcpv6-options prefix-delegation interface eth1 address 1
set interfaces ethernet eth0 dhcpv6-options prefix-delegation interface eth1 sla-id 0

# Router Advertisement на LAN для клиентов
set service router-advert interface eth1 prefix ::/64  # Будет использован делегированный префикс

commit
save

Пример 5: Множественные VLAN с DHCPv6

# VLAN 10 - Management
set interfaces ethernet eth1 vif 10 address 2001:db8:10::1/64
set service dhcpv6-server shared-network-name MGMT subnet 2001:db8:10::/64 address-range start 2001:db8:10::100 stop 2001:db8:10::150
set service dhcpv6-server shared-network-name MGMT subnet 2001:db8:10::/64 name-server 2001:db8:10::53
set service dhcpv6-server shared-network-name MGMT interface eth1.10

set service router-advert interface eth1.10 prefix 2001:db8:10::/64
set service router-advert interface eth1.10 managed-flag

# VLAN 20 - Users
set interfaces ethernet eth1 vif 20 address 2001:db8:20::1/64
set service dhcpv6-server shared-network-name USERS subnet 2001:db8:20::/64 address-range start 2001:db8:20::100 stop 2001:db8:20::500
set service dhcpv6-server shared-network-name USERS subnet 2001:db8:20::/64 name-server 2001:4860:4860::8888
set service dhcpv6-server shared-network-name USERS interface eth1.20

set service router-advert interface eth1.20 prefix 2001:db8:20::/64
set service router-advert interface eth1.20 managed-flag

# VLAN 30 - Guest (stateless)
set interfaces ethernet eth1 vif 30 address 2001:db8:30::1/64
set service dhcpv6-server shared-network-name GUEST subnet 2001:db8:30::/64 name-server 2001:4860:4860::8888
set service dhcpv6-server shared-network-name GUEST interface eth1.30

set service router-advert interface eth1.30 prefix 2001:db8:30::/64
set service router-advert interface eth1.30 other-config-flag  # Stateless

commit
save

Пример 6: DHCPv6 с VRF

# VRF для изоляции
set vrf name CUSTOMER-A table 100

# Интерфейс в VRF
set interfaces ethernet eth1 vrf CUSTOMER-A
set interfaces ethernet eth1 address 2001:db8:100::1/64

# DHCPv6 в VRF
set service dhcpv6-server shared-network-name VRF-A subnet 2001:db8:100::/64 address-range start 2001:db8:100::100 stop 2001:db8:100::200
set service dhcpv6-server shared-network-name VRF-A subnet 2001:db8:100::/64 name-server 2001:4860:4860::8888
set service dhcpv6-server shared-network-name VRF-A interface eth1

# Router Advertisement
set service router-advert interface eth1 prefix 2001:db8:100::/64
set service router-advert interface eth1 managed-flag

commit
save

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

Просмотр active leases

# Показать все DHCPv6 leases
show dhcpv6 server leases

# Пример вывода:
# IPv6 address       DUID                                          State
# 2001:db8:1::100    00:01:00:01:12:34:56:78:aa:bb:cc:dd:ee:ff    active

Просмотр статистики

# Статистика DHCPv6 сервера
show dhcpv6 server statistics

# Вывод включает:
# - Количество активных leases
# - Доступные адреса в pool
# - Использование pool (%)

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

# Показать конфигурацию DHCPv6
show configuration service dhcpv6-server

# Показать Router Advertisement
show configuration service router-advert

Логи DHCPv6

# Логи DHCPv6 сервера
show log | match dhcpv6

# Real-time мониторинг
monitor log | match dhcpv6

# Детальные логи (если включен debug)
show log dhcp6

Проверка DUID клиента

На клиенте (Linux):

# Просмотр DUID
cat /var/lib/dhcp/dhclient6.leases | grep ia-na

# Windows PowerShell
Get-NetIPConfiguration | Select-Object InterfaceAlias, IPv6Address

# macOS
ipconfig getv6packet en0

Тестирование с клиента

# Linux - запрос DHCPv6 адреса
sudo dhclient -6 -v eth0

# Просмотр полученного адреса
ip -6 addr show eth0

# Просмотр DNS через DHCPv6
cat /etc/resolv.conf

Проверка Router Advertisement

# На роутере
show ipv6 route

# Отправка RA вручную (для теста)
sudo radvdump

# На клиенте (Linux)
ip -6 route show

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

Проблема: Клиенты не получают IPv6 адреса

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

# 1. Проверка DHCPv6 конфигурации
show configuration service dhcpv6-server

# 2. Проверка Router Advertisement
show configuration service router-advert

# 3. Проверка IPv6 forwarding
sysctl net.ipv6.conf.all.forwarding

# 4. Логи
show log | match dhcpv6

# 5. Проверка интерфейса
show interfaces ethernet eth1

Решение:

# Убедиться, что managed-flag установлен
set service router-advert interface eth1 managed-flag

# Проверить address-range
show configuration service dhcpv6-server shared-network-name LAN

# Перезапуск сервиса (если необходимо)
restart dhcpv6 server

commit
save

Проблема: DHCPv6 работает, но нет DNS

Причина: DNS передается только через DHCPv6 или RDNSS в RA.

Решение:

# Добавить name-server в DHCPv6
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 name-server 2001:4860:4860::8888

# Или использовать RDNSS в Router Advertisement
set service router-advert interface eth1 name-server 2001:4860:4860::8888

commit
save

Проблема: Статическое резервирование не работает

Причина: Неправильный DUID.

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

# Проверка DUID в логах
show log | match dhcpv6 | match DUID

# На клиенте (Linux)
cat /var/lib/dhcp/dhclient6.leases

Решение:

# Использовать правильный DUID из логов
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping server1 identifier <correct-duid>
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping server1 ipv6-address 2001:db8:1::10

commit
save

# Обновить lease на клиенте
# Linux: sudo dhclient -6 -r eth0 && sudo dhclient -6 eth0

Проблема: Prefix Delegation не работает

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

# На сервере - проверка PD конфигурации
show configuration service dhcpv6-server | match prefix-delegation

# На клиенте - проверка dhcpv6-options
show configuration interfaces ethernet eth0 dhcpv6-options

# Логи
show log | match "prefix delegation"

Решение:

# На сервере - убедиться, что PD настроен
set service dhcpv6-server shared-network-name WAN subnet 2001:db8::/48 prefix-delegation prefix 2001:db8:1000::/52 delegated-length 56

# На клиенте - настроить PD
set interfaces ethernet eth0 dhcpv6-options prefix-delegation interface eth1 address 1
set interfaces ethernet eth0 dhcpv6-options prefix-delegation interface eth1 sla-id 0

commit
save

Проблема: DHCPv6 pool исчерпан

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

# Проверка leases
show dhcpv6 server leases

# Статистика использования
show dhcpv6 server statistics

Решение:

# Расширить address-range
delete service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 address-range
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 address-range start 2001:db8:1::100 stop 2001:db8:1::500

# Или уменьшить lease time
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 lease-time default 3600  # 1 час

commit
save

Проблема: Клиенты получают адреса через SLAAC вместо DHCPv6

Причина: Managed flag не установлен в RA.

Решение:

# Установить managed-flag
set service router-advert interface eth1 managed-flag

# Перезапуск RA
restart router-advert

commit
save

# На клиентах обновить конфигурацию
# Linux: sudo dhclient -6 -r eth0 && sudo dhclient -6 eth0

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

1. Выбор правильного режима

# Managed DHCPv6 - для полного контроля
set service router-advert interface eth1 managed-flag

# Stateless - для простоты (SLAAC + DHCPv6 параметры)
set service router-advert interface eth1 other-config-flag

2. Резервирование адресов для критичных сервисов

# Статические резервирования для серверов
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping critical-server identifier <duid>
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping critical-server ipv6-address 2001:db8:1::10

3. Правильный размер pool

Планируйте размер address-range с запасом:

# Для 100 клиентов - pool на 200-300 адресов
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 address-range start 2001:db8:1::100 stop 2001:db8:1::400

4. DNS конфигурация

Всегда настраивайте DNS-серверы:

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
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 domain-search example.com

5. Мониторинг использования pool

Регулярно проверяйте использование:

show dhcpv6 server statistics

6. Lease time для различных сценариев

# Стабильная сеть - длинный lease time
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 lease-time default 86400  # 24 часа

# Guest network - короткий lease time
set service dhcpv6-server shared-network-name GUEST subnet 2001:db8:30::/64 lease-time default 3600  # 1 час

7. Документирование статических резервирований

Документируйте все static mappings:

# Комментарии в конфигурации
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 static-mapping web-server ipv6-address 2001:db8:1::10
# Web server - Apache, production

8. Безопасность

Используйте firewall для защиты DHCPv6:

set firewall ipv6 name LAN_LOCAL rule 100 action accept
set firewall ipv6 name LAN_LOCAL rule 100 protocol udp
set firewall ipv6 name LAN_LOCAL rule 100 destination port 546-547

9. Интеграция с DHCPv4

Поддерживайте dual-stack:

# DHCPv4
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 default-router 192.168.1.1

# DHCPv6
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 address-range start 2001:db8:1::100 stop 2001:db8:1::200

10. Логирование и мониторинг

Настройте логирование для аудита:

set system syslog file dhcpv6.log facility daemon level info

Полезные команды

# Показать DHCPv6 leases
show dhcpv6 server leases

# Статистика
show dhcpv6 server statistics

# Конфигурация DHCPv6
show configuration service dhcpv6-server

# Конфигурация Router Advertisement
show configuration service router-advert

# Логи
show log | match dhcpv6
monitor log | match dhcpv6

# Restart DHCPv6 server
restart dhcpv6 server

# Restart Router Advertisement
restart router-advert

# Проверка IPv6 connectivity
ping 2001:db8:1::100

# IPv6 routing table
show ipv6 route

# Проверка интерфейсов
show interfaces

Интеграция с другими функциями

DHCPv6 + DNS Forwarding

# DHCPv6 указывает на локальный DNS
set service dhcpv6-server shared-network-name LAN subnet 2001:db8:1::/64 name-server 2001:db8:1::1

# DNS Forwarding на роутере
set service dns forwarding listen-address 2001:db8:1::1
set service dns forwarding name-server 2001:4860:4860::8888

DHCPv6 + Firewall

# Разрешить DHCPv6 трафик
set firewall ipv6 name WAN_LOCAL rule 100 action accept
set firewall ipv6 name WAN_LOCAL rule 100 protocol udp
set firewall ipv6 name WAN_LOCAL rule 100 source port 547
set firewall ipv6 name WAN_LOCAL rule 100 destination port 546

DHCPv6 + High Availability

В HA setup DHCPv6 pool должен быть разделен между роутерами или использовать failover (пока не поддерживается в VyOS напрямую).

Заключение

DHCPv6 Server в VyOS предоставляет полнофункциональное управление IPv6 адресацией для современных сетей. Поддержка как stateful (managed), так и stateless режимов, prefix delegation, статических резервирований и интеграция с Router Advertisement делают VyOS мощной платформой для IPv6 развертывания.

Основные преимущества DHCPv6 в VyOS:

  • Полный контроль над IPv6 адресацией
  • Статические резервирования для критичных устройств
  • Prefix Delegation для hierarchical networks
  • Интеграция с SLAAC
  • Централизованное управление параметрами (DNS, NTP)

Рекомендации для production:

  • Выбирайте правильный режим (managed vs stateless)
  • Планируйте размер pool с запасом
  • Используйте статические резервирования для серверов
  • Настраивайте DNS и domain-search
  • Мониторьте использование pool
  • Документируйте все резервирования
  • Интегрируйте с dual-stack (IPv4 + IPv6)
  • Применяйте firewall rules для защиты

DHCPv6 в VyOS обеспечивает enterprise-grade управление IPv6 инфраструктурой с гибкостью конфигурации и надежностью, необходимой для production environments.