==== Мост Yggdrasil ↔ LAN в Windows ==== //(на примере Windows Server 2012 R2).// По мотивам HowToYgg статей «[[yggdrasil:network_connection_variants]]» и «[[yggdrasil:subnet_setting]]». ---- \\ Мост Yggdrasil ↔ LAN позволяет получить доступ к сети Yggdrasil устройствам, на которых клиент не установлен, объединив вашу домашнюю IPv6-сеть с глобальной подсетью вашего узла Yggdrasil Network и, соответственно, всей Yggdrasil-сетью целиком. Пример частный, но принципы применимы почти везде. Предполагается, что протокол IPv6 на LAN-интерфейсе включен, установлен Yggdrasil, добавлены публичные пиры и есть факт корректной работы Yggdasil-сети. Для удобства рекомендуется добавить путь к yggdrasilctl.exe в переменную PATH. Если не хотите — запускайте команды из каталога установки Yggdrasil с учётом «.\». **1. Определение IPv6-адреса, подсети и имени сетевого интерфейса Yggdrasil Network.** В PowerShell от имени администратора: yggdrasilctl getSelf Пример вывода: Build name: yggdrasil Build version: #Ваша версия IPv6 address: 200:aaaa:bbbb:cccc:XXXX:XXXX:XXXX:XXXX IPv6 subnet: 300:aaaa:bbbb:cccc::/64 Public key: #Ваш публичный ключ Разбираем: Build name: yggdrasil В конфигурационном файле Yggdrasil (yggdrasil.conf) есть параметр **IfName**. Именно он определяет имя сетевого интерфейса, который создаёт Yggdrasil в Windows. По умолчанию это просто «Yggdrasil», но вы можете изменить название на любое, например: "Ygg0", "Mesh6", "HyperLAN" или другое в рамках ANSI. Это важно, потому что все дальнейшие команды PowerShell опираются на факт того, как интерфейс называется реально. Если в вашем yggdrasil.conf имя изменено, то и в командах упоминающих действительные сетевые имена типа: Set-NetIPInterface -InterfaceAlias "Yggdrasil" -Forwarding Enabled нужно будет подставить своё значение, например: Set-NetIPInterface -InterfaceAlias "Ваше название" -Forwarding Enabled В данной статье используются стандартные имена «Yggdrasil» и «Ethernet» для LAN, чтобы избежать путаницы и сделать примеры универсальными. //Примечание//: Сам //Build name// технически не является //IfName//, но в рамках статьи этот вопрос рассматриваться не будет поскольку не имеет определяющего значения на результат. Главное - использовать действительные имена сетевых интерфейсов Windows. Продолжаем разбираться: **200:aaaa:bbbb:cccc:XXXX:XXXX:XXXX:XXXX** — индивидуальный адрес вашей Yggdrasil-машины. **300:aaaa:bbbb:cccc::/64** — подсеть, которую мы и будем раздавать клиентам LAN. Это ваша «внутренняя Ygg-подсеть». //Скопируйте// значение IPv6 subnet — оно потребуется позже. **2. Идентификация действительных сетевых имён интерфейсов Yggdrasil и LAN.** Через GUI: Панель управления → Сеть и Интернет → Центр управления сетями → Изменение параметров адаптера или в PowerShell: netsh interface ipv6 show interfaces Ищем строки примерно такого вида: 31 0 65535 connected Yggdrasil 12 20 1500 connected Ethernet Yggdrasil — виртуальный интерфейс самого Yggdrasil, а Ethernet (или другое имя) - ваша LAN. MTU можно запомнить, но это не критично — главное знать имена интерфейсов. Эти два имени обязательно понадобятся далее при включении IPv6-форвардинга и назначении адреса подсети 300::/64. //Замечание//: Так как имя сетевого интерфейса Yggdrasil Network привязано к параметру **IfName** из yggdrasil.conf, изменение его средствами Windows (через GUI или PowerShell) нецелесообразно: оно действует только в рамках текущего запуска yggdrasil.exe и после перезапуска будет автоматически заменено на значение из IfName. Это может привести к несоответствию реального имени интерфейса и настроек netsh после, например, аварийной перезагрузки или других подобных ситуаций. Используйте только имя, указанное в IfName. **3. Включение IPv6-маршрутизации в Windows.** По умолчанию Windows не маршрутизирует IPv6-пакеты, поэтому включаем эту функцию. Необходимо назначить два ключа в реестре из: **HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters** **DisabledComponents = 0** — включает полный IPv6-стек без ограничений. **EnableICSIPv6 = 1** — разрешает Windows действовать как IPv6-маршрутизатор при использовании Internet Connection Sharing. Создаём параметры при необходимости в regedit или PowerShell-командами: New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" -Name "DisabledComponents" -PropertyType DWord -Value 0 -Force New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" -Name "EnableICSIPv6" -PropertyType DWord -Value 1 -Force //Примечание//: На Windows Server 2012 R2 обычно требуется только DisabledComponents = 0. **4. Включение IPv6-Forwarding на интерфейсах Yggdrasil и LAN.** Выполняем: Set-NetIPInterface -InterfaceAlias "Yggdrasil" -Forwarding Enabled Set-NetIPInterface -InterfaceAlias "Ethernet" -Forwarding Enabled Проверяем: Get-NetIPInterface | Select InterfaceAlias, Forwarding Вывод Yggdrasil Enabled Ethernet Enabled говорит о верной настройке. **5. Проверка общих IPv6-настроек.** netsh interface ipv6 show global Здесь особого действия не требуется — вывод носит справочный характер. **6. Включение IPv6-Forwarding для Yggdrasil и LAN на уровне интерфейса netsh.** netsh interface ipv6 set interface "Yggdrasil" forwarding=enabled netsh interface ipv6 set interface "Ethernet" forwarding=enabled //OK.// **7. Назначение LAN-интерфейсу адреса из вашей подсети 300::.** Используем записанное ранее значение подсети: **300:aaaa:bbbb:cccc::/64** и назначаем LAN-интерфейсу адрес, например, **::a** из GUI, либо в PowerSell: netsh interface ipv6 add address "Ethernet" "300:aaaa:bbbb:cccc::a" Длинна префикса подсети: **64** **Важно**: нельзя использовать адрес, который выводится в строке из yggdrasilctl getSelf: «IPv6 address: **200:aaaa:bbbb:cccc:XXXX:XXXX:XXXX:XXXX**» - он уже занят самим Ygg-нодом и находится в диапазоне **200:**. //Замечание//: Интернет (WAN) и LAN на Windows-мосте обязательно должны быть разными интерфейсами. Интерфейс с подсетью 300::/64 — это чисто внутренняя сеть. Интернет, через который Yggdrasil подключается к пирам, должен приходить через другой сетевой адаптер. Если интернет приходит в эту же LAN-сеть, Windows может перепутать маршрутизацию и попытаться отправлять Ygg-трафик обратно в LAN, что приводит к полной неработоспособности моста. Сам факт корректной маршрутизации возможен даже и при таких условиях, однако потребует дополнительных сведений о конфигурации вашей сети, знаний и опыта в маршрутизации. Команды: netsh interface ipv6 show addresses "Ethernet" netsh interface ipv6 show addresses "Yggdrasil" расскажут вам дополнительные подробности. Если все действия совершены верно, Windows готов выполнять роль моста Yggdrasil ↔ LAN. **8. Настройка клиентов LAN.** На каждом клиентском устройстве указываются: IPv6-адрес: **300:aaaa:bbbb:cccc::b** (или любой другой в этой подсети) Длинна префикса подсети: **64** Основной шлюз: **300:aaaa:bbbb:cccc::a** (адрес вашего Windows-моста) **9. Проверка.** С любого устройства LAN: ping любой:узел:Yggdrasil или откройте в браузере Ygg-сайт по адресу вида: http://[300:....] http://[200:....] например http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c] Если всё работает — мост настроен. **Стоит отметить**, что разворачивая мост, вы по сути выводите всю вашу LAN в глобальную IPv6-среду Yggdrasil. И даже если у вас дома всё под контролем помните, что теперь локальные машины и сам сетевой мост - часть общей yggdrasil-сети без сквозного шифрования. Если //сомневаетесь в добросовестности// абсолютно всех пользователей Yggdrasil Network или имеете //индивидуальные требования// к сетевой безопасности - есть смысл настроить фильтрацию в брандмауэре Windows или на внешнем маршрутизаторе согласно вашим нуждам. **Заключение** Описанный метод успешно работает у меня в домашней сети, где шлюзом выступает Windows Server 2012 R2. Аналогичный подход применим ко всем версиям Windows, поддерживающим PowerShell и запуск Yggdrasil, а также полезен как общее введение в IPv6-маршрутизацию. Выражаю благодарность авторам TCP/IP-протокола, Microsoft, OpenAI, HowToYgg WiKi, разработчикам и сообществу Yggdrasil Network. Успехов в настройках, господа сетевые администраторы! ~~DISCUSSION~~