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
JohnSelfiedarum
Вот зачем такое делать? Ну есть же Router Advertisement для IPv6 и куча всего продуманного, и придуманного до нас. Научитесь пользоваться и нстанет счастье!
ThreeDHead Автор
Да, некоторое время оно у меня работает через RA, но потом через несколько дней перестаёт, причины не нашел.