howto-db/data/pages/yggdrasil/subnet_setting.txt
2024-02-10 12:53:55 +00:00

126 lines
8.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

====== Адрес из подсети 300::/64 ======
Итак, вы установили поддержку сети Yggdrasil, и хотите дать своему серверу дополнительные IP-адреса. Зачастую более короткие.
==== Теоретическая часть ====
Маршрутизация в Yggdrasil работает по принципу сети IPv6 с маской 0200::/7.
Коротко поясним содержание этого выражения. Каждая цифра в адресе имеет 16 вариантов написания в шестнадцатиричной системе счисления (0-9, a-f). Для написания подобного значения в двоичной системе счисления, на которой работает почти вся современная электронная техника, требуется четыре бита (цифры 0 или 1): 1=0001, 9=1001, f=1111 и так далее. Непосредственно маску обозначает число семь, указанное через слеш 0200::**/7**. Это количество бит, которые определяют не **узел** в сети, а саму **сеть**. Первый символ **0**200 строго входит в маску сети, т.к. число семь полностью покрывает количество четырех битов. На второй символ 0**2**00 приходится не 4 бита, а только 3: 2=**001**0. Последний бит остается свободным и позволяет указывать тройку вместо двойки: 3=001**1**. Всего в адресе 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 узнаем свою подсеть: ==
<code>
$ sudo yggdrasilctl getSelf
</code>
Видим нечто вроде:
<code>
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]
</code>
== Создаем дополнительный адрес: ==
Копируем или запоминаем значение "IPv6 subnet". Двойное двоеточие означает сокращение, т.е. недостающие четыре секции состоят из нулей. После двоеточий в рамках правил //(4 символа из диапазонов 0-9, a-f)// можно дописать любое значение (например, 305:1483:f4dc:5870::**ac1d**), таким образом изменив только последний разряд, сохраняем сокращенный адрес. При необходимости можно указать бОльшее количество разрядов.
== Добавляем новый IP в систему: ==
<code>
$ sudo ifconfig lo inet6 add 305:1483:f4dc:5870::ac1d/64
</code>
Проверяем:
<code>
$ sudo ifconfig lo
</code>
И видим:
<code>
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>
</code>
Адрес добавлен (вторая строка).
==== Windows ====
Данная операция также легко производится на Windows.
В командной строке выполните:
<code>
"C:\Program Files\Yggdrasil\yggdrasilctl.exe" getSelf
</code>
Работа с адресом аналогична вышеописанному. Затем добавьте новый адрес на интерфейс Yggdrasil WireGuard: Свойства - Свойства IPv6 - Дополнительно - Добавить - Добавить.
{{:win_subnet_add_01.png?700}}
==== Автоматическое добавление дополнительных адресов ====
Добавочные IP пропадут, если вы опустите основной интерфейс Yggdrasil.
Сделать так, чтобы они добавлялись автоматически можно разными способами. Например:
=== Linux ===
== Способ 1 ==
Добавление команд в ''%%override.conf%%'' юнита systemd:
<code>sudo systemctl edit yggdrasil.service</code>
Добавляем в файл строки и записываем его:
<code>[Service]
ExecStartPost=/bin/sleep 2s
ExecStartPost=/bin/ip address add 300:75c1:bcf1:7621::1/64 dev tun0</code>
Так дополнительный адрес будет добавлен при старте сервиса Yggdrasil (2s - требуется пара секунд для инициализации).
== Способ 2 ==
В файл ''%%/etc/network/interfaces%%'' можно добавить строки:
<code>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</code>
Адрес на интерфейс ''%%lo%%'' будет добавлен сразу после инициализации этого интерфейса и останется на нём даже после остановки Yggdrasil.
== Способ 3 (системы с netplan) ==
Создать файл ''%%/etc/netplan/01-ygglo.yaml%%'':
<code>network:
ethernets:
lo:
renderer: networkd
match:
name: lo
addresses:
- "300:75c1:bcf1:7621::1/128"
- "300:75c1:bcf1:7621::2/128"</code>
== Способ 4 (crontab) ==
Выполняется от пользователя root:
<code>
crontab -e
@reboot sleep 2; ifconfig lo inet6 add 305:1483:f4dc:5870::ac1d/64
</code>
=== Windows ===
В Windows [[#Способ_1|Способ 1]] можно реализовать с помощью планировщика заданий, создав задание с запуском/остановкой службы в качестве триггера. Подробнее [[https://superuser.com/questions/502160/run-a-scheduled-task-after-a-windows-service-is-started|здесь]] (возможно, после старта службы и непосредственно перед добавление доп. адреса на интерфейс (адаптер) Yggdrasil в скрипте понадобится сделать паузу секунд на 5).
Добавление IP-адреса:
<code>netsh interface ipv6 add address "Yggdrasil" "301:3669:2ff8:2aa3::1"</code>
Здесь ''%%Yggdrasil%%'' - имя интерфейса (адаптера) Yggdrasil.
Или так с помощью VB-скрипта:
<code>
WScript.Sleep(5000)
Set oShell = CreateObject("Shell.Application")
oShell.ShellExecute "netsh.exe", "interface ipv6 add address ""Yggdrasil"" ""301:3669:2ff8:2aa3::1""", "", "runas", 0</code>
==== Заключение ====
Таким образом можно задать очень большое количество адресов на одном устройстве. Точнее, ровно 18 446 744 073 709 551 616 штук.