OSPFv3 - это версия OSPF для IPv6. Его основные функции по-прежнему аналогичны функциям OSPFv2, используемым в сетях IPv4.

Существует несколько разных способов разжечь холивар обеспечить связность между хостами (хост <--> ротуер) по IPv6:

  • link-local - обеспечено сразу, но без доступа за пределы канала;

  • Выделяется P2P как мы это привыкли делать в IPv4 + указывается маршрут к хосту на котором висит иной IPv6 или сеть;

  • Сеть хоста одним адресом навешиваем на ротуре, то же самое как в IPv4;

  • На роутере указываем маршрут к хосту через link-local, на хосте в дефолт в сторону роутера, так же через link-local;

  • То же самое, только с унифицированным дефолтом из хоста через fe80::1.

Цель задачи

Прописать IPv6-адрес на виртуальной машине (или тысячи их), после этого на ней появится IPv6-связность с миром. Миниму ручных движений.

Обеспечить IPv6 связность виртуальной машины с роутером:

  • посредством OSPFv3 передать на роутер IPv6-сети виртуальной машины;

  • посредством OSPFv3 принять от роутера default gateway;

  • вся магия должна быть обеспечена за счет механизма link-local.

Топология:

[ Virtual Machine ] -> [ Router ] -> [ Internet ]
  • Виртуальная машина - Debian/Linux

  • Router - Extreme Networks Blackdiamond 8810

Router

Включаем OSPFv3:

enable ospfv3

Создаём область 0.0.0.80:

create ospfv3 domain OSPF-Default area 0.0.0.80

Добавляем влан my_vlan в созданную область:

configure ospfv3 add vlan my_vlan instance-id 0 area 0.0.0.80 link-type broadcast

На сервере видим что роутер начал посылать ospfv3 hello:

root@linux:/# tcpdump -i any -c 100 -n proto ospf
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
14:40:20.006853 eth0  M   IP6 fe80::1 > ff02::5: OSPFv3, Hello, length 36
14:40:30.018608 eth0  M   IP6 fe80::1 > ff02::5: OSPFv3, Hello, length 36
14:40:40.031349 eth0  M   IP6 fe80::1 > ff02::5: OSPFv3, Hello, length 36
14:40:50.043212 eth0  M   IP6 fe80::1 > ff02::5: OSPFv3, Hello, length 36
14:41:00.056252 eth0  M   IP6 fe80::1 > ff02::5: OSPFv3, Hello, length 36

Virtual Machine (Linux VM)

IPv6 связность

Тут есть два способа:

  • навешать IPv6 на loopback-интерфейс;

  • на интерфейс с внешней связностью (eth0).

Выбираете вариант по вкусу и от выполняемых задач. Там же указываем "default gateway", но об этом конце статьи.

Если на lo, то так:

iface lo inet6 static
        address 2001:db8::1/64
        up ip -6 route add default via fe80::1 dev eth0

На "физический" интерфейс (eth0):

iface eth0 inet6 static
       address 2001:db8::1/64
       gateway fe80::1

После правки /etc/network/interfaces, виртуалку придется перезагрузить.

Если хочется без правки и/или без перезагрузки, то выполните это (eth0):

ip -6 addr add 2001:db8::1/64 dev eth0
ip -6 route add default via fe80::1 dev eth0

Динамическая маршрутизация

Установка FRR:

apt update && apt install frr -y

Включаем сервис OSPFv3 (сервис FRR ospf6d):

sed -i s/ospf6d=no/ospf6d=yes/g /etc/frr/daemons

Для удобства создаем переменную с “физическим” интерфейсом:

IFACE=$(ip route | sed '1p;d' | grep ^default | awk '{print $5}');

Конфигурируем и применяем конфигурацию:

vtysh << EOF
configure terminal
!
router ospf6
 ospf6 router-id 0.0.0.80
 area 0.0.0.80 import-list import
 area 0.0.0.80 export-list export
 interface $IFACE area 0.0.0.80
 interface lo area 0.0.0.80
!
ipv6 access-list export permit any
ipv6 access-list import permit fe80::/64
ipv6 access-list import deny any
!
end
end
write memory
EOF

Тут всё достаточно просто: создали область, привязали к интерфейсам, прописали фильтра.

Проверка

На роутере

Маршруты, возникшие посредством OSPFv3:

BD-8810 # show iproute ipv6 origin ospfv3
Ori Destination                                   Mtr  Flags         Duration
    Gateway                                       Interface
#oa 2001:db8::/64                                 50   UG-D---um--f- 0d:1h:0m:36s 
    fe80::8414:12ff:fe44:5225                     my_vlan

Маршруты во влане my_vlan:

BD-8810 # show iproute ipv6 my_vlan
Ori Destination                                   Mtr  Flags         Duration
    Gateway                                       Interface
#oa 2001:db8::/64                                 50   UG-D---um--f- 0d:1h:2m:54s 
    fe80::8414:12ff:fe44:5225                     my_vlan
#d  fe80::%my_vlan/64                                1    U------um---- 0d:18h:29m:47s 
    fe80::1                                       my_vlan
#d  fe80::%my_vlan/64                                1    U------um---- 33d:18h:52m:51s 
    fe80::204:96ff:fe83:b9d5                      my_vlan

Данные из LSDB (Link State Database) выводятся такой командой:

show ospfv3 lsdb

На виртуальной машине

Информация о соседях, если подробнее с то с опцией detail:

linux# show ipv6 ospf6 neighbor
Neighbor ID     Pri    DeadTime    State/IfState         Duration I/F[State]
1.2.3.4           1    00:00:32     Full/DR              01:22:48 eth0[BDR]

Маршруты, если подробнее с то с опцией detail:

linux# show ipv6 ospf6 route
*N IA 2001:db8::/64            ::                            lo 01:31:15

Данные из LSDB (Link State Database) выводятся такой командой:

show ipv6 ospf6 database

Debug

В FRR предусмотрена отладка, включается в конфигурации FRR так:

log file /var/log/frr/debug.log
debug ospf6 message all
debug ospf6 neighbor state

FRR Debugging: http://docs.frrouting.org/en/latest/ospf6d.html#ospfv3-debugging

Что за fe80::1?

Во многих дата центрах в качестве маршрута по умолчанию на виртуальных машинах (серверах и пр.) используют для связности статический link-local адрес fe80::1/64 на линках в сторону виртуалок. Таким образом, очень удобно и унифицировано, на виртуалке, использовать его в качестве маршрута по умолчанию.

Где передача default gateway (router->vm)?

На указанном мной роутере Extreme Networks Blackdiamond 8810, к сожалению это не реализовано в OSPFv3. Поэтому я свою задачу до конца так и не решил, потому-то нужно менять роутер или точку терминации на устройстве, умеющего это.

Именно поэтому имеем хак с fe80::1

Но на любом другом роутере можно использовать следующие команды:

Extreme Networks:

enable ospfv3 originate-default always

Cisco:

default-information originate

Cisco man: https://www.cisco.com/c/en/us/support/docs/ip/open-shortest-path-first-ospf/47868-ospfdb9.html

Комментарии (2)


  1. JohnSelfiedarum
    27.01.2023 20:39

    Вот зачем такое делать? Ну есть же Router Advertisement для IPv6 и куча всего продуманного, и придуманного до нас. Научитесь пользоваться и нстанет счастье!


    1. ThreeDHead Автор
      27.01.2023 23:08

      Да, некоторое время оно у меня работает через RA, но потом через несколько дней перестаёт, причины не нашел.