💾 Archived View for betahowto.duckdns.org › yggdrasil:network_connection_variants captured on 2024-03-21 at 15:43:56. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-02-05)
-=-=-=-=-=-=-
Разработчики Yggdrasil ( gemini://betahowto.duckdns.org/yggdrasil:yggdrasil ) рекомендуют устанавливать клиент Yggdrasil на каждое устройство, которому нужен доступ в эту сеть. При этом гарантируется сквозное шифрование трафика между узлами, и каждый узел сети сможет выполнять роль маршрутизатора. Однако не во всех сетевых устройствах есть возможность установки и запуска Yggdrasil.
Если устройство поддерживает протокол IPv6, оно может быть подключено к сети Yggdrasil путем присвоения ему IPv6 адреса из подсети 300::/64 и указания адреса шлюза в сеть Yggdrasil.
Иными словами, если у нас дома есть роутер, на котором имеется возможность установить Yggdrasil, то другие устройства в нашей сети мы можем подключить к сети Yggdrasil, не устанавливая на них клиент сети.
Предположим, что узел на роутере имеет адрес Yggdrasil 200:1111:2222:3333:4444:5555:6666:7777, тогда для подключения других устройств в сети необходимо им назначить адреса такого вида: 300:1111:2222:3333::/64. Это могут быть: 300:1111:2222:3333::1, 300:1111:2222:3333::2 и т.д. Обратите внимание, что первая цифра 2 изменена на 3, далее 3 разряда с разделителем ":" - это обязательная часть префикса. Остальные 64 бита (4 последние секции) - произвольные числа от 0000 до ffff. Читайте подробнее о подсети в этой статье ( gemini://betahowto.duckdns.org/yggdrasil:subnet_setting ).
Далее, устройствам с адресами 300:1111:2222:3333::/64 нужно указать маршрут в сеть 0200::/7 через основное устройство с адресом 200:1111:2222:3333:4444:5555:6666:7777.
Примечание: следует учитывать, что при такой конфигурации трафик между роутером и устройствами без Yggdrasil будет передаваться незашифрованным. Кроме того, обратите внимание, что префикс /64 имеет меньше битов адресного пространства, доступного для проверки идентификатора узла, что, в свою очередь, означает, что коллизии хэшей более вероятны. Таким образом, не следует полностью полагаться на адреса диапазона 300::/8 как на достоверно принадлежащие конкретному узлу (хотя, до сих пор подобные коллизии и не возникали, и даже не были намеренно созданы с помощью майнеров адресов, теоретически вероятность их возникновения существует).
Допустим, в домашней сети работает RaspberryPi ( https://ru.wikipedia.org/wiki/Raspberry_Pi ), на котором установлен Yggdrasil: aдрес Yggdrasil: 202:421a:2eс5:40a4:fa32:f4a4:9b42:d4e4; префикс, соответственно: 302:421a:2eс5:40a4::/64; интерфейс: tun0; к локальной сети Raspberri подключен через интерфейс eth0.
Хотим подключить к сети Yggdrasil ноутбук, но не хотим на него устанавливать само ПО Yggdrasil. Ноутбук подключен к той же домашней сети через интерфейс wlo1 (Wi-Fi).
1. Нужно на интерфейс, через который Raspberri подключен к локальной сети, добавить адрес из подсети Yggdrasil:
sudo ip address add 302:421a:2eс5:40a4::1/64 dev eth0
2. На Raspberri же включаем форвардинг пакетов между интерфейсами:
sudo sysctl -w net.ipv6.conf.all.forwarding=1
(для того, чтобы это сохранилось после перезагрузки, необходимо раскоментировать присвоение 1 этому параметру в /etc/sysctl.conf)
3. На ноутбуке, на интерфейсе, которым он подключен к локальной сети, добавим адрес из подсети Yggdrasil:
sudo ip address add 302:421a:2eс5:40a4::5/64 dev wlo1
4. Прописываем на ноутбуке маршрут:
sudo ip -6 route add 0200::/7 via 302:421a:2eс5:40a4::1
Примечание: если на этом этапе у вас возникли сложности, и у вас старое ядро Linux, возможно, вам поможет статья: " ( gemini://betahowto.duckdns.org/yggdrasil:route_with_old_kernel )".
Всё, пробуем с ноутбука пинговать адреса в Yggdrasil:
ping -6 21e:a51c:885b:7db0:166e:927:98cd:d186
Как видим, всё работает:
PING 21e:a51c:885b:7db0:166e:927:98cd:d186(21e:a51c:885b:7db0:166e:927:98cd:d186) 56 data bytes 64 bytes from 21e:a51c:885b:7db0:166e:927:98cd:d186: icmp_seq=1 ttl=63 time=58.0 ms 64 bytes from 21e:a51c:885b:7db0:166e:927:98cd:d186: icmp_seq=2 ttl=63 time=69.0 ms ...
После проделанного, на всякий случай, не забудьте проверить, какие порты открыты на адресах 302:421a:2eс5:40a4::1 и 302:421a:2eс5:40a4::5:
nmap -6 302:421a:2eс5:40a4::5 nmap -6 302:421a:2eс5:40a4::1
Для целей автоматической раздачи устройствам в домашней сети IPv6-адресов из /64-подсети можно использовать демон radvd ( https://en.wikipedia.org/wiki/radvd ) (router advertisement daemon).
Примеры конфигурации демона radvd:
interface eth0 { AdvSendAdvert on; AdvDefaultLifetime 0; prefix 300:1111:2222:3333::/64 { AdvOnLink on; AdvAutonomous on; }; route 200::/7 {}; };
interface eth0 { AdvSendAdvert on; AdvLinkMTU 1280; # без этой строчки сбоит подключение для windows-устройств (задаёт MTU) MinRtrAdvInterval 30; MaxRtrAdvInterval 100; prefix 300:1111:2222:3333::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; # Без этой строки подключаются не все android-устройства; строка "route 200::/7 {};" не требуется. }; RDNSS 300:1111::53 {}; # Необязательно (задает рекурсивный DNS-сервер) };
Здесь 300:1111:2222:3333::/64 - префикc вашей подсети ("выдается" вместе с IPv6 адресом, привязанным к ключу в конфигурационном файле Yggdrasil).
Примечание: по этой ( https://cstamas.hu/blog/posts/yggdrasil_300::__47__7_network_with_openwrt/ ) ссылке можно прочесть о том, анонсируется маршрут-поумолчанию без radvd (на OpenWrt ( https://ru.wikipedia.org/wiki/OpenWrt )).
Для корректной работы маршрутизации через устройство, на котором установлен Yggdrasil на нем должна быть разрешена маршутизация IPv6-пакетов:
sudo sysctl -w net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1 нужно раскомментировать в /etc/sysctl.conf
Допустим, у вас есть роутер, где LAN является сетевым интерфейсом br0, а Yggdrasil - ygg0.
ip a add fdb7:e5e:e3a9:f2d1::/64 dev br0 # Unique local address (ULA) является аналогом 192.168.1.1 в ipv4, его нужно добавить для корректной работы dnsmasq. ip a add 300:1111:2222:3333::/64 dev br0 # Не забудьте заменить префикс 300:1111:2222:3333::/64 из примера на правильный адрес, полученный при запуске команды yggdrasilctl -v getSelf ip route add 200::/7 dev ygg0
Обратите внимание на эти команды. Наиболее лучшим решением будет добавление ipv6 адресов через конфигурационные файлы системы или заранее подготовленный скрипт. В примере также добавлен ULA (fdb7:e5e:e3a9:f2d1::). Не обязательно использовать именно этот префикс. Вы можете сгенерировать свой https://unique-local-ipv6.com/
Более подробный пример для систем c OpenRC
На операционных системах c OpenRC (например, Gentoo) у вас есть возможность дополнительно запускать свои собственные скрипты. При каждом запуске сервиса local - будет запускаться скрипт yggdrasil.start. Подробнее: https://wiki.gentoo.org/wikietc/local.d
# rc-service local restart * Stopping local ... * Executing "/etc/local.d/yggdrasil.stop" ... [ ok ] * Starting local ... * Executing "/etc/local.d/yggdrasil.start" ... [ ok ]
/etc/local.d/yggdrasil.start
sh yggdrasil.start
#!/bin/bash # Возможно, вы захотите очистить лог > /var/log/yggdrasil.stdout.log #Не забудьте заменить префикс 300:1111:2222:3333::/64 из примера на правильный адрес, полученный при запуске команды yggdrasilctl -v getSelf ip a add 330:1111:2222:3333::/64 dev br0 # Также вы можете добавить адрес вашего вебсайта ip a add 330:1111:2222:3333::fea4/64 dev br0 ip r add 200::/7 dev ygg0
Можно дополнительно создать срипт /etc/local.d/yggdrasil.stop, который будет удалять добавленные адреса, но он не особо то и нужен. Учтите, при перезапуске интерфейса br0 он снова сбросится к стандартным настройкам.
rc-service net.br0 restart
Это можно исправить несолькими способами:
postup() { if [ "${IFACE}" = "br0" ] then #rc-service local restart /etc/local.d/yggdrasil.start fi return 0 }
На данном этапе вы уже можете посетить сайты сети Yggdrasil через консоль роутера. Убедитесь, что это работает.
# Используя консольный браузер lynx http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/ # Или вот так curl http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/
Теперь настройте DHCPv6, чтобы раздавать адреса устойствам подключённым каким либо образом к интерфейсам объединённым в br0 (для понимания, br0 - бридж).
Допишите в файл /etc/dnsmasq.conf
listen-address=::1,127.0.0.1,192.168.1.1,fdb7:e5e:e3a9:f2d1:: # Слушать множество адресов, включая добавленный нами ранее ULA dhcp-range=br0,300:1111:2222:3333::,ra-stateless,72h # YGG DHCP - Автоматическое получение адресов (DHCP). Не забудьте заменить 300:1111:2222:3333:: из примера на правильный адрес, полученный при запуске команды yggdrasilctl -v getSelf dhcp-range=br0,fdb7:e5e:e3a9:f2d1::,ra-stateless,72h # ULA DHCP # Пример настройи DNS сервера только для посещения сайтов черрез домены .ygg и .meship. # Актуальные DNS сервера публикуются на странице http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:dns:internal_dns server=/.meship/.ygg/302:db60::53 server=/.meship/.ygg/300:6223::53 # В данной конфигуации вы также можете использовать unbound, но не 53 порту, так как порт занят DNS сервером самого dnsmasq. Пример конфигуации unbound на странице http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:dns:unbound_wyrd server=::1#5353 server=127.0.0.1#5353
После внесения правок перезапустите dnsmasq.
( gemini://betahowto.duckdns.org/yggdrasil:Yggdrasil ) устанавливается на одном единственном компьютере. Лучше, если это будет домашний сервер, который никогда не выключается.
На этом сервере нужно поставить прокси (http или socks), тогда вы сможете заходить через этот прокси в сеть, используя веб-браузер. А если ваш сервер
виден из внешнего мира, то вы сможете выходить в сеть вообще отовсюду. Не забудьте только повесить прокси на нестандартном порту и жестко ограничить IP, с которых предполагается туда заходить. Например, только из дома и только с работы. Если у вас есть доступ по ssh к собственному серверу (так обычно и бывает), то список разрешенных IP можно гибко менять при необходимости. Ведь вы можете оказаться в гостинице, в отпуске на Багамах, в командировке и т.д.
Имейте в виду, что c клиента трафик до прокси-сервера будет идти в открытом виде.
Используя какой-нибудь проксификатор (Proxifier ( https://www.proxifier.com/ )) или что-то вроде Tun2Socks ( https://github.com/xjasonlyu/tun2socks/ ) можно не только посещать сайты в сети ( gemini://betahowto.duckdns.org/yggdrasil:Yggdrasil ), настроив соединение через прокси-сервер, но и дать возможность практически любым приложениям (не поддерживающим соединение через прокси-сервер) работать через прокси-сервер.
Пример конфигурации простейшего 3proxy ( https://3proxy.ru/?l=RU ):
log NUL D internal 127.0.0.1 auth none flush socks -46 -p3229 -i91.233.111.15
91.233.111.15 - адрес, на котором будет ждать подключений socks-прокси (может быть в локальной сети (192.168.x.x))
3229 - порт, на котором будет ждать подключений socks-прокси
Используя PAC-файл ( https://en.wikipedia.org/wiki/Proxy_auto-config ) можно настроить браузер так, чтобы запросы на адреса Yggdrasil / ALFIS шли через прокси, а всё остальное - напрямую. Пример подобного PAC-файла можно найти здесь ( https://www.linux.org.ru/forum/general/12324672?cid=12324680 ). Подробнее о PAC можно прочесть здесь ( https://securelist.ru/pac-fajl-avtokonfiguratsii-problem/242/ ).
Некоторые пользователи устанавливают OpenVPN ( gemini://betahowto.duckdns.org/yggdrasil:Yggdrasil]] на свой VPN-сервер и маршрутизируют трафик в Yggdrasil через него. В качестве серверного ПО VPN-сервера может использоваться [[https://openvpn.net/ ) или WireGuard ( gemini://betahowto.duckdns.org/wireguard ). На сервере должна быть включена маршутизация пакетов (в /etc/sysctl.conf):
net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1
Т.о., подключаясь к VPN-серверу, клиент получает доступ и в Интернет, и в Yggdrasil.
Пример конфигурации WireGuard ( gemini://betahowto.duckdns.org/wireguard ) на сервере:
[Interface] Address = 10.0.0.1/24, fd00::1/124 PrivateKey = 6EwVi06HBT/DdmYSM8QZv554OoE3mk0vxC3DdlVW/nc= ListenPort = 51820 #IPv6 and IPv4 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -A FORWARD -o %i -j ACCEPT; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o tun0 -j MASQUERADE; ip6tables -A FORWARD -o %i -j ACCEPT PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -D FORWARD -o %i -j ACCEPT; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o tun0 -j MASQUERADE; ip6tables -D FORWARD -o %i -j ACCEPT [Peer] PublicKey = cyP3jP+Xwbp84kUxct6TGXx8rM1xFCVOBn8Z4m+vLxE= AllowedIPs = 10.0.0.2/32, fd00::2/128 #...
На клиенте:
[Interface] Address = 10.0.0.2/24, fd00::2/124 PrivateKey = rOZrd1oaoYAFOd0CPBkXhsvfzPrMj79aIQ0THswGsv7= DNS = 94.140.14.14, 94.140.15.15 [Peer] PublicKey = Rgh78oSDafr2sNv6cp/vBDlaiuVCi2DtCduU0mmcHpo= Endpoint = xxx.xxx.xxx.xxx:51820 #Все IPv4 и только Yggdrasil-IPv6 AllowedIPs = 0.0.0.0/0, 200::/7 #или так (все IPv4 и все IPv6): #AllowedIPs = 0.0.0.0/0, ::/0
Для того, чтобы через туннель работало разрешение имен ALFIS ( gemini://betahowto.duckdns.org/yggdrasil:dns:ALFIS ), можно установить ALFIS на сервере или использовать один из публичных серверов ( gemini://betahowto.duckdns.org/yggdrasil:dns:alfis#список_публичных_серверов ) и на клиенте, в конфигурационном файле wireguard, в строке, начинающейся с DNS =, указать адрес резолвера/сервера ALFIS.
Примечание:// при такой конфигурации, чтобы работало обычное соединение по IPv6, нужно наличие "настоящего" IPv6 на сервере, и для него (для нужного интерфейса) нужно будет добавить маскарадинг в PostUp = и PostDown =. Подробнее здесь: ( gemini://betahowto.duckdns.org/wireguard:simple_vpn )
Это еще один вариант с использованием отдельностоящего сервера в качестве VPN.
Данный вариант инетерсен тем, что у ZeroTier ( https://www.zerotier.com/ ) есть клиент подо все популярные операционные системы и мобильные платформы.
Собственно, на этом всё. Теперь на любое устройство/компьютер можно поставить клиент ZeroTier и присоеденившись к сети автоматически олучить IP адрес и роутинг. Ну или полуавтоматически, если Вы параноик и не стали переводить сеть в режим Public, то Вам придётся на контроллере авторизовывать каждое новое устройство. Единственное - не забываем на клиенте разрешать "глобальные адреса" через zerotier-cli set allowGlobal=1 (еще раз скажем искреннее спасибо авторам Yggdrasil), иначе клиент просто не примет такой адрес (в мобильных клиентах тоже есть такая настройка).
Конфигурация Yggdrasil, описание префикса адреса (EN): https://yggdrasil-network.github.io/configuration.html
Configuring Yggdrasil with systemd-networkd (EN): https://tdem.in/post/yggdrasil-systemd/
Несколько видеороликов о ZeroTier: https://youtube.com/playlist?list=PLsx5L3jlBQgp7vCU66yTcofX3pXaBBoER&si=w56vBoDDYd9Sm19z
gemini://betahowto.duckdns.org/yggdrasil:yggdrasil
gemini://betahowto.duckdns.org/yggdrasil:subnet_setting
https://ru.wikipedia.org/wiki/Raspberry_Pi
gemini://betahowto.duckdns.org/yggdrasil:route_with_old_kernel
https://en.wikipedia.org/wiki/radvd
https://cstamas.hu/blog/posts/yggdrasil_300::__47__7_network_with_openwrt/
https://ru.wikipedia.org/wiki/OpenWrt
https://unique-local-ipv6.com/
https://wiki.gentoo.org/wikietc/local.d
http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/
http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:dns:internal_dns
http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:dns:unbound_wyrd
gemini://betahowto.duckdns.org/yggdrasil:Yggdrasil
https://github.com/xjasonlyu/tun2socks/
https://en.wikipedia.org/wiki/Proxy_auto-config
https://www.linux.org.ru/forum/general/12324672?cid=12324680
https://securelist.ru/pac-fajl-avtokonfiguratsii-problem/242/
gemini://betahowto.duckdns.org/yggdrasil:Yggdrasil]]
gemini://betahowto.duckdns.org/wireguard
gemini://betahowto.duckdns.org/yggdrasil:dns:ALFIS
gemini://betahowto.duckdns.org/yggdrasil:dns:alfis#список_публичных_серверов
gemini://betahowto.duckdns.org/wireguard:simple_vpn
https://key-networks.com/ztncui/
https://github.com/dec0dOS/zero-ui
https://www.zerotier.com/download/
https://yggdrasil-network.github.io/configuration.html
https://tdem.in/post/yggdrasil-systemd/
https://youtube.com/playlist?list=PLsx5L3jlBQgp7vCU66yTcofX3pXaBBoER&si=w56vBoDDYd9Sm19z