Как стать автором
Обновить

IPv6 — это весело, часть 2

Время на прочтение 14 мин
Количество просмотров 153K
Введение: Добрый день или вечер, или даже ночь дорогие хабравчане. В данной статье продолжим изучать особенности протокола IPv6 и его отличия от IPv4. В данной статье будет минимальное количество теории и максимальное количество настройки. Начнем с настройки DHCPV6 и рассмотрим особенности работы этого протокола на основе протокола IPv6, также посмотрим на то, как настраиваются протокола динамической маршрутизации на основе IPv6. Оборудования для настройки выберем Cisco (в третей части Juniper).

IPV6 — это весело. Часть 1

Также хотелось поблагодарить всех пользователей, которые комментируют, задают вопросы. Задавая некоторые неудобные вопросы вы заставляете меня снова лезть в книжки, что-то повторять, что-то лучше осваивать и отвечать на ваши вопросы. Также каждый из вас может повлиять на выпуск следующей части. Не бойтесь задавать вопросы, если что-то не ясно.

План
  1. Настройка протокола DHCPV6
  2. Настройка статических маршрутов
  3. Настройка протоколов динамической маршрутизации (RIPng,EIGRP,OSPF,IS-IS,BGP)
  4. Настройка ACL ( Расширенные именованные листы)
  5. VRRP v3,
  6. Настройка IPv6 ICMP ограничение по скорости
  7. Dual IPv4 and IPv6 Protocol Stacks


По просьбам трудящихся, прежде всего хотелось выразить свое мнение относительно IPv6 и подвести некий итог написанного в предыдущей главе. Разберу по пунктам:

  1. В IPv6 нету Broadcast, ARP.
    Broadcast частично заменили Multicast адреса и адреса Link Local (читайте предыдущую статью). ARP протокол заменен протоколом NDP;
  2. В IPv6 нет технологии NAT, которая есть в IPv4. Смело спорьте с тем, кто скажет обратное. Экономия адресов в IPv6 не используется, адресов хватит на всех. Уровень безопасности, который обеспечивает NAT в технологии IPv4, заменен адресами Unique Local (читайте предыдущую статью), но нельзя забывать, что безопасность должны обеспечивать межсетевые экраны – это их функция. Название Nat64 которое можете встретить в литературе про IPv6, идет речь о совместном использовании технологии IPv6, IPv4 (читайте предыдущую статью);
  3. По моим ощущениям, осталось 3-4 года для полного перехода на IPv6. По моим представлениям переход будет параллелен;
  4. Благодаря Link Local адресам сетевые устройства могут общаться в пределах одного локального канала и только в пределах его;
  5. Появилась фича которая называется: «проверка уникальности IPv6 адреса». Используется в DHCPV6, полный процесс будет описан чуть ниже. Суть ее в том, что после назначения ip-адреса устройству он посылает icmp запрос, destination выбирает данный ему адрес, если приходит ответ — то его адрес не уникален и нужно получать новый IPv6 адрес;
  6. Появились адреса anycast (читать статью). В сети могут существовать несколько хостов с абсолютно идентичными IPv6-адресами. Вариант использования я выявил один, в случае, когда находятся три балансировщика около сервера. Им дается один и тот же адрес, который называется anycast. Принцип работы балансировщика пояснять не буду, так как это не тема статьи;
  7. Вендоры, такие как Cisco или Juniper, полностью готовы к переходу на IPv6, дело остается за операторами связи и ИТ-компаниями.


Ошибки свойственны человеку, но для нечеловеческих ляпов нужен компьютер. (Paul Ehrlich)


DHCPV6

SLAAC — это способ, который позволяет устройству получить свой префикс, длину префикса и адрес шлюза по умолчанию от маршрутизатора IPv6 без помощи DHCPv6-сервера. При использовании SLAAC для получения необходимой информации устройства полагаются на сообщения «Объявления маршрутизатора ICMPv6».
IPv6-маршрутизаторы периодически отправляют сообщения «Объявления маршрутизатора ICMPv6» всем устройствам в сети под управлением IPv6. По умолчанию маршрутизаторы Cisco отправляют такие сообщения каждые 200 секунд на адрес групповой передачи всем IPv6-узлам. IPv6-устройству, находящемуся в сети, не нужно ждать этих периодических сообщений. Устройство может отправить сообщение «Запрос маршрутизатора ICMPv6», который использует адрес групповой передачи всем IPv6-узлам. Когда маршрутизатор IPv6 получает такое сообщение, он сразу же отправляет в ответ объявление маршрутизатора.

IPv6-маршрутизация не включена по умолчанию. Чтобы маршрутизатор работал как IPv6-маршрутизатор, необходимо использовать команду глобальной конфигурации ipv6 unicast-routing.

Сообщение «Объявления маршрутизатора ICMPv6» содержит префикс, длину префикса и другие сведения IPv6-устройства. Кроме того, такое сообщение указывает IPv6-устройству, как ему получить информацию по адресации. сообщение «Объявления маршрутизатора» может выглядеть в одном из следующих 3 вариантов.

  • Вариант 1: только SLAAC. Устройство должно использовать префикс, длину префикса и шлюз по умолчанию, которые содержатся в сообщении «Объявления маршрутизатора». Другая информация недоступна с DHCPv6-сервера;
  • Вариант 2: SLAAC и DHCPv6. Устройство должно использовать префикс, длину префикса и шлюз по умолчанию, которые содержатся в сообщении «Объявления маршрутизатора». На DHCPv6-сервере доступна и другая информация, например адрес DNS-сервера. Устройство получит эту дополнительную информацию в процессе поисков и запросов к DHCPv6-серверу. Этот процесс называется «DHCPv6 без запоминания состояний», поскольку DHCPv6-серверы не выделяют и не отслеживают какие-либо назначения IPv6-адресов, а предоставляют дополнительную информацию, например об адресе DNS-сервера;
  • Вариант 3: только DHCPv6. Устройство не должно использовать информацию из сообщения «Объявления маршрутизатора» для пополнения своей информации об адресации. Вместо этого устройство будет использовать обычные процессы поисков и запросов к DHCPv6-серверам для получения всей своей информации об адресации. Такая информация включает в себя индивидуальный адрес IPv6, длину префикса, адрес шлюза по умолчанию и адреса DNS-серверов. В этом случае DHCPv6-сервер работает как DHCP-сервер, который фиксирует данные аналогично DHCP-серверу для IPv4. DHCPv6-сервер выделяет и отслеживает IPv6-адреса, чтобы не назначать один и тот же IPv6-адрес на нескольких устройствах.


Компьютер позволяет нам совершать ошибки гораздо быстрее, чем любые другие изобретения человечества: за исключением, пожалуй, текилы и оружия. (Mitch Radcliffe)


Общие сведения о SLAAC
Автоматическая настройка адреса без отслеживания состояния (SLAAC) — это способ получения устройством глобального IPv6-адреса одноадресной рассылки без использования DHCPv6-сервера. В основе SLAAC лежит протокол ICMPv6. Протокол ICMPv6 аналогичен ICMPv4, но при этом он имеет дополнительные функциональные возможности и демонстрирует большую устойчивость к ошибкам. SLAAC использует ICMPv6-сообщения запроса маршрутизатора и объявления маршрутизатора, чтобы предоставить информацию об адресации и другую информацию о конфигурации, обычно предоставляемую DHCP-сервером.
  • Сообщение запроса маршрутизатора (RS) — если клиент настроен на получение информации об адресации автоматически с использованием SLAAC, он посылает на маршрутизатор сообщение RS. Сообщение RS отправляется на IPv6-адрес многоадресной рассылки FF02::2, который поддерживают все маршрутизаторы.
  • Сообщение объявления маршрутизатора (RA) — для предоставления информации об адресации маршрутизатор отправляет сообщения RA клиентам, настроенным на получение IPv6-адресов автоматически. Сообщение RA содержит префикс и длину префикса локального сегмента. Эта информация используется клиентом для создания собственного глобального индивидуального IPv6-адреса. Маршрутизатор передаёт сообщение RA периодически или в ответ на сообщение RS. По умолчанию маршрутизаторы Cisco отправляют сообщения RA каждые 200 секунд. Сообщения RA всегда отправляются на общий для всех узлов IPv6-адрес многоадресной рассылки FF02::1.

Как видно из термина, SLAAC не отслеживает состояние адреса. Служба без отслеживания состояния говорит о том, что ни один из серверов не поддерживает информацию о сетевом адресе. В отличие от сервера DHCP, сервер SLAAC не знает, какие IPv6-адреса используются, а какие доступны

Принцип работы SLACC + DHCPV6 без отслеживание состояния


Для отправки маршрутизатором сообщений RA, на нём предварительно необходимо настроить работу IPv6-маршрутизации. Для активации IPv6-маршрутизации необходимо выполнить следующие команды:

Router(config)# ipv6 unicast-routing

  1. В топологии, PC1 настроен на автоматическое получение настроек IPv6-адресации. С момента загрузки PC1 не получил сообщений RA, поэтому он отправляет сообщение RS на адрес многоадресной рассылки, который поддерживают все маршрутизаторы, чтобы проинформировать локальный IPv6-маршрутизатор о необходимости получения сообщения RA.
  2. R1 получает сообщение RS и отправляет в ответ сообщение RA. В сообщение RA включены префикс и длина префикса сети. Сообщение RA отправлено на общий для всех узлов IPv6-адрес многоадресной рассылки FF02::1 с адресом канала маршрутизатора типа link-local в качестве IPv6-адреса источника.
  3. PC1 получает сообщение RA, содержащее префикс и длину префикса для локальной сети. PC1 будет использовать эту информацию для создания собственного глобального индивидуального IPv6-адреса. PC1 имеет теперь 64-разрядный префикс сети, но требует 64-битный идентификатор интерфейса (IID) для создания глобального индивидуального адреса.


Существует для способа создания PC1 собственного уникального IID:

EUI-64, генерация случайным образом.

Поскольку SLAAC — это процесс без отслеживания состояния, перед использованием PC1 этого вновь созданного IPv6-адреса, необходимо проверить его уникальность., PC1 посылает по протоколу ICMPv6 сообщение запроса поиска соседа с собственным адресом в качестве IPv6-адреса назначения. Если другие устройства не отвечают сообщением запроса поиска соседа, значит, адрес является уникальным и может быть использован PC1. Если сообщение запроса поиска соседей получено PC1, значит, адрес не уникален и операционная система должна установить новый идентификатор интерфейса для использования.

Этот процесс является частью процесса обнаружения соседних устройств ICMPv6 и известен как обнаружение адресов-дубликатов (DAD).

Настроен ли клиент на автоматическое получение информации об IPv6-адресации с использованием SLAAC, DHCPv6 или сочетанием обоих вариантов, зависит от настроек, содержащихся в сообщении RA. ICMPv6 сообщения RA содержат два флага, обозначающих, какой из вариантов должен быть использован клиентом (смотреть в Части 1).
Этими флагами являются флаг управляемой конфигурации адресов (M) и флаг другой конфигурации (O).



Утверждать, что Java хорош тем, что работает на всех ОС, — то же самое, что утверждать, что анальный секс хорош тем, что подходит к любому полу. (Alanna)


Функции SLAAC,DHCPV6+SLAAC,DHCPV6
Рассмотрим все три способа, изменение флагов.
  1. SLAAC — Этот вариант указывает клиенту использовать только информацию из сообщения RA. Сюда входит информация о префиксе, длине префикса, DNS-сервере, MTU и информация о шлюзе по умолчанию. Далее клиент не получает никакой информации от сервера DHCPv6. Глобальный индивидуальный IPv6-адрес создаётся путём объединения префикса, полученного в сообщении RA, и идентификатора интерфейса, полученного с помощью EUI-64 или сгенерированного случайным образом.

    Сообщения RA настроены на отдельном интерфейсе маршрутизатора. Для повторной активации режима SLAAC на интерфейсе, на котором мог быть установлен другой вариант работы, флаги M и O необходимо сбросить на их первоначальные значения, равные 0. Для этого применяются следующие команды режима конфигурации интерфейса:

    Router(config-if)# no ipv6 nd managed-config-flag 
    Router(config-if)# no ipv6 nd other-config-flag


  2. DHCPV6+SLAAC — Для DHCPv6 без отслеживания состояния значение флага O установлено равным 1, а значение флага M остается со значением по умолчанию, равным 0. Значение флага O, равное 1, используется для информирования клиента о том, что на DHCPv6-сервере без отслеживания состояния доступна дополнительная информация о конфигурации.

    Для того чтобы изменить сообщение RA, отправляемое на интерфейс маршрутизатора для указания использования DHCPv6 без отслеживания состояния, используйте следующие команды:

    Router(config-if)# ipv6 nd other-config-flag

  3. Протокол DHCPv6 с отслеживанием состояния (только DHCPv6)
    Флаг M указывает, используется ли DHCPv6 с отслеживанием состояния. Флаг O не используется. Для того чтобы изменить значение флага М с 0 на 1 для объявления DHCPv6 с отслеживанием состояния, применяются следующие команды:

    Router(config-if)# ipv6 nd managed-config-flag


Создание языка программирования — это как прогулка по парку. По парку Юрского периода. (Larry Wall)


Процессы DHCPV6
В случае если в сообщении RA указан вариант работы DHCPv6 (с отслеживанием состояния или без), инициируется работа DHCPv6. Сообщения протокола DHCPv6 посылаются через протокол UDP. Сообщения DHCPv6 от сервера к клиенту используют UDP порт назначения 546. Клиент отправляет сообщения на сервер DHCPv6 через UDP порт назначения 547.
Клиенту — теперь DHCPv6-клиенту — необходимо определить местоположение сервера DHCPv6. клиент передаёт сообщение DHCPv6 SOLICIT на зарезервированный IPv6-адрес многоадресной рассылки FF02::1:2, используемый всеми DHCPv6 серверами. Этот адрес многоадресной рассылки действует в рамках канала link-local, это означает, что маршрутизаторы не направляют сообщения в другие сети.

Один или несколько серверов DHCPv6 отвечают DHCPv6-сообщением ADVERTISE. Сообщение ADVERTISE сообщает DHCPv6-клиенту, что сервер доступен для предоставления службы DHCPv6.

Клиент отвечает серверу DHCPv6 сообщением REQUEST или INFORMATION-REQUEST, в зависимости от того, является ли DHCPv6-сервер сервером с отслеживанием состояния или без него.

  • DHCPv6-клиент без отслеживания состояния — клиент отправляет DHCPv6 сообщение INFORMATION-REQUEST серверу DHCPv6, запрашивая только параметры конфигурации, например, адрес DNS-сервера. Клиент создаёт собственный IPv6-адрес при помощи префикса из сообщения RA и самогенерируемого идентификатора интерфейса.
  • DHCPv6-клиент с отслеживанием состояния — клиент отправляет DHCPv6 сообщение REQUEST серверу для получения IPv6-адреса и всех остальных параметров конфигурации от сервера.



Программы — это как секс: гораздо лучше, когда бесплатно. (Linus Torvalds)


Теперь оставим теорию и выведем только настройку
  1. Настройка маршрутизатора в качестве DHCPV6 сервера без отслеживания состояния
    Активация маршрутизации IPv6
    Router(config)# ipv6 unicast-routing

    Настройка DHCPV6 пула
    Router(config)#ipv6 dhcp pool (pool-name)

    Настройка параметров пула
    Router(config-dhcpv6)# dns-server (указываем адрес dns-server-address)
    Router(config-dhcpv6)#domain-name (указываем имя domain)

    Настройка интерфейса
    Router(config-)# interface (type number)
    Router(config-if)# ipv6 dhcp server (pool name)
    Router(config-if)# ipv6 nd other-config-flag
  2. В качестве клиента
    Router(config)#interface (interface-number)
    Router(config-if)# ipv6 enable
    Router(config-if)# ipv6 address autoconfig
    (Команда ipv6 address autoconfig включает автоматическую настройку IPv6-адресации с использованием SLAAC) 
    Проверка: show ipv6 dhcp pool,show ipv6 interface (type-number)

  3. Сервер DHCPV6 с отслеживанием состояния
    Активация маршрутизации IPv6
    Router(config)#ipv6 unicast-routing

    Настройка DHCPV6-пула
    Router(config)#ipv6 dhcp pool (pool-name)

    Настройка параметров пула
    Router(config-dhcpv6)# address (prefix/length (lifetime (valid-lifetime preferred-lifetime)infinite))
    Router(config-dhcpv6)# dns-server (dns-server-address)
    Router(config-dhcpv6)# domain-name (domain-name)

    Настройка интерфейса
    Router(config)#interface (interface-number)
    Router(config-if)# ipv6 dhcp server (pool-name)
    Router(config-if)# ipv6 nd managed-config-flag

    Настройка маршрутизатора в качестве DHCPV6-клиента с отслеживанием состояния
    Router(config)#interface (interface-number)
    Router(config-if)# ipv6 enable
    Router(config-if)# ipv6 address dhcp
  4. Настройка маршрутизатора в качестве агента рентрансляции
    Router(config)#interface (interface-number)
    Router(config-if)# ipv6 dhcp relay destination (address)


Если отладка — процесс удаления ошибок, то программирование должно быть процессом их внесения. (Edsger W. Dijkstra)


2) Настройка статических маршрутов в IPv6
Router(config)# ipv6 route ipv6-prefix/prefix-length { ipv6-address | exit-intf }

2) Настройка рекурсивного статического маршрута
Router(config)#ipv6 route 2001:DB8:ACAD:2::/64 2001:DB8:ACAD:4::2
Router(config)#ipv6 route 2001:DB8:ACAD:5::/64 2001:DB8:ACAD:4::2
Router(config)#ipv6 route 2001:DB8:ACAD:3::/64 2001:DB8:ACAD:4::2 

Название сети – next-hop.В данном примере разные сети next-hop один и тот же.
3) Настройка напрямую подключнного статического маршрута
Router(config)#ipv6 route 2001:DB8:ACAD:3::/64 s0/0/0

Настройка полностью заданного статического маршрута IPv6
Router(config)#ipv6 route 2001:DB8:ACAD:3::/64 s0/0/0 fe80::2 (суть его в том,что если используете адрес типа Lin-Local то надо обязательно указать тип выходного интерфейса)

5)настройка маршрутов по умолчанию
ipv6 route ::/0 { ipv6-address | exit-intf }

Настройка суммарного IPv6-адреса
Router(config)#ipv6 route 2001:DB8:ACAD:1::/64 2001:DB8:ACAD:4::2
Router(config)#no ipv6 route 2001:DB8:ACAD:2::/64 2001:DB8:ACAD:4::2
Router(config)#no ipv6 route 2001:DB8:ACAD:3::/64 2001:DB8:ACAD:4::2 
Router(config)#no ipv6 route 2001:DB8:ACAD:4::/64 2001:DB8:ACAD:4::2

В сумме
Router(config)#ipv6 route 2001:DB8:ACAD:4::/61 2001:DB8:ACAD:4::2


Если бы McDonalds разрабатывал ПО, один из сотни биг-маков был бы отравлен, а администрация отвечала бы: «В качестве извинения примите купон на два бесплатных биг-мака». (Mark Minasi)


3) Настройка динамической маршрутизации в IPv6
Ripng
Router(config)#interface (number)
Router(config-if)# ipv6 rip RIP-AS enable
Router(config-if)# exit

передать маршрут по умолчанию
Router(config)# pv6 rip имя_домена default-information originate


EIGRP
Router(config)# ipv6 router eigrp autonomous-system
Router(config-rtr)# eigrp router-id 1.0.0.0 – задание номера процесса
Router(config-rtr)# no shutdown
Router(config)# interface (type/number) (заходим в интерфейс)
Router(config-if)# ipv6 eigrp (AS)
Router(config-if)# ipv6 bandwidth-percent eigrp as-number percent-настройка процентного соотношения пропускной способности,
R2(config-rtr)# redistribute static - распределения маршрута по умолчанию
Router(config-if)# ipv6 hello-interval eigrp as-number seconds - изменение hello интервала
Router(config-if)# ipv6 hold-time eigrp as-number seconds - изменение hold-time 


OSPF3
Router(config)# ipv6 router ospf 10 –активировать режим OSPF
Router(config-rtr)# router-id 1.1.1.1 (задаем router-id)
Router(config-rtr)# auto-cost reference-bandwith 1000 (задаем cost)
Router(config)# interface (type/number) (заходим в интерфейс)
Router(config-if)# ipv6 ospf 10 area (number) (назначаем интерфейс в протокол ospf,номер процесса,номер 
area)
Router#clear ipv6 ospf process


IS-IS
Router(config)# isis area-tag (например router isis area2)
Router(config-rtr)# net network-entity-title (например 49.0001.0000.0000.000с.00
Router(config)# interface Ethernet 0/0/1 
Router(config)# ipv6 address {ipv6-address/prefix-length | prefix-name sub-bits/prefix-length}
Router(config-if)# ipv6 router isis area-name (ipv6 router isis area2)


BGP
Router(config)# router bgp 65000
Router(config-rtr)# no bgp default ipv4-unicast ( выключаем ipv4 unicast аддресса для BGP)
Router(config-rtr)#bgp router-id (сконфигурим 32-битный роутер id ,будьте аккуратный эта команда сбросит все активный BGP peering сессии)
Router(config-rtr)# neighbor 2001:DB8:0:CC00::1 remote as 64600 – добавим ipv6 адрес соседа и автономную систему.
Router(config-rtr)# address-family ipv6 [unicast |multicast]
Router(config-rtr-af)#neighbor 2001:DB8:CC00::1 activate – активируем соседа для обмена префиксами ipv6


4) ACL
Router(config)#ipv6 access-list NO-BYX-SIDET-VKONTAKTE
Router(config-ipv6-acl)#deny ipv6 2001:db8:cafe:30::/64 any
Router(config-ipv6-acl)#permit ipv6 any any

все это может выглядеть следующем образом-
Router(config)#ipv6 access-list access-list-name
Router(config-ipv6-acl)#deny | permit protocol (source-ipv6-prefix/prefix-length |any|host source-ipv6-addres) (operator(port-number)) (destination-ipv6-prefix/prefix-length | any | host destination-ipv6-address) (operator(port-number))
Router(config)# interface (type/number) (заходим в интерфейс)
Router(config-if)# ipv6 traffic-filter access-list-name { in |out }


5) VRRP,HSPR
Router(config)# fhrp version vrrp v3 – включаем ,когда используется 3 версия,вторая не не активна.
Router(config)# interface type number
Router(config-if)#  vrrp (group-id address-family (ipv6)
Router(config-if)# vrrp 3 address-family ipv6
Router(config-if-vrrp)# address 2001:abc:cafe:11::/64 primary (или secondary)
Router(config-if-vrrp)# description group 3
Router(config-if-vrrp)# match-address (добавляем второй адрес в объявление)
Router(config-if-vrrp)# preempt delay minimum 30 – включаем преимущество  низкой приоритетности мастера с опцией задержки (опциально)


HSPR
Switch (config)# interface type number
Switch (config-if)#no switchport
Switch (config)#standby 1 ipv6 autoconfig
Router(config)# interface type number
Router(config-if)#standby version (2)
Router(config)# interface type number
Router(config-if)#standby (group-number) ipv6 (link-local |address)
Router(config-if)#standby [group-number]preempt [delay {minimumseconds | reload seconds |sync seconds}]
Router(config-if)#standby [group-number]priority priority


6) Настройка IPv6 ICMP ограничение по скорости
Router(config)#ipv6 icmp error- interval (bucketsize)  (interval в милл сек,диапозон 0 2147483647,bucketsize – опциально,диапозон 1 - 200


7) Dual IPv4 and IPv6 Protocol Stacks

Switch(config)# sdm prefer dual-ipv4-and-ipv6 default 
Switch(config)# ip routing
Switch(config)# ipv6 unicast-routing
Switch(config)# interface gigabitethernet2/0/1
Switch(config-if)# no switchport
Switch(config-if)# ip address 192.168.99.1 244.244.244.0
Switch(config-if)# ipv6 address 2001:0DB8:c18:1::/64 eui 64
Switch(config-if)# end


Учитывая печальное состояние современных компьютерных программ, разработку ПО до сих пор можно считать искусством, а не научной дисциплиной. (Bill Clinton)


Вот и подошла вторая часть к концу. Кто слушал — молодец. Из написанной статьи я понял одно: для настройки BGP, IS-IS нужно писать отдельные статьи. В целом настройка ipv6 не сильно отличается от ipv4, местами получается даже проще. В третьей части я опишу настройку протоколов на основе оборудования Juniper networks. Она, по сути, будет довольно короткой, поэтому оставляйте свои комментарии под статьей. Повторюсь, ваша критика, вопросы или пожелания могут повлиять на написании новой статьи. Всем удачи.

Список используемой литературы


  1. CCNA RS
  2. CCNP RS
  3. IP Version 6 in Junos (EDU-JUN-IPV6)
  4. XGU.RU
  5. cisco.com
Теги:
Хабы:
+14
Комментарии 37
Комментарии Комментарии 37

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн