Адрес из подсети 300::/64

Итак, вы установили поддержку сети Yggdrasil, и хотите дать своему серверу дополнительные IP-адреса. Зачастую более короткие.

Теоретическая часть

Маршрутизация в Yggdrasil работает по принципу сети IPv6 с маской 0200::/7. Коротко поясним содержание этого выражения. Каждая цифра в адресе имеет 16 вариантов написания в шестнадцатиричной системе счисления (0-9, a-f). Для написания подобного значения в двоичной системе счисления, на которой работает почти вся современная электронная техника, требуется четыре бита (цифры 0 или 1): 1=0001, 9=1001, f=1111 и так далее. Непосредственно маску обозначает число семь, указанное через слеш 0200::/7. Это количество бит, которые определяют не узел в сети, а саму сеть. Первый символ 0200 строго входит в маску сети, т.к. число семь полностью покрывает количество четырех битов. На второй символ 0200 приходится не 4 бита, а только 3: 2=0010. Последний бит остается свободным и позволяет указывать тройку вместо двойки: 3=0011. Всего в адресе IPv6 128 бит, 7 из которых, как мы выяснили, относятся к обозначению сети Yggdrasil и всегда остаются неизменными. Оставшийся 121 бит дает пространство адресов для пользователей. Это огромное число, привычная запись которого потребует больше 250 символов!
Нули в начале разряда опускаются, поэтому сеть Yggdrasil можно записать в виде 200::/7. Тем более, что первый ноль является константой.
Две и более секции, состоящие из нулей, можно сократить. Сокращение обозначается в виде двух двоеточий. Например, 209:abcd:abcd:abcd:0:0:cccc:cccc сокращается до 209:abcd:abcd:abcd::cccc:cccc. Важно: сократить можно только один фрагмент адреса.
Помимо основной сети 200::/7, каждый адрес Yggdrasil имеет свою подсеть. По задумке, подсети используются для локальной маршрутизации, однако могут использоваться и исключительно в эстетических целях для получения короткого адреса. Подсети Yggdrasil имеют вид 300::/64.

Практическая часть

Средствами Yggdrasil узнаем свою подсеть:
$ sudo yggdrasilctl getSelf

Видим нечто вроде:

Build name: yggdrasil
Build version: 0.3.14
IPv6 address: 205:1483:f4dc:5870:b4d6:c309:1d51:aace
IPv6 subnet: 305:1483:f4dc:5870::/64
Coords: [1 13 10 167 6]
Создаем дополнительный адрес:

Копируем или запоминаем значение «IPv6 subnet». Двойное двоеточие означает сокращение, т.е. недостающие четыре секции состоят из нулей. После двоеточий в рамках правил (4 символа из диапазонов 0-9, a-f) можно дописать любое значение (например, 305:1483:f4dc:5870::ac1d), таким образом изменив только последний разряд, сохраняем сокращенный адрес. При необходимости можно указать бОльшее количество разрядов.

Добавляем новый IP в систему:
$ sudo ifconfig lo inet6 add 305:1483:f4dc:5870::ac1d/64

Проверяем:

$ sudo ifconfig lo

И видим:

  lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 305:1483:f4dc:5870::ac1d  prefixlen 64  scopeid 0x0<global>
        inet6 ::1  prefixlen 128  scopeid 0x10<host>

Адрес добавлен (вторая строка).

Windows

Данная операция также легко производится на Windows. В командной строке выполните:

"C:\Program Files\Yggdrasil\yggdrasilctl.exe" getSelf

Работа с адресом аналогична вышеописанному. Затем добавьте новый адрес на интерфейс Yggdrasil WireGuard: Свойства - Свойства IPv6 - Дополнительно - Добавить - Добавить.

Автоматическое добавление дополнительных адресов

Добавочные IP пропадут, если вы опустите основной интерфейс Yggdrasil.

Сделать так, чтобы они добавлялись автоматически можно разными способами. Например:

Linux

Способ 1

Добавление команд в override.conf юнита systemd:

sudo systemctl edit yggdrasil.service

Добавляем в файл строки и записываем его:

[Service]
ExecStartPost=/bin/sleep 2s
ExecStartPost=/bin/ip address add 300:75c1:bcf1:7621::1/64 dev tun0

Так дополнительный адрес будет добавлен при старте сервиса Yggdrasil (2s - требуется пара секунд для инициализации).

Способ 2

В файл /etc/network/interfaces можно добавить строки:

auto lo
iface lo inet loopback
  up ip addr add 300:75c1:bcf1:7621::1/64 dev lo
  up ip addr add 300:75c1:bcf1:7621::2/64 dev lo

Адрес на интерфейс lo будет добавлен сразу после инициализации этого интерфейса и останется на нём даже после остановки Yggdrasil.

Способ 3 (системы с netplan)

Создать файл /etc/netplan/01-ygglo.yaml:

network:
  ethernets:
    lo:
     renderer: networkd
     match:
       name: lo
     addresses:
     - "300:75c1:bcf1:7621::1/128"
     - "300:75c1:bcf1:7621::2/128"
Способ 4 (crontab)

Выполняется от пользователя root:

crontab -e
@reboot sleep 2; ifconfig lo inet6 add 305:1483:f4dc:5870::ac1d/64

Windows

В Windows Способ 1 можно реализовать с помощью планировщика заданий, создав задание с запуском/остановкой службы в качестве триггера. Подробнее здесь (возможно, после старта службы и непосредственно перед добавление доп. адреса на интерфейс (адаптер) Yggdrasil в скрипте понадобится сделать паузу секунд на 5).

Добавление IP-адреса:

netsh interface ipv6 add address "Yggdrasil" "301:3669:2ff8:2aa3::1"

Здесь Yggdrasil - имя интерфейса (адаптера) Yggdrasil.

Или так с помощью VB-скрипта:

WScript.Sleep(5000)
Set oShell = CreateObject("Shell.Application")
oShell.ShellExecute "netsh.exe", "interface ipv6 add address ""Yggdrasil"" ""301:3669:2ff8:2aa3::1""", "", "runas", 0

Заключение

Таким образом можно задать очень большое количество адресов на одном устройстве. Точнее, ровно 18 446 744 073 709 551 616 штук.

Обсуждение

Олег, 2023/05/24 12:18
Правильно ли я понимаю, что с точки зрения спуфинга адресов, безопасности, исходные адреса 0200::/7 намного (!) устойчивее чем короткие адреса 300::/64? Или нет?

newbie, 2023/05/24 13:07, 2023/05/24 22:13
В теории - да. На практике вероятность намайнить такой ключ, который дал бы половину уже существующего адреса очень мала.
В репозитории проекта на GitHub есть Issue, в которой описывается, способ которым были получены одинаковые адреса из подсети 300::/64 c разными ключами, но то, что там описано - это не спуфинг. Спуфинг - это целенаправленная подделка конкретного адреса. А там описывается получение большого количества ключей ed25519 и выбор из них таких, у которых могли бы быть одинаковые адреса из 300::/64.
https://github.com/yggdrasil-network/yggdrasil-go/issues/779
Из 63 миллионов ключей 1800 оказались такими, из которых можно получить одинаковые адреса подсетей.
Делалось это еще на Yggdrasil версии 0.3.
Спуфинг на практике провести пока никому не удалось.
Тем не менее, разработчики рекомендуют запускать публичные сервисы на полных адресах Yggdrasil.

Только авторизованные участники могут оставлять комментарии.
yggdrasil/subnet_setting.txt · Последнее изменение: 2024/01/29 10:33 — d4708
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki