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
ссылка на оригинал статьи https://habr.com/ru/post/713228/
Добавить комментарий