Windows Server 2008: внедрение IPv6 в локальной сети
2010-06-29, 01:10 / ArgonВнедряя протокол IPv6 на своем предприятии, я столкнулся с тем, что для установки и настройки необходимых служб принцип Next-Next-Next не работает, а документации на русском не нашел вообще.
Эта статья пошагово расскажет на примере моей инфраструктуры о том, как развернуть IPv6 на предприятии используя стандартные службы DNS и DHCP операционной системы Windows Server 2008 / 2008 R2.
- Адресация IPv6
- Установка и настройка DNS
- Установка и настройка DHCPv6
- Маршрутизация IPv6
- Полезные ссылки
Адресация IPv6
Как известно, в IPv4 стандартизированы диапазоны «серых» адресов для локальных сетей (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), аналогично и в IPv6 для локальных адресов принят диапазон fc00:/7.
Рассмотрим следующую схему адресации IPv6, которая принята для локальных сетей на платформе Windows Server:
- префикс сети (адрес сети в терминологии IPv4):
fc00:a:b:c::/64
, где a, b, c — выбирайте на ваше усмотрение из диапазона 0000-ffff, например fc00:10:18:1::/64 - адрес хоста в сети
fc00:a:b:c:v:x:y:z
, где v, x, y ,z определяют адрес хоста, напримерfc00:10:18:1:feab:01cc:65de:180a
— такой адрес может назначить DHCP-серверfc00:10:18:1::10
— настроенный вручную более читабельный адрес, например для сервера, который нужно будет указывать руками (:: означает пропуск группы нулей, может использоваться однократно в адресе).
На картинке показан пример настроек сервера, на котором далее будет настроена служба DHCPv6.

Как работает IPv6 совместно с IPv4
IPv6 замечательно работает совместно с уже развернутой инфраструктурой IPv4 следующим образом:
- На Windows Server 2008 / 2008 R2 разворачиваются службы DNS и DHCP, поддерживающие IPv6.
- Клиенты, поддерживающие IPv6 (Windows Vista, Windows 7), получают настройки от DHCP и регистрируют свои имена в DNS.
- Далее при обращении к узлам по DNS-имени в первую очередь идет попытка получить их адреса IPv6 (тип записи AAAA), в случае их отсутствия — IPv4 (тип записи A).
- Клиенты, не поддерживающие IPv6 (Windows Server 2003, Windows XP) продолжают пользоваться старым протоколом IPv4 как раньше.
При выборе префикса создаваемой сети IPv6 рекомендую схитрить: если в этой же физической сети располагается IPv4 сеть 10.18.1.0/24, то можно выбрать префикс fc00:10:18:1::/64
для сети IPv6.
Установка и настройка DNS
Так как адреса IPv6 еще менее человечны, чем в IPv4, то их применение без DNS можно оправдать только с точки зрения садомазохизма. Поэтому в первую очередь необходимо развернуть DNS сервер, поддерживающий IPv6 адреса. Такая поддержка есть в службе DNS начиная с Windows Server 2008.
Все, что нужно сделать — это сконфигурировать статические IPv6 адреса (например fc00:10:18:1::1
) на DNS серверах, включить динамическое обновление записей клиентами (в окружении Active Directory — безопасное) и передать эти настройки клиентам локальной сети через DHCP, о чем рассказывается далее.
Установка и настройка DHCPv6
Протокол IPv6 менее приспособлен для ручных настроек, в отличии от IPv4, поэтому предполагает автоматическое конфигурирование параметров узлов сети через DHCP версии 6. Поддержка DHCPv6 появилась начиная с Windows Server 2008 и является частью стандартной роли DHCP сервера.
Перед установкой DHCP-сервера необходимо сконфигурировать статические адреса IPv6 для сетевых адаптеров, с которых сервер DHCPv6 будет обслуживать своих клиентов. Например, fc00:10:18:1::10
.
Теперь можно перейти к установке стандартной роли DHCP. Первая опция, относящаяся к IPv6 называется DHCPv6 Stateless Mode. Её нужно включить, тогда на следующей странице у вас запросят адреса IPv6 DNS серверов и DNS-имя родительского домена.
Если DHCPv6 сервер был установлен с отключенным DHCPv6 Stateless Mode, то включить его можно выполнив команду:
и установив опции сервера DHCPv6:
- 00023 DNS Recursive Name Server IPv6 Address ;mdash; адреса IPv6 DNS серверов
- 00024 Domain Search List ;mdash; DNS-имя родительского домена
Теперь нужно создать область, в которой DHCPv6 серверу предстоит выдавать адреса своим клиентам. Особенностью DHCPv6 в Windows Server является то, что можно создать область только для адресов с длиной префикса сети равной 64, например fc00:10:18:1::/64
.
На следующей странице предлагается указать область исключений, из которой DHCPv6 сервер не будет выдавать адреса. Так как адреса сервер выдает не по порядку, а псевдослучайным образом (по хитрому алгоритму, основанному на MAC адресе сетевого интерфейса), то область исключений должка включать IPv6 адреса серверов, которые был сконфигурированы вручную (DNS и DHCPv6 сервера). Пример области исключений: 0:0:0:1-0:0:0:99
.
Казалось бы, осталось только активировать диапазон и авторизовать DHCPv6 сервер в Active Directory. Вскоре сервер начнет выдавать клиентам IPv6 адреса и настройки DNS. Но здесь начинается самое интересное: хоть клиенты эти настойки исправно получают, общаться между собой они не могут. Причем сие печальное поведение на момент написания этой статьи в официальной документации явно не отражено.
Чтобы исправить ситуацию, вызываем на клиенте
и видим, что клиент не имеет маршрута в сеть fc00:10:18:1::/64.
Вызываем на сервере
и среди прочего видим:
Publish | Type | Met | Prefix | Idx | Gateway/Interface Name |
---|---|---|---|---|---|
No | Manual | 256 | fc00:10:18:1::/64 | 10 | Local |
Из этого следует, что маршрут в сеть fc00:10:18:1::/64 на сервере DHCPv6 существует, но не опубликован. Для того, чтобы этот маршрут выдавался клиентам, необходимо включить на сервере объявление маршрутов командой
и опубликовать маршрут командой
где fc00:10:18:1::/64 — ваш префикс IPv6, Local — имя или индекс сетевого интерфейса DHCPv6 сервера.
Маршрутизация IPv6
Встроенная роль Routing and Remote Access начиная с Windows Server 2008 поддерживает маршрутизацию IPv6, однако для того, чтобы она полноценно заработала, необходимо выполнить следующие, не очевидные вещи.
1. В свойствах сервера Routing and Remote Access на вкладке IPv6 включить Enable IPv6 Forwarding и Enable Default Route Advertisement.
2. На сервере-маршрутизаторе IPv6 должно быть как минимум две сетевых карты.
Local (fc00:10:18:1::10/64 в моих примерах), смотрящая в локальную сеть, для которой мы на предыдущих шагах настраивали раздачу IPv6 адресов, префикса сети и других параметров по DHCP.
External (например fc00:10:18:2::10/64), которая по идее должна смотреть в другую сеть (у нас маршрутизатор все-таки), но может смотреть и в ту же, что и Local.
3. Для того, чтобы IPv6 клиенты в сети могли использовать наш маршрутизатор, он должен объявить себя как маршрут по умолчанию (Default Route Advertisement, как шлюз по умолчанию в терминах IPv4).
Для этого в Windows Server 2008 нужно выполнить команду
где fc00:10:18:2::180 — адрес следующего маршрутизатора по умолчанию (next-hop), находящегося в сети External. Не важно, существует он реально или нет. Для объявления маршрута по умолчанию в сеть Local на текущем маршрутизаторе next-hop должен быть указан.
Для Windows Server 2008 R2 всё проще, достаточно выполнить команду
для объявления маршрутизатора в сети Local как Default Route.
Полезные ссылки
- DHCPv6 — Understanding of address configuration in automatic mode and installation of DHCPv6 Server
- The Cable Guy / The DHCPv6 Protocol
- Кабельщик / Протокол DHCPv6
- IPv6 address — Wikipedia
- IPv6 на TechNet
- Introducing IPv6 on Your Network — материал TechNet из раздела WS2003
- IP Version 6 — скудный материал TechNet из раздела WS2008
Рубрика | Core Infrastructure |
---|---|
Метки | dhcp, ipv6, windows server, автоматизация |
Опубликовано | 2010-06-29, 1:10; обновлено 2011-01-09, 17:01 |
Комментарии | 27 комментариев » | Лента комментариев RSS |
Ссылки | Постоянная ссылка | Обратная ссылка |
27 комментариев
Вот эта проблема » клиенты эти настойки исправно получают, общаться между собой они не могут» решается добавлением в сеть обязательного для DHCPv6 маршрутизатора с поддержной ipv6 (в роли которого может выступать W2k8). Этот момент Вы как-то упустили при чтении обсуждения на technet.
Не упустил, последние две приведенные мной команды какраз решают эту проблему без установки ipv6 маршрутизатора. Как маршрутизатор после этого сервер работать не станет, но в пределах одной сети ipv6 будет работать исправно.
Представте, если не два клиента, а 1000, тогда может и DHCP не нужен? но как решение — не спорю.
Хотя извиняюсь, я сам не додумал, DHCP рассылает объявления маршрутизатора…
Перелопатил кучу информации по IPV6, только сил не хватило освоить мануалы на английском языке.
Очень благодарен за опыт выложенный в данной статье.
Реально основная трудность, что в отличие от IPv4 с IPV6 нет устоявшихся традиций настройки в доменной сети предприятия. В силу того, что если в большинстве случаев с IPv4 все использовали выделенные приватные диапазоны. С IPv6 ситуация другая, хочешь используй полностью аналогичную схему IPv4 с локальными адресами, хочешь бери область у туннельного брокера и используй прямые адреса шестой версии и настраивай максимально жестко свой FireWall. Можно использовать сразу оба варианта и единого мнения как это лучше сделать — нет. ForeFront tmg вообще толком не поддерживает IPv6. При этом Windows в качестве маршрутизатора использовать крайне не удобно, а роутеры типа Циски далеко не везде получается использовать, ибо дорого.
Во всем согласен. Особенно попал в точку насчет неподдержки IPv6 в Forefront TMG, это печально, люто, бешено!
хотел бы спросить, а как сделать чтобы и шлюз ipv6 по dhcp выдавался, dns выдает, ip выдает, а вот шлюз нет.
Хороший вопрос, для выдачи шлюза по умолчанию нужно объявить маршрут ::/0.
То есть, если на одной машине стоит DHCPv6 и Routing, то достаточно использовать команды
netsh int ipv6 set int Local adv=en
netsh int ipv6 add route ::/0 Local publish=yes
хм… интересно, а почему 0? и что если шлюз и dhcp сервер это не один и тот компьютер, тогда эти команды нужно объявить на той машине или нет?
Также хотелось бы отметить, почему сам сервер dhcp да другие машины которым дан статический адрес, берут еще один от dhcp сервера?
Следуя Вашим рекомендациям не вышло, шлюз по прежнему не высвечивается у клиента.
Шлюз должен объявлять себя сам.
Я исследовал этот вопрос, попробовал объявить
add route ::/0 Local fc00:10:18:1::1 publish=yes
где 10:18:1::1 — адрес другого компа со службой маршрутизации. Этот маршрут на самом серваке прописывается, но до клиентов не доходит.
Однако, если прописать
add route ::/0 Local fc00:10:18:1::10 publish=yes
где 10:18:1::10 — адрес того же компа, то до клиентов доходит маршрут «::/0 on-link» (виден в ipconfig как «::»), то есть без указания роутера, и, соответственно, маршрутизация не работает.
Если на клиенте руками прописать
route add ::/0 fc00:10:18:1::10
то шлюз работает как надо.
Я попробую решить эту проблему, так как мне тоже интересно.
Насчет второго IPv6 адреса… Так как флаг M в DHCPv6 установлен (netsh int ipv6 set interface Local man=en), то DHCP сервером назначаются клиентом адреса, при этом же сами клиенты генерируют еще Stateless IPv6 адреса (EUI-64) самостоятельно. Таким образом клиенты имеют по 2 адреса и больше.
Чтобы отключить автогенрацию IPv6 на стороне клиентов, нужно выполнить
netsh interface ipv6 set global randomizeidentifiers=disabled
…однако, зачем? Пусть живёт.
Кое-что выяснил.
Чтобы работало объявление default router, я создал следующие условия.
На компе WS 2008 две сетевухи.
Local1 fc00:10:18:1::10/64 — раздает этот префикс и адреса клиентам по DHCP.
Сконфигурирован
netsh int ipv6 add route fc00:10:18:1::/64 Local1 publish=yes
Local2 fc00:10:18:2::10/64 — для объявления Default Router в сеть Local1 нужен сконфигурированный next-hop адрес (следующего маршрутизатора для текущего роутера).
Сконфигурирован
netsh int ipv6 add route ::/0 Local2 fc00:10:18:2::180 publish=yes
Таким образом, клиенты получают DHCP адреса и префикс fc00:10:18:1::/64, а также default router (маршрут ::/0), который указывает на link-local адрес (fe80:…) адаптера Local1.
Как сделать, чтобы клиенты как адрес шлюза получали назначенный адаптеру Local1 адрес (fc00:10:18:1::10) вместо link-local — еще не знаю.
Не проверял, но пишут, что для WS 2008 R2 уже нет необходимости объявлять на роутере next-hop адрес следующего роутера, достаточно выполнить
netsh int ipv6 set int
Пожалуйста, дополнил статью добытой инфой по маршрутизации.
Вопрос про шлюз надо-бы задать дяде Биллу. Какого хрена, в сведениях о подключении параметр «Шлюз IPv6» есть, а в Параметрах области DHCP его задать нельзя!?
Все нормально у дяди Билла, он следует новым стандартам IPv6, в которых значится, что шлюзы IPv6 должны объявлять себя сами. Это команда
netsh int ipv6 add route ::/0 External fc00:10:18:2::180 publish=yes
в моём примере.
Тут поковырял немного, написал скрипт. Для Назначения IPv6 и для показа EUI-64. Если нужно выложу.
Интересно, а для чего вы задумали использовать ваш скрипт? Как писал, IPv6 на клиентах дополнительных настроек не требует, всё раздается с серверов.
Скажите, а это нормально, что помимо статического адреса, сервер получил от DHCP еще два адреса IPv6?
Да, один конфигурируется самим клиентом по методу Stateless (генерируется на основе мак адреса сетевухи, EUI-64), другой назначается DHCP сервером. Ну а третьим адресом будет статически назначенный, если есть.
Наконец то толковый Howto. Спасибо, завтра офис ждут перемены :evil:
Как показывает практика, всегда обрашщения между клиентами или клиентами с серверами проходят по полученым Stateless адрессами, по этому нет обходимости создавать область адресов на DHCPv6 сервере. Достаточно установить только опции сервера DHCPv6:
•00023 DNS Recursive Name Server IPv6 Address ;mdash; адреса IPv6 DNS серверов
•00024 Domain Search List ;mdash; DNS-имя родительского домена. Если DHCPv6 сервер и маршрутизатор поставлены на разные машины, то на DHCPv6 сервере больше никаких манипуляций в настройках сети пролеловать не надо, за иссключением команды „netsh int ipv6 set interface InterfaceName other=en“. А на шлюзе исспользовать только Windows Server 2008 R2 (без R2 не получилось) „netsh int ipv6 set interface Local adv=en for=en“, „netsh int ipv6 set interface Internal for=en“, „netsh int ipv6 add route fc00:10:18:1::/64 Local publish=yes“ и „netsh int ipv6 set Local advertisedefaultroute=enabled“.
Спасибо за инфу! Я тоже не вижу смысла раздавать stateful адреса.
Поправьте в статье
netsh int ipv6 set route fc00:10:18:1::/64 Local publish=yes