💾 Archived View for betahowto.duckdns.org › yggdrasil:subnet_setting captured on 2024-03-21 at 15:45:30. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-02-05)

🚧 View Differences

-=-=-=-=-=-=-

Адрес из подсети 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 - Дополнительно - Добавить - Добавить.

/win_subnet_add_01.png?700

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

Добавочные 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 ( gemini://betahowto.duckdns.org/#Способ_1 ) можно реализовать с помощью планировщика заданий, создав задание с запуском/остановкой службы в качестве триггера. Подробнее здесь ( https://superuser.com/questions/502160/run-a-scheduled-task-after-a-windows-service-is-started ) (возможно, после старта службы и непосредственно перед добавление доп. адреса на интерфейс (адаптер) 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 штук.

Материалы

gemini://betahowto.duckdns.org/#Способ_1

https://superuser.com/questions/502160/run-a-scheduled-task-after-a-windows-service-is-started

Навигация

Поиск

Главная страница

Редактировать

Проект β-Doku

Алиас

[0200::/7]

Alfis / Yggdrasil