» » Подключение сети к глобальному IPv6 пространству

Подключение сети к глобальному IPv6 пространству

Подключение сети к глобальному IPv6 пространствуДанная статья будет посвящаться подключению сети к глобальному IPv6 пространству.

Начнем пожалуй с краткого описания проекта CareNet, который является, по существу, результатом кооперации двух крупнейших Шведских университетов Karolinska Institutet и KTH Royal Institute of Technology.

CareNet представляет собой систему, которая позволяет паллиативных пациентов наблюдать вне больницы. Дома у пациентов устанавливается устройство небольших размеров, имеющее доступ к сети Интернет и подключающееся к серверам CareNet посредством VPN. Составными элементами данного устройства являются средства, осуществляющие доступ к медицинскому порталу, на котором содержится вся информация о пациенте, набор сенсоров, предназначенных для контролирования состояния пациента, и HDVC-клиент. Ко всей медицинской документации имеется свободный доступ как у лечащего врача, так и у самого пациента.

Поскольку наша статья посвящается активации IPv6, нас больше всего интересует центральная часть инфраструктуры CareNet, а не ее клиентская часть.

Центральная часть включает в себя целый ряд серверов и маршрутизаторов, которые располагаются в Стокгольме непосредственно на университетской площадке KTH. Отмечу, что моей основной задачей на протяжении 20 недель было поддержание вышеупомянутой инфраструктуры в рабочем состоянии и наращивание ее функционала. Кстати я поставил себе за задание выполнить активацию IPv6 в этой не очень большой сетевой топологии. Мне хотелось выполнить подключение CareNet к глобальному IPv6 пространству кроме того, что требовалось развернуть IPv6 внутри сети.

Расскажу вам немного про адресацию. Я начал с того, что обратился с просьбой о выделении для меня кусочка лабораторного диапазона IPv6 (так сказать для личной маленькой «песочницы») к администрации университета. В результате этого мне торжественно делегировали префикс 2001:6b0:32::/49. Честно признаюсь, что в начале я даже немного обиделся и снова собрался бежать к ним со своей просьбой. Но немного подумав и вкратце набросав на бумаге так и эдак схему адресации, я пришел к выводу, что 6x1023 адресов мне будет вполне достаточно. После того, как я окончательно определился с адресацией, я выполнил настройку интерфейсов на маршрутизаторах.

Здесь будет весьма уместно отметить, что в CareNet маршрутизаторы не совсем обычные. Они построены на основе Bifrost, которая представляет собой высокопроизводительную аппаратно-программную Linux-платформу. Кстати это университетская разработка, которая на сегодняшний день выходит на коммерческий рынок. Пропускная способность интерфейсов между маршрутизаторами составляет 10 Гбит/с.

Quagga — это программный пакет отвечающий за control plane (маршрутизацию). Теперь я перейду к OSPFv3, внутренней маршрутизации. В качестве динамического протокола маршрутизации я выполнил запуск OSPFv3 (после того, как добавил на интерфейсы маршрутизаторов IPv6 адреса). Все настройки являются базовыми, OSPF-зона 0.0.0.0 одна. Извините, но технически обосновывать выбор OSPF я не стану. Я предпочитаю делать свой выбор, опираясь на названия. Лично мне RIPng не нравится, я бы с удовольствием выбрал IS-IS, но он, к сожалению, не поддерживается Quaggой. Работу с пакетом Quagga я освоил практически моментально, хотя работал с ним впервые. Это связано с тем, что он имеет командный интерфейс аналогичый с Cisco CLI. Приведу для двух маршрутизаторов в качестве примера конфигурации демона ospf6d.

 hostname VR-ospf6d
    !
    router ospf6
    router-id 192.16.126.9
    interface eth1 area 0.0.0.0 #интерфейс в сторону маршрутизатора HR
    interface eth2 area 0.0.0.0 #интерфейс в сторону маршрутизатора KR
    interface dummy0 area 0.0.0.0 #loopback
    !
    hostname KR-ospf6d
    !
    interface eth2 #интерфейс в сторону клиентов и серверной фермы
    ipv6 ospf6 passive #деактивация сообщений OSPF Hello
    !
    router ospf6
    router-id 192.16.126.10
    interface eth2 area 0.0.0.0 #интерфейс в сторону клиентов и серверной фермы
    interface eth0 area 0.0.0.0 #интерфейс в сторону маршрутизатора VR
    interface dummy0 area 0.0.0.0
    !

Теперь поговорим о динамическом выделении адресов, DHCPv6. После активации маршрутизации передо мной встал вопрос, касающийся динамического выделения IPv6-адресов клиентам в сетях доступа и серверам в ферме. Я решил именно на DHCPv6 сервер возложить данную задачу. Пришлось развернуть два DHCPv6-сервера: Dibbler и ISC DHCP. Было решено провести небольшой конкурс по результатам которого должен был остаться функционировать тот сервер, который смог бы быстрее обслужить клиента выделив ему IPv6 адрес. Был уничтожен ISC DHCP, так как расторопнее оказался Dibbler. Ниже приведу для вас пример выполненной настройки диапазона выделяемых адресов:

 vp@dns:~$ cat /etc/dibbler/server.conf
    ...
    option dns-server 2001:6b0:32:0::66 #IPv6 адрес сервера DNS
    class {
    pool 2001:6b0:32:0::0000 - 2001:6b0:32:0::0fff #диапазон выделяемых адресов IPv6
    }
    client duid 0x000100011657fdc9be10f563c5bf {
    address 2001:6b0:32:0::69 #статический адрес Ipv6 для сервера SIP
    }
    ...

Расскажу вам о двух довольно интересных отличиях от привычного многим DHCP для IPv4:

Во-первых следует отметить тот факт, что клиенту DHCPv6 не предоставляет по умолчанию адрес шлюза, которым в нашем конкретном случае был маршрутизатор в Kista. Сам шлюз должен объявить о своем существовании, причем в строгом соответствии с механизмом Neighbor Discovery. Этот механизм подробно описывает RFC 2461. Поэтому я лишь поверхностно упомяну о том, что маршрутизатор, объявляя себя в данном сегменте шлюзом по умолчанию, должен с определенной периодичностью отправлять сообщение Router Advertisement (RA). В нашем случае требуется дополнение конфигурации маршрутизатора KR:

 hostname KR-zebra
    !
    interface eth2 #интерфейс в сторону клиентов и серверной фермы
    no ipv6 nd suppress-ra #не подавлять сообщения RA
    ipv6 nd prefix 2001:6b0:32::/64 no-autoconfig #IPv6 префикс для сегмента
    !

Второй особенностью является то, на каком именно основании DHCPv6-сервер осуществляет выделение статических адресов. В конфигурации сервера DHCPv6 в отличии от DHCPv4 (в нем просто задается MAC-адрес устройства которому требуется выделить постоянный адрес) нужно прописывать DHCP Unique Identifier (DUID). В RFC 3315 можно более подробно прочесть про идентификатор DUID.

Ну с внутренней маршрутизацией мы на этом пожалуй и закончим. Теперь пришла очередь рассмотреть внешнюю маршрутизацию, BGP. Клиенты адреса получили (внутренняя маршрутизация нормально функционирует), теперь необходимо открыть IPv6 доступ к сети Интернет. Я просил администраторов AS 2839 (KTH-LAN) дать мне разрешение на установление с KTH-LAN дополнительной сессии BGP для того, чтобы объявить мой префикс IPv6. Соседство IPv6 BGP было успешно установлено после согласования всех технических деталей. Несколько дней ушло на убеждение автономной системы следующей далее по цепочке (SUNET) выполнить обновление своих входящих BGP-фильтров и выпустить мой префикс в так называемое свободное плавание. Приведу вам конфигурацию демона bgpd:

    hostname VR-bgpd
    !
    router bgp 8973 #номер автономной системы CareNet
    bgp router-id 192.16.126.1
    neighbor 2001:6b0:1:2::1 remote-as 2839 #IPv6 адрес BGP-соседа
    no neighbor 2001:6b0:1:2::1 activate
    !
    address-family ipv6
    network 2001:6b0:32::/49 #объявляемый префикс
    neighbor 2001:6b0:1:2::1 activate
    neighbor 2001:6b0:1:2::1 soft-reconfiguration inbound
    neighbor 2001:6b0:1:2::1 route-map only-default6-in in #входящий фильтр префиксов
    neighbor 2001:6b0:1:2::1 route-map only-carenet6-out out #исходящий фильтр префиксов
    exit-address-family
    !
    ipv6 prefix-list CARENET6 seq 5 permit 2001:6b0:32::/49 #объявляем только 2001:6b0:32::/49
    ipv6 prefix-list DEFAULT6 seq 5 permit ::/0 #принимаем только ::/0
    !
    route-map only-default6-in permit 10
    match ipv6 address prefix-list DEFAULT6
    !
    route-map only-carenet6-out permit 10
    match ipv6 address prefix-list CARENET6
    !

Кроме фильтрации принимаемых и объявляемых префиксов нужно было выполнить активацию идентичных фильтров для трафика, непосредственно пересекающего границу автономной системы (в качестве механизма противодействия различным атакам «IP spoofing»). С этой задачей вполне справится самый простой список контроля доступа ACL. Выполнив настройку BGP и до конца разобравшись со всеми фильтрами я стал ожидать первого ICMPv6 ответа (ping, от ipv6.google.com). Приведу ниже трассировку маршрута.

vp@dns:~$ traceroute6 ipv6.google.com
traceroute to ipv6.l.google.com (2a00:1450:4010:c01::93) from 2001:6b0:32::66, 30 hops max, 24 byte packets
1 kis-lanlink.carenet-se.se (2001:6b0:32::1) 1.13 ms 0.457 ms 0.49 ms
2 lpp01m02-in-x93.1e100.net (2a00:1450:4010:c01::93) 0.944 ms 0.933 ms 1.115 ms
3 br1g-cn6-p2p.gw.kth.se (2001:6b0:1:2::1) 1.261 ms 1.3 ms 1.091 ms
4 * * *
5 t1fre-ae5-v1.sunet.se (2001:6b0:1e:1::36) 1.467 ms 1.256 ms 1.239 ms
6 se-fre.nordu.net (2001:948:0:f051::1) 1.718 ms 1.562 ms 1.463 ms
7 se-tug.nordu.net (2001:948:1:1::3) 1.344 ms 1.315 ms 1.269 ms
8 se-tug2.nordu.net (2001:948:1:5::3) 1.505 ms 1.359 ms 1.287 ms
9 google-gw.nordu.net (2001:948:0:f008::3) 1.443 ms 1.616 ms 1.298 ms
10 2001:4860::1:0:26ec (2001:4860::1:0:26ec) 1.896 ms 2.002 ms 1.911 ms
11 2001:4860::8:0:26e5 (2001:4860::8:0:26e5) 41.025 ms 11.119 ms 11.02 ms
12 2001:4860::2:0:2aaf (2001:4860::2:0:2aaf) 11.223 ms 11.455 ms 11.955 ms
13 2001:4860:0:1::4d0 (2001:4860:0:1::4d0) 22.558 ms 21.472 ms 17.857 ms
14 lpp01m02-in-x93.1e100.net (2a00:1450:4010:c01::93) 10.833 ms 10.878 ms 13.669 ms

Хочется немного рассказать про настройку DNS для выполнения работ с адресами IPv6. С нуля выполнять установку DNS сервера не было необходимости, так как сервер BIND, выполняющий обслуживание диапазон Ipv4, в сети уже был. Были добавлены записи IPv6 к уже имеющимся адресам IPv4 в прямую DNS-зону. Все просто, но пример конфигурации я все же приведу ниже:

 vp@dns:~$ sudo cat /etc/bind/zones/external/carenet-se.se.db
    ...
  ;; Routers' loopacks
    vr IN A 192.16.126.9
    vr IN AAAA 2001:6b0:32:10::1
    ...

Пришлось немного поработать с reverse DNS lookup (обратной зоной). Возникла необходимость в создании отдельного файла с названием 2.3.0.0.0.b.6.0.1.0.0.2.ip6.arpa. Ниже добавлены (в трудном к восприятию формате), для всех IPv6-систем в сети, обратные DNS-записи. Часть конфигурации имеет вид: vp@dns:~$ sudo cat /etc/bind/zones/2.3.0.0.0.b.6.0.1.0.0.2.ip6.arpa
$TTL 600
$ORIGIN 2.3.0.0.0.b.6.0.1.0.0.2.ip6.arpa. #маска
@ IN SOA ns.carenet-se.se. adm.carenet-se.se. (
2011120101;
28800;
604800;
604800;
86400);

IN NS ns.carenet-se.se.
IN NS ns.ssvl.kth.se.
IN NS ns2.ssvl.kth.se.

6.6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR ns.carenet-se.se.
...
$ORIGIN 0.0.0.0.2.3.0.0.0.b.6.0.1.0.0.2.ip6.arpa.
9.6.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR sip.carenet-se.se.
4.9.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR log.carenet-se.se.
...
$ORIGIN 0.1.0.0.2.3.0.0.0.b.6.0.1.0.0.2.ip6.arpa.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR vr.carenet-se.se.
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.

комментариев

Информация

Комментировать статьи на сайте возможно только в течении 15 дней со дня публикации.