Встатье «Близится время IPv6», опубликованной в Windows IT Pro/RE № 1 за 2008 год, был представлен обзор IPv6 и описаны различия между IPv4 и IPv6. было рассказано об отличиях адресов IPv6 link-local, site-local и globally aggregatable unicast, рассматривались адреса multicast и было показано, как их можно использовать. Кроме того, в статье объяснялось, как узлы получают адреса IPv6. Затем в статье «Неотвратимость IPv6», опубликованной в Windows IT Pro/RE № 4 за 2010 год, мы обсудили особенности поддержки, установки и настройки IPv6 в сетях Windows.

Хотя сейчас уже можно без труда развернуть в сети компании IPv6 и большинство приложений смогут его использовать, при попытке выйти в Интернет вы столкнетесь с целым рядом проблем. Во‑первых, большинство провайдеров (ISP) пока еще не поддерживают «родной» протокол IPv6. Но даже для тех провайдеров, которые уже поддерживают IPv6, бизнес-партнеры и заказчики компании, скорее всего, работают с IPv4, поэтому придется поддерживать одновременно и IPv4, и IPv6. Отметим, что при разработке IPv6 была заложена совместимость с IPv4. В этой статье я приведу примеры решений для поддержки и использования обеих технологий и покажу, как удаленно подключиться к сайтам IPv6 поверх IPv4.

Основы туннелирования IPv6

Существует возможность инкапсулировать IPv6 в трафик IPv4 или построить туннель — например, для обеспечения взаимодействия по IPv6 между двумя сайтами Интернета поверх IPv4. Делается это с помощью выделенного типа протокола IPv4 с номером 41. При инкапсуляции IPv6 в IPv4 значение Maximum Transmission Unit (MTU) для пакета IPv6 меньше, чем MTU для IPv4 (обычно из значения IPv4 MTU вычитается длина заголовка пакета IPv4).

Использование выделенного номера протокола в сочетании со структурой инкапсулированного пакета недостаточно для создания туннеля, для обеспечения гарантированной доставки на уровне IPv4 или для поддержания базовой безопасности, такой как аутентификация, авторизация или шифрование. Все перечисленное обрабатывается внутри инкапсулированного пакета IPv6. Конечные точки туннеля (tunnel endpoints) посылают инкапсулированные пакеты IPv6 по мере необходимости и будут получать их без специального запроса.

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

Туннели удобны по ряду причин. Во‑первых, это отличный способ организации связи по IPv6 между сайтами с уникальными маршрутизируемыми адресами IPv4, но без публичных адресов IPv6. Во‑вторых, туннели удобны как способ перехода на IPv6 при помощи включения доступа к Интернету IPv6 даже при отсутствии поддержки со стороны провайдера. Это реализуется при помощи службы туннельного брокера. При желании вы сможете найти недорогие или даже бесплатные туннельные брокеры.

Ручная настройка IPv6

Туннель IPv6 между узлами Windows или узлом Windows и узлом под управлением системы, отличной от Windows, можно создать при помощи команды Netsh (netsch.exe). Туннель будет установлен как маршрут по умолчанию. Например:

NETSH interface ipv6 add v6 v4 tunnel

NETSH interface ipv6 set address

NETSH interface ipv6 add

route::/0

Аргумент TunnelInterfaceName — это имя, которое назначается туннельному интерфейсу. Адрес IPv4 a.b.c.d — это IP-адрес локального узла, с которого устанавливается туннель, w.x.y.z — IPv4‑адрес удаленного узла, а TunnelIPv6 Address — IPv6‑адрес локального узла на другом конце туннеля. В приведенных командах есть необязательные аргументы, включая neighbordiscovery для первой команды, который может быть установлен в значение enabled или disabled. Этот аргумент определяет, нужно ли выполнять процесс IPv6 neighbor discovery (описание этого процесса приводилось в статье «Близится время IPv6»). Второй необязательный аргумент, store, который может принимать значение active или persistent, определяет, должен ли туннель или маршрут быть постоянным (восстанавливаться после перезагрузки хоста) или существовать только для активной сессии, пока хост не будет выключен или перезагружен. Процесс neighbor discovery для туннеля между сайтами вы, вероятно, захотите включить, но отключить для туннельного брокера IPv6 (значение по умолчанию). Аналогичные команды — с соответствующими IP-адресами и адресом IPv6 — необходимо запустить на другом конце туннеля. Для связи с отличными от Windows системами также существует свой набор похожих команд.

Узел Windows, участвующий в туннеле, может действовать как IPv6‑маршрутизатор для остальных узлов во внутренней сети. Используя ISATAP, можно реализовать то же самое даже при отсутствии поддержки IPv6 в внутренней сети. Чтобы включить узел Windows с туннелем IPv6 в маршруты, нужно дополнить конфигурацию узла следующими командами:

NETSH interface ipv6 set interface

forwarding=

enabled advertise=enabled

NETSH interface ipv6 add route

/

publish=yes

В каждой команде InterfaceName — это имя физического или туннельного интерфейса (то есть Local Area Connection 2), IPv6 Address — IPv6‑адрес узла или сетевой адрес маршрута, а PrefixLength — длина адреса, используемого для целей маршрутизации. Необходимо повторить первую команду для каждого из интерфейсов, между которыми будут маршрутизироваться IPv6‑пакеты, а вторую команду — для интерфейсов, на которые будут посылаться запросы маршрутизации и обнаружения (discovery). Обычно нет необходимости задавать параметр advertise=enabled в первой команде (или выдавать вторую команду) на самом туннельном интерфейсе. Вместо этого достаточно создать маршрут по умолчанию для удаленной конечной точки туннеля (remote tunnel endpoint).

Для узлов, не являющихся конечными точками туннеля, когда не используется ни запрос маршрутизации, ни информационное сообщение (advertisement) или ISATAP, следует удостовериться, что узлы «знают» о существовании туннеля. Это делается с помощью ручного или автоматического заполнения таблиц маршрутизации с IPv6‑префиксами сетей на другом конце туннеля или же настраивая локальную конечную точку туннеля (local tunnel endpoint) как маршрутизатора IPv6 по умолчанию. Такой подход позволяет узлам с адресами site-local или globally aggregatable связываться с остальными узлами IPv6 через туннель.

И наконец, если для организации доступа в Интернет по IPv6 используется вручную установленный туннель с брокером, то потребуется публичный статический адрес IPv4. Ввероятно, вы не сможете воспользоваться немаршрутизируемым IPv4‑адресом за прокси-сервером или сетевым экраном с Network Address Translation (NAT) или Port Address Translation (PAT). Адреса IPv4, предоставленные провайдером по DHCP (обычно с использованием кабельных и xDSL-модемов), проблему не решат, так как при каждом изменении IPv4‑адреса пришлось бы вносить изменения в настройки конечной точки туннеля.

6to4

Альтернативой ручной настройке туннеля является механизм перехода под названием 6to4. В отличие от туннелей, устанавливаемых вручную, туннели 6to4 устанавливаются в разрыв между узлами — без вмешательства со стороны пользователя, но не все данные передаются по одному туннелю. Туннели устанавливаются с узлами на основе IPv6‑адресов.

Существует специальный адресный префикс IPv6 (а именно 2002::/16), оставленный для 6to4. Надо отметить, что узлы 6to4 могут быть как хостами (конечными узлами), так и маршрутизаторами (узлами с публичными IPv4 и глобальными адресами IPv6). Каждый узел должен иметь IPv6‑интерфейс и адрес, у которого будет этот префикс. Следующие 32 разряда в 6to4‑адресе — это публичный IPv4‑адрес узла в шестнадцатеричном формате для префикса /48.

Windows Vista, Windows Server 2008, Windows Server 2003 или Windows XP с публичным маршрутизируемым IPv4‑адресом будет назначать (при помощи 6to4) адрес IPv6 самостоятельно на основе IPv4‑адреса при условии, что адрес IPv6 не был получен в процессе обмена информацией между маршрутизаторами, а маршрутизатор ISATAP не найден (об этом будет сказано ниже). Адрес IPv6 принимает форму 2002: wx: yz:: wx: yz, где wx представляет собой первые два байта системного IPv4‑адреса в шестнадцатеричном формате, а yz — последние два байта. Имея в виду адреса 6to4, узел будет пытаться найти в Интернете промежуточный маршрутизатор 6to4. Маршрутизатор 6to4 — это узел, который расположен как в сети Интернет IPv4, так и в сети Интернет IPv6; он позволяет системам 6to4 устанавливать связь с узлами по IPv6. Системы Vista, Server 2008, Windows 2003 и XP для разрешения полных имен FQDN используют DNS 6to4.ipv6.microsoft.com. Возвращается адрес IPv4 промежуточного маршрутизатора 6to4.

Система с адресом 6to4 может действовать как маршрутизатор для самой себя и для хостов 6to4; эти хосты получают IPv6–6to4‑адреса от маршрутизатора 6to4 как часть процесса взаимного обмена информацией маршрутизаторами. Отметим, что хосты 6to4 имеют глобальный unicast-адрес и префикс 2002: wx: yz: subnetid::/64, где wx и yz — шестнадцатеричное представление публичного IPv4‑адреса маршрутизатора 6to4 w.x.y.z, а subnetid — уникальный идентификатор физического адаптера маршрутизатора 6to4, через который выполняется router solicitation and advertisement. Помните, что хосты 6to4 добавляют в конец 64‑разрядный адрес интерфейса на основе MAC-адреса. Хосты 6to4 могут также иметь частный немаршрутизируемый адрес IPv4. Когда хост 6to4 получает IPv6‑адрес от маршрутизатора 6to4, этот маршрутизатор становится маршрутизатором по умолчанию для хоста.

Чтобы система Windows выступала как маршрутизатор 6to4, у нее, во‑первых, должен быть адрес 6to4 и, во‑вторых, система должна быть вручную настроена с помощью команды Netsh. Ниже приведены необходимые команды:

NETSH interface ipv6 set interface

forwarding=enabled

advertise=enabled siteprefixlength=48

NETSH interface ipv6 6 to4 set state enabled

NETSH interface ipv6 set interface

6to4 interface> forwarding=enabled

siteprefixlength=48

NETSH interface ipv6 add route 2002:

::::/64

publish=yes siteprefixlength=48

В этих командах PrivateInterface — имя сетевого адаптера на внутреннем интерфейсе (внутренняя сеть, Local Area Connection 2), wx — первые два байта (в шестнадцатеричном виде) адреса IPv4, yz — последние два байта (в шестнадцатеричном виде) адреса IPv4, subnetid — индекс интерфейса, выделенного адаптера. Если маршрутизатор 6to4 имеет несколько интерфейсов, то первая и четвертая команда Netsh должны быть повторены для каждого интерфейса (если на каждом из них предполагается работа по IPv6).

При установлении исходящего соединения с узлом, для которого недоступны адреса link-local или site-local, 6to4‑хост будет посылать IPv6‑пакеты на 6to4‑маршрутизатор, с которого хост сможет получить соответствующий 6to4‑адрес. Маршрутизатор 6to4 проверяет адрес назначения для определения наилучшего маршрута. До адреса, который сам по себе является адресом 6to4 (то есть начинается с 2002::/16), можно будет добраться при помощи адреса IPv4, содержащегося в префиксе и инкапсулированном в пакете IPv6 с типом протокола 41. Если адрес назначения не является адресом 6to4, маршрутизатор отошлет пакет по адресу IPv4 после разрешения имени на 6to4.ipv6.microsoft.com.

Как и в случае с узлами и туннелями, устанавливаемыми вручную, маршрутизаторам 6to4 требуется публичный адрес IPv4; с маршрутизаторами 6to4 и хостами, в том числе с частными IPv4‑адресами, можно установить соединение со стороны узлов IPv6 по сети Интернет IPv6 и увидеть соответствующий входной трафик. Когда узлу IPv6 нужно связаться с хостом 6to4, пакеты IPv6 посылаются на маршрутизатор 6to4 с использованием IPv4 последнего. Маршрутизатор пересылает пакет на 6to4‑хост. По этой причине все хосты 6to4 и маршрутизаторы должны располагаться за сетевым экраном IPv6 или иметь специально настроенный сетевой экран на самом хосте. О сетевых экранах и безопасности IPv6 на хосте мы еще поговорим.

ISATAP

Во второй статье цикла вкратце мы уже касались темы Intra-Site Automatic Tunnel Addressing Protocol (ISATAP). Протокол ISATAP, разработанный для использования во внутренней корпоративной сети, дает возможность узлам IPv6 взаимодействовать в пределах сайта поверх IPv4, когда отсутствуют маршрутизаторы IPv6 и не используется локальная адресация (site local addressing). ISATAP — это пример механизма построения автоматических туннелей.

ISATAP очень удобен в качестве переходной технологии. Узел IPv6 под управлением Server 2008 или Windows 2003 может функционировать как маршрутизатор ISATAP и использоваться как шлюз для узлов IPv6 с адресами IPv4 в сети без IPv6‑маршрутизаторов, а также в сетях IPv6, например в сети Интернет IPv6. В таком случае маршрутизатор ISATAP настраивается с глобальным адресом (global unicast address) — либо вручную (как часть процесса взаимообмена информацией маршрутизаторами), либо с адресом 6to4, префикс которого рассылается по узлам IPv6, связь с которыми осуществляется поверх IPv4, так что они могут получить доступ к сети IPv6. Когда IPv6‑узлы под управлением Windows стартуют, выполняется поиск имени по протоколу ISATAP с использованием локального файла hosts, широковещательного протокола NetBIOS и DNS. Можно вручную настроить хосты IPv6 с адресом IPv4 маршрутизатора ISATAP при помощи следующей команды Netsh:

netsh interface ipv6 isatap set router

В этой команде w.x.y.z — адрес IPv4 от маршрутизатора ISATAP. Узлы IPv6 связываются с маршрутизатором ISATAP, используя IPv6, инкапсулированный в пакеты IPv4, с номером протокола 41. Узлы IPv6 будут посылать сообщение router-solicitation на маршрутизатор ISATAP, который отвечает пакетами router advertisements, включая префикс с глобально агрегированными адресами, назначенными для маршрутизатора ISATAP. Узлы IPv6, которые устанавливают соединение с маршрутизатором ISATAP и получают префиксы IPv6 как часть процесса установления связи между маршрутизаторами, называются хостами ISATAP.

Когда хосту ISATAP нужно установить соединение с узлом IPv6 в другом сегменте и по интерфейсу ISATAP узел недостижим, хост посылает инкапсулированный в IPv4 пакет IPv6 на маршрутизатор ISATAP с 41-м номером протокола IP. Маршрутизатор ISATAP извлекает пакет IPv6 и передает его на следующий узел, определенный в таблице маршрутизации IPv6, или на свой маршрутизатор IPv6 по умолчанию, если соответствующая запись в таблице маршрутизации отсутствует.

Server 2008 или узел Windows 2003 IPv6 должен быть настроен как маршрутизатор ISATAP. Для того чтобы настроить узел как маршрутизатор ISATAP, нужно воспользоваться следующими командами:

NETSH interface ipv6 isatap set state enabled

NETSH interface ipv6 set interface

forwarding=enabled

NETSH interface ipv6 set interface "Automatic

Tunneling Pseudo-Interface"

forwarding=enabled advertise=enabled

NETSH interface ipv6 add route

/

"Automatic Tunneling

Pseudo-Interface" publish=yes

NETSH interface ipv6 isatap set router

В приведенных выше командах PublicOrTunnelInterfaceName — имя адаптера, подключенного к Интернету, либо это туннельный интерфейс, address/prefix — часть адреса IPv6, который нужен маршрутизатору ISATAP для процедуры оповещения. В этом случае обычно устанавливается префикс 48 или 64. w.x.y.z — это частный (внутренняя сеть) адрес IPv4. Самая последняя команда необходима только тогда, когда маршрутизатору ISATAP не удается разрешить имя ISATAP. Эти команды срабатывают незамедлительно и действуют до следующей перезагрузки. Если настройки должны сохраняться и после перезагрузки, используйте аргумент store=persistent вместе с командами Set Interface и Add Route.

Рекомендую отключить IPv6 на частном (внутренняя сеть) физическом адаптере. Если маршрутизатор ISATAP использует туннель для подключения в Интернету (а не адрес 6to4 в общедоступной сети IPv4) или физически подключен к IPv6‑Интернету по публичному (в сети Интернет) интерфейсу, рекомендую отключить IPv6 на публичном физическом адаптере. Это можно сделать, сняв флажок Microsoft TCP/IP version 6 в окне Properties нужного адаптера. Перечисленные выше рекомендации связаны с тем, что иногда маршруты на Automatic Tunneling Pseudo-Interface не удается разослать при помощи процедуры оповещения. И тогда клиенты ISATAP не в состоянии будут подключиться к Интернету IPv6, если IPv6 настроен на частный интерфейс.

Безопасность IPv6

Поскольку IPv6 заменяет сетевой уровень для IPv4 и поскольку TCP- и UDP-соединения работают поверх IPv6, как раньше работали поверх IPv4, обеспечение безопасности сети IPv6 — вопрос актуальный. Фактически, когда дело доходит до развертывания сетевых экранов, экранов на базе хоста или настройки правил доступа (ACL) на маршрутизаторах, возможности IPv6 следует рассмотреть с особым вниманием.

В тех сетях, где IPv6 поддерживается на уровне инфраструктуры маршрутизации, а каждому хосту присвоен агрегированный индивидуальный адрес IPv6, можно настроить и сеть IPv6, и ACL на маршрутизаторах и экранах на базе хоста в основном точно так же, как раньше в сетях IPv4: на базе адреса IPv6 и порта источника и приемника, а также протокола TCP и UDP. Фильтрация трафика и инспекция контента на прикладном уровне на фаерволах должны отработать без проблем.

При использовании 6to4 или ISATAP для конечных систем и хостов вопросам безопасности уделяется особое внимание. Каждый узел IPv6 достижим из сети Интернет IPv6 через механизм 6to4 или маршрутизатор ISATAP, так как каждый узел имеет свой глобальный индивидуальный адрес. Рекомендуется использовать подход эшелонированной обороны. Первая линия защиты — экран сетевого уровня, который поддерживает IPv6 для фильтрации нежелательного или потенциально опасного трафика до того как он достигнет ISATAP- или 6to4‑маршрутизатора. Вторая линия защиты — использование Windows Firewall на самих ISATAP- или 6to4‑маршрутизаторах. Отметим, что Windows Firewall поддерживает IPv6 для физических адаптеров, но не поддерживает туннели. При использовании туннеля нет возможности настроить экран для фильтрации нежелательного трафика. Третья линия защиты — экраны на базе хоста. Это самое правильное место для отключения любой нежелательной службы на конечном узле IPv6.

И наконец, отметим, что ISA Server 2006 не поддерживает IPv6, и я строго рекомендую ни в какой конфигурации не использовать систему ISA Server 2006 в качестве маршрутизатора IPv6.

Дальнейшее обсуждение

IPv6 был спроектирован с расчетом постепенного перехода от IPv4. Мы рассмотрели три общих подхода, согласно которым можно настроить сеть компании на работу в Интернете на базе IPv6 даже в том случае, когда провайдер еще не обеспечивает поддержки IPv6. Один метод, ISATAP, позволяет использовать IPv6 в организации даже тогда, когда внутренняя сетевая инфраструктура не поддерживает IPv6. Существуют и другие технологии и стратегии перехода, в том числе Teredo, которые работают за NAT-маршрутизаторами и фаерволами. Подробнее о стратегиях перехода рассказано в статье Microsoft «IPv6 Transition Technologies» (http://technet.microsoft.com/en-us/library/bb726951.aspx).

Джон Хоуи (jhowie@microsoft.com) — менеджер центра Microsoft Security Center of Excellence. Имеет сертификаты CISSP, CISM и CISA