IPv6 маршрутизация в Linux требует понимания ключевых отличий от привычного IPv4. Это руководство предоставляет проверенные инструкции для настройки статической маршрутизации, организации туннелей IPv6 поверх IPv4 и внедрения динамических протоколов OSPFv3 и BGP. Каждый раздел содержит конкретные команды и конфигурации, которые работают на современных дистрибутивах Linux в 2026 году.
Вы освоите диагностику текущего состояния сети, научитесь управлять автоматической настройкой через Router Advertisements и получите алгоритм поиска проблем при их возникновении. Инструкции проверены на Ubuntu 22.04 LTS, AlmaLinux 9 и Debian 11 Bullseye.
Основы и подготовка: проверяем окружение и настраиваем статическую маршрутизацию IPv6
Настройка IPv6 начинается с проверки текущего состояния сети. Эта процедура снижает риск ошибок при внесении изменений в рабочую среду. Статическая маршрутизация служит основой для всех сложных конфигураций, включая туннелирование и динамические протоколы.
Диагностика текущего состояния сети: команды `ip -6`, которые нужно знать
Перед изменением конфигурации выполните три базовые команды для анализа текущего состояния IPv6.
ip -6 addr show
Эта команда показывает все IPv6-адреса на интерфейсах. В выводе обратите внимание на три типа адресов:
- link-local (fe80::/10) - создается автоматически на каждом интерфейсе, работает только в пределах одного сегмента сети.
- Unique Local Address (ULA, fd00::/8) - аналог приватных адресов IPv4 (10.0.0.0/8, 192.168.0.0/16).
- Global Unicast Address (GUA, 2000::/3) - публичные адреса для выхода в интернет.
ip -6 route show
Команда отображает таблицу маршрутизации IPv6. Проверьте наличие маршрута по умолчанию (default via). Его отсутствие означает, что система не имеет выхода в IPv6-сеть.
ip -6 neigh show
Эта команда выводит таблицу соседей Neighbor Discovery - аналог ARP-таблицы для IPv6. Здесь отображаются MAC-адреса устройств в одном сегменте сети.
Пошаговая настройка статического IPv6-адреса и маршрута по умолчанию
Статическая конфигурация обеспечивает предсказуемость работы сети. Выберите метод, соответствующий вашему дистрибутиву.
1. Настройка через Netplan (Ubuntu 22.04 и новее)
Создайте или отредактируйте файл конфигурации в /etc/netplan/
network:
version: 2
ethernets:
eth0:
addresses:
- 2001:db8:1::1/64
routes:
- to: ::/0
via: 2001:db8:1::fe
nameservers:
addresses: [2001:4860:4860::8888]
accept-ra: no
Ключевой параметр accept-ra: no отключает автоматическую настройку через Router Advertisements, предотвращая конфликты со статическими адресами. Примените конфигурацию командой sudo netplan apply.
2. Настройка через NetworkManager (RHEL, AlmaLinux, Rocky Linux)
sudo nmcli con mod "Wired connection" ipv6.addresses "2001:db8:1::1/64"
sudo nmcli con mod "Wired connection" ipv6.gateway "2001:db8:1::fe"
sudo nmcli con mod "Wired connection" ipv6.method "manual"
sudo nmcli con mod "Wired connection" ipv6.ignore-auto-routes true
sudo nmcli con up "Wired connection"
Параметр ipv6.ignore-auto-routes true выполняет ту же функцию, что и accept-ra: no в Netplan.
3. Ручное управление через iproute2
Для временной настройки или тестирования используйте команды iproute2:
sudo ip -6 addr add 2001:db8:1::1/64 dev eth0
sudo ip -6 route add default via 2001:db8:1::fe dev eth0
Эти изменения сбросятся после перезагрузки. Для отката удалите адрес и маршрут:
sudo ip -6 addr del 2001:db8:1::1/64 dev eth0
sudo ip -6 route del default via 2001:db8:1::fe dev eth0
Автоматизация и обнаружение: работа с Neighbor Discovery и Router Advertisements
Neighbor Discovery Protocol (NDP) заменяет ARP и ICMP-редиректы в IPv6. Router Advertisements (RA) - механизм автоматической настройки клиентов. Маршрутизатор рассылает RA-сообщения с префиксом сети, что позволяет клиентам сгенерировать себе GUA-адрес методом SLAAC.
Флаги в RA-сообщениях управляют поведением клиентов:
- M-flag (Managed) - указывает клиентам использовать DHCPv6 для получения адресов.
- O-flag (Other) - клиенты получают адреса через SLAAC, но дополнительную информацию (DNS-серверы) запрашивают у DHCPv6.
Настройка маршрутизатора: запускаем демон radvd для автоматической раздачи адресов
Для раздачи IPv6-адресов в локальной сети настройте демон radvd на Linux-сервере.
Установите пакет в зависимости от дистрибутива:
# Ubuntu/Debian
sudo apt install radvd
# RHEL/AlmaLinux/Rocky
sudo dnf install radvd
Создайте конфигурационный файл /etc/radvd.conf:
interface eth0 {
AdvSendAdvert on;
prefix 2001:db8:1::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 {};
AdvManagedFlag off;
AdvOtherConfigFlag on;
};
Параметр AdvAutonomous on включает SLAAC. AdvOtherConfigFlag on указывает клиентам запрашивать DNS-серверы через DHCPv6. RDNSS задает адреса DNS-серверов Google.
Перед запуском radvd включите форвардинг IPv6-пакетов:
sudo sysctl -w net.ipv6.conf.all.forwarding=1
echo "net.ipv6.conf.all.forwarding=1" | sudo tee -a /etc/sysctl.conf
Запустите и проверьте работу демона:
sudo systemctl start radvd
sudo systemctl enable radvd
sudo systemctl status radvd
Для диагностики проблем с RA используйте tcpdump:
sudo tcpdump -i eth0 -vvv -s0 icmp6 and ip6[40] == 134
Фильтр ip6[40] == 134 захватывает только RA-сообщения (тип ICMPv6 134).
Туннелирование IPv6 поверх IPv4: 6in4 и 6to4 для доступа к глобальной сети
Туннелирование решает проблему отсутствия нативного IPv6 у интернет-провайдера. Две основные технологии - 6in4 и 6to4 - отличаются принципом работы и сферами применения.
Стабильный туннель 6in4: регистрация у broker и настройка в Linux
6in4 - статический туннель, который требует публичного IPv4-адреса на вашей стороне. Hurricane Electric предоставляет бесплатный туннельный брокер с префиксом /64 или /48.
Пошаговая настройка:
- Зарегистрируйтесь на сайте tunnelbroker.net и создайте Regular Tunnel.
- Укажите ваш публичный IPv4-адрес в поле "IPv4 Endpoint".
- Скопируйте параметры туннеля: Server IPv4 Address, Client IPv6 Address, Routed /64.
- На Linux-сервере создайте туннельный интерфейс:
sudo ip tunnel add he-ipv6 mode sit remote 216.66.86.114 local 192.0.2.1 ttl 255
sudo ip link set he-ipv6 up
sudo ip addr add 2001:470:1f0b:1f2::2/64 dev he-ipv6
sudo ip -6 route add default via 2001:470:1f0b:1f2::1 dev he-ipv6
Замените адреса на полученные от брокера. Для автоматизации создайте скрипт /usr/local/bin/setup-he-tunnel.sh:
#!/bin/bash
ip tunnel del he-ipv6 2>/dev/null
ip tunnel add he-ipv6 mode sit remote 216.66.86.114 local $(curl -4 ifconfig.co) ttl 255
ip link set he-ipv6 up
ip addr add 2001:470:1f0b:1f2::2/64 dev he-ipv6
ip -6 route add default via 2001:470:1f0b:1f2::1 dev he-ipv6
echo "nameserver 2001:470:20::2" > /etc/resolv.conf
Проверьте работоспособность туннеля:
ping6 -c 3 ipv6.google.com
curl -6 ifconfig.co
Команда должна вернуть ваш IPv6-адрес от Hurricane Electric.
6in4 vs 6to4: сравниваем технологии для выбора оптимального решения
| Параметр | 6in4 | 6to4 |
|---|---|---|
| Принцип работы | Статический туннель между вашим адресом и broker | Автоматическое туннелирование через anycast-адрес 192.88.99.1 |
| Требования | Публичный статический IPv4 | Любой публичный IPv4 |
| Стабильность | Высокая, зависит только от broker | Низкая, зависит от маршрутизации до anycast |
| Производительность | Предсказуемая | Переменная, возможны латентности |
| Сложность настройки | Средняя, требует регистрации | Низкая, работает "из коробки" |
Используйте 6in4 для серверов и критичной инфраструктуры, где важна стабильность. 6to4 подходит для временного тестирования или клиентских устройств, но не для продакшен-сред.
Для диагностики туннеля выполните:
traceroute6 -n ipv6.google.com
Первым хопом должен быть endpoint туннельного брокера.
Динамическая маршрутизация: настройка OSPFv3 и BGP для IPv6
Динамические протоколы автоматизируют обновление таблиц маршрутизации в сложных сетях. OSPFv3 работает внутри автономной системы, BGP - между разными автономными системами.
OSPFv3 использует link-local адреса для установки соседства, что отличает его от OSPFv2. BGP для IPv6 поддерживает мультипротокольные расширения MP-BGP, которые позволяют передавать IPv6-префиксы через TCP-сессии IPv4 или IPv6.
Внутренняя маршрутизация: базовая конфигурация OSPFv3 в FRR
FRR (Free Range Routing) - популярный набор демонов динамической маршрутизации для Linux. Установите его на Ubuntu 22.04:
sudo apt install frr frr-pythontools
Включите демон ospf6d в файле /etc/frr/daemons:
ospf6d=yes
Создайте базовую конфигурацию OSPFv3 в /etc/frr/frr.conf:
!
interface eth0
ipv6 ospf6 area 0.0.0.0
ipv6 ospf6 network broadcast
!
router ospf6
router-id 1.1.1.1
area 0.0.0.0 range 2001:db8:1::/64
!
Параметр router-id должен быть уникальным в пределах автономной системы. Используйте формат IPv4-адреса даже для OSPFv3.
Перезапустите FRR и проверьте соседство:
sudo systemctl restart frr
vtysh -c "show ipv6 ospf neighbor"
vtysh -c "show ipv6 route ospf"
Команда show ipv6 ospf neighbor отобразит состояние соседей. В колонке State должно быть Full для установленного соседства.
Для настройки BGP-сессии с IPv6 создайте конфигурацию в том же файле frr.conf:
router bgp 64512
bgp router-id 192.0.2.1
neighbor 2001:db8:2::1 remote-as 64513
!
address-family ipv6 unicast
neighbor 2001:db8:2::1 activate
network 2001:db8:1::/64
exit-address-family
ASN 64512 - ваш номер автономной системы. Для тестовых сетей используйте диапазон 64512-65534.
Более сложные сценарии настройки BGP, включая фильтрацию префиксов и настройку атрибутов пути, рассмотрены в отдельном руководстве по диагностике динамической маршрутизации.
Инструменты отладки: быстро находим и решаем проблемы с IPv6
Методика пошаговой диагностики сокращает время поиска проблем. Начните с локальной конфигурации и последовательно двигайтесь к удаленному хосту.
Пошаговая диагностика проблемы: от команды `ip -6 route get` до `traceroute6`
Рассмотрим сценарий: хост 2001:db8:10::1 не пингуется.
Шаг 1: Проверка маршрута
ip -6 route get 2001:db8:10::1
Команда показывает, какой именно маршрут и через какой интерфейс будет использован для этого адреса. Если вывод содержит "RTNETLINK answers: Network is unreachable", проверьте таблицу маршрутизации командой ip -6 route show.
Шаг 2: Проверка соседа
Определите next-hop из вывода предыдущей команды. Например, если next-hop fe80::1:1%eth0, выполните:
ping6 -c 3 fe80::1:1%eth0
Синтаксис %eth0 указывает, через какой интерфейс отправлять пакеты на link-local адрес. Если пинг не проходит, проверьте физическое соединение и настройки VLAN.
Шаг 3: Трассировка маршрута
traceroute6 -n 2001:db8:10::1
Ключ -n отключает reverse DNS lookup, ускоряя вывод. Анализируйте результат:
- Звездочки (* * *) на определенном хопе - пакеты теряются на этом маршрутизаторе.
- Сообщение "!N" - сеть недостижима.
- Сообщение "!H" - хост недостижим.
Шаг 4: Проверка фаервола
sudo ip6tables -L -v -n
Убедитесь, что правила не блокируют нужный трафик. Для временного отключения фаервола выполните:
sudo ip6tables -P INPUT ACCEPT
sudo ip6tables -P FORWARD ACCEPT
sudo ip6tables -P OUTPUT ACCEPT
sudo ip6tables -F
Шаг 5: Анализ с помощью mtr
Утилита mtr сочетает функции ping и traceroute, показывая потери пакетов на каждом хопе:
mtr -6 -n -r -c 100 2001:db8:10::1
Ключ -c 100 отправляет 100 пакетов на каждый хоп, -r включает режим отчета.
Для комплексного мониторинга сетевой инфраструктуры, включая сбор метрик OSPF и BGP, используйте готовые конфигурации Prometheus и Grafana.
Типичные ошибки и их решения:
- "Network is unreachable" - отсутствует маршрут до сети. Добавьте маршрут через
ip -6 route add. - "No route to host" - маршрут есть, но хост не отвечает. Проверьте фаервол на целевом хосте.
- "Address unreachable" - проблема на канальном уровне. Проверьте таблицу соседей
ip -6 neigh show.
Для автоматизации работы с ИИ-моделями в процессе разработки и документирования сетевых конфигураций можно использовать сервис AiTunnel, который предоставляет единый API для более 200 нейросетей, включая GPT и Claude, с оплатой в рублях без необходимости VPN.