How to Wiki Database (change log)
http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
298 lines
26 KiB
298 lines
26 KiB
====== Как подключиться к Yggdrasil, не устанавливая его клиент на устройство ====== |
|
|
|
Разработчики [[yggdrasil:yggdrasil|Yggdrasil]] рекомендуют устанавливать клиент Yggdrasil на каждое устройство, которому нужен доступ в эту сеть. При этом гарантируется сквозное шифрование трафика между узлами, и каждый узел сети сможет выполнять роль маршрутизатора. Однако не во всех сетевых устройствах есть возможность установки и запуска Yggdrasil. |
|
|
|
===== Вариант 1: маршрутизация из подсети /64 ===== |
|
|
|
Если устройство поддерживает протокол 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. Читайте подробнее о подсети [[yggdrasil:subnet_setting|в этой статье]]. |
|
|
|
Далее, устройствам с адресами ''300:1111:2222:3333::/64'' нужно указать маршрут в сеть 0200::/7 через основное устройство с адресом ''200:1111:2222:3333:4444:5555:6666:7777''. |
|
|
|
//**Примечание:** следует учитывать, что при такой конфигурации трафик между роутером и устройствами без Yggdrasil будет передаваться незашифрованным. Кроме того, обратите внимание, что префикс /64 имеет меньше битов адресного пространства, доступного для проверки идентификатора узла, что, в свою очередь, означает, что коллизии хэшей более вероятны. Таким образом, не следует полностью полагаться на адреса диапазона 300::/8 как на достоверно принадлежащие конкретному узлу (хотя, до сих пор подобные коллизии и не возникали, и даже не были намеренно созданы с помощью майнеров адресов, теоретически вероятность их возникновения существует).// |
|
|
|
==== Пример ручной настройки ==== |
|
|
|
Допустим, в домашней сети работает [[wpru>Raspberry_Pi|RaspberryPi]], на котором установлен 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: |
|
<code>sudo ip address add 302:421a:2eс5:40a4::1/64 dev eth0</code> |
|
|
|
2. На Raspberri же включаем форвардинг пакетов между интерфейсами: |
|
<code>sudo sysctl -w net.ipv6.conf.all.forwarding=1</code> |
|
(для того, чтобы это сохранилось после перезагрузки, необходимо раскоментировать присвоение 1 этому параметру в ''%%/etc/sysctl.conf%%'') |
|
|
|
3. На ноутбуке, на интерфейсе, которым он подключен к локальной сети, добавим адрес из подсети Yggdrasil: |
|
<code>sudo ip address add 302:421a:2eс5:40a4::5/64 dev wlo1</code> |
|
|
|
4. Прописываем на ноутбуке маршрут: |
|
<code>sudo ip -6 route add 0200::/7 via 302:421a:2eс5:40a4::1</code> |
|
|
|
//**Примечание:** если на этом этапе у вас возникли сложности, и у вас старое ядро Linux, возможно, вам поможет статья: "[[yggdrasil:route_with_old_kernel]]".// |
|
|
|
Всё, пробуем с ноутбука пинговать адреса в Yggdrasil: |
|
<code>ping -6 21e:a51c:885b:7db0:166e:927:98cd:d186</code> |
|
|
|
Как видим, всё работает: |
|
<code>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 |
|
... |
|
</code> |
|
|
|
После проделанного, на всякий случай, не забудьте проверить, какие порты открыты на адресах ''%%302:421a:2eс5:40a4::1%%'' и ''%%302:421a:2eс5:40a4::5%%'': |
|
<code>nmap -6 302:421a:2eс5:40a4::5 |
|
nmap -6 302:421a:2eс5:40a4::1</code> |
|
|
|
О возможностях автоматического добавления адресов Yggdrasil после перезагрузки устройства читайте в статье: [[yggdrasil:subnet_setting#автоматическое_добавление_дополнительных_адресов|Адрес из подсети 300::/64]] |
|
|
|
==== Автоматическая настройка ==== |
|
Для целей автоматической раздачи устройствам в домашней сети IPv6-адресов из /64-подсети можно использовать демон [[wp>radvd]] (router advertisement daemon). |
|
|
|
Примеры конфигурации демона radvd: |
|
|
|
<WRAP group> |
|
<WRAP column> |
|
<code>interface eth0 |
|
{ |
|
AdvSendAdvert on; |
|
AdvDefaultLifetime 0; |
|
prefix 300:1111:2222:3333::/64 { |
|
AdvOnLink on; |
|
AdvAutonomous on; |
|
}; |
|
route 200::/7 {}; |
|
};</code> |
|
</WRAP> |
|
|
|
<WRAP column> |
|
<code>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-сервер) |
|
};</code> |
|
</WRAP> |
|
</WRAP> |
|
|
|
|
|
Здесь ''%%300:1111:2222:3333::/64%%'' - префикc вашей подсети ("выдается" вместе с IPv6 адресом, привязанным к ключу в конфигурационном файле Yggdrasil). |
|
|
|
//**Примечание:** по [[https://cstamas.hu/blog/posts/yggdrasil_300::__47__7_network_with_openwrt/|этой]] ссылке можно прочесть о том, анонсируется маршрут-поумолчанию без radvd (на [[wpru>OpenWrt]]).// |
|
|
|
Для корректной работы маршрутизации через устройство, на котором установлен Yggdrasil на нем должна быть разрешена маршутизация IPv6-пакетов: |
|
|
|
<code>sudo sysctl -w net.ipv6.conf.all.forwarding=1</code> |
|
''%%net.ipv6.conf.all.forwarding=1%%'' нужно раскомментировать в ''%%/etc/sysctl.conf%%'' |
|
|
|
== То же самое, но без использования radvd == |
|
|
|
Допустим, у вас есть роутер, где LAN является сетевым интерфейсом br0, а Yggdrasil - ygg0. |
|
|
|
<code> |
|
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 |
|
</code> |
|
|
|
Обратите внимание на эти команды. Наиболее лучшим решением будет добавление ipv6 адресов через конфигурационные файлы системы или заранее подготовленный скрипт. В примере также добавлен ULA (fdb7:e5e:e3a9:f2d1::). Не обязательно использовать именно этот префикс. Вы можете сгенерировать свой https://unique-local-ipv6.com/ |
|
|
|
<summary>**Более подробный пример для систем c OpenRC**</summary> |
|
|
|
На операционных системах c OpenRC (например, Gentoo) у вас есть возможность дополнительно запускать свои собственные скрипты. При каждом запуске сервиса local - будет запускаться скрипт yggdrasil**.start**. Подробнее: https://wiki.gentoo.org/wiki//etc/local.d |
|
|
|
<code> |
|
# rc-service local restart |
|
* Stopping local ... |
|
* Executing "/etc/local.d/yggdrasil.stop" ... [ ok ] |
|
* Starting local ... |
|
* Executing "/etc/local.d/yggdrasil.start" ... [ ok ] |
|
</code> |
|
|
|
/etc/local.d/yggdrasil**.start** |
|
|
|
<file 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 |
|
</file> |
|
|
|
Можно дополнительно создать срипт /etc/local.d/yggdrasil**.stop**, который будет удалять добавленные адреса, но он не особо то и нужен. Учтите, при перезапуске интерфейса br0 он снова сбросится к стандартным настройкам. |
|
|
|
<code>rc-service net.br0 restart</code> |
|
|
|
Это можно исправить несолькими способами: |
|
- снова перезапустив сервис **local** |
|
- перезапустив сам скрипт /etc/local.d/yggdrasil**.start** |
|
- или, для автоматизации, добавив в файл /etc/conf.d/net вот таую конструкцю, которая сама запустит скрипт при поднятии интерфейса br0 |
|
|
|
<code> |
|
postup() { |
|
if [ "${IFACE}" = "br0" ] |
|
then |
|
#rc-service local restart |
|
/etc/local.d/yggdrasil.start |
|
fi |
|
return 0 |
|
} |
|
</code> |
|
|
|
|
|
На данном этапе вы уже можете посетить сайты сети Yggdrasil через консоль роутера. Убедитесь, что это работает. |
|
|
|
<code> |
|
# Используя консольный браузер |
|
lynx http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/ |
|
# Или вот так |
|
curl http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/</code> |
|
|
|
Теперь настройте DHCP**v6**, чтобы раздавать адреса устойствам подключённым каким либо образом к интерфейсам объединённым в br0 (для понимания, br0 - бридж). |
|
|
|
Допишите в файл /etc/dnsmasq.conf |
|
|
|
<code> |
|
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 |
|
|
|
</code> |
|
|
|
После внесения правок перезапустите dnsmasq. |
|
|
|
|
|
===== Вариант 2: использование прокси-сервера ===== |
|
|
|
[[yggdrasil:Yggdrasil]] устанавливается на одном единственном компьютере. Лучше, если это будет домашний сервер, который никогда не выключается. |
|
На этом сервере нужно поставить прокси (http или socks), тогда вы сможете заходить через этот прокси в сеть, используя веб-браузер. А если ваш сервер |
|
виден из внешнего мира, то вы сможете выходить в сеть вообще отовсюду. Не забудьте только повесить прокси на нестандартном порту и жестко ограничить IP, с которых предполагается туда заходить. Например, только из дома и только с работы. Если у вас есть доступ по ssh к собственному серверу (так обычно и бывает), то список разрешенных IP можно гибко менять при необходимости. Ведь вы можете оказаться в гостинице, в отпуске на Багамах, в командировке и т.д. |
|
//Имейте в виду, что c клиента трафик до прокси-сервера будет идти в открытом виде.// |
|
|
|
Используя какой-нибудь проксификатор ([[https://www.proxifier.com/|Proxifier]]) или что-то вроде [[https://github.com/xjasonlyu/tun2socks/|Tun2Socks]] можно не только посещать сайты в сети [[yggdrasil:Yggdrasil]], настроив соединение через прокси-сервер, но и дать возможность практически любым приложениям (не поддерживающим соединение через прокси-сервер) работать через прокси-сервер. |
|
|
|
Пример конфигурации простейшего [[https://3proxy.ru/?l=RU|3proxy]]: |
|
|
|
<code>log NUL D |
|
internal 127.0.0.1 |
|
auth none |
|
flush |
|
socks -46 -p3229 -i91.233.111.15</code> |
|
|
|
''%%91.233.111.15%%'' - адрес, на котором будет ждать подключений socks-прокси (может быть в локальной сети (192.168.x.x)) \\ |
|
''%%3229%%'' - порт, на котором будет ждать подключений socks-прокси |
|
|
|
==== PAC ==== |
|
|
|
Используя [[wp>Proxy_auto-config|PAC-файл]] можно настроить браузер так, чтобы запросы на адреса Yggdrasil / ALFIS шли через прокси, а всё остальное - напрямую. |
|
|
|
<file - /path/to/proxy.pac> |
|
function FindProxyForURL(url, host) |
|
{ |
|
if (/^0{0,1}[2-3][a-f0-9]{0,2}:/.test(host) || /\.ygg$/.test(host)) |
|
{ |
|
return 'SOCKS5 127.0.0.1:1080; DIRECT'; |
|
} |
|
} |
|
</file> |
|
|
|
В настройках Firefox или Thunderbird (Automatic proxy configuration URL) указываем соответствующий путь: %%file:///path/to/proxy.pac%% |
|
|
|
Пример //подобного// PAC-файла можно найти [[https://www.linux.org.ru/forum/general/12324672?cid=12324680|здесь]]. Подробнее о PAC можно прочесть [[https://securelist.ru/pac-fajl-avtokonfiguratsii-problem/242/|здесь]]. |
|
|
|
===== Вариант 3: маршрутизация через VPN-сервер ===== |
|
|
|
==== использование WireGuard ==== |
|
Некоторые пользователи устанавливают [[yggdrasil:Yggdrasil]] на свой VPN-сервер и маршрутизируют трафик в Yggdrasil через него. В качестве серверного ПО VPN-сервера может использоваться [[https://openvpn.net/|OpenVPN]] или [[:wireguard|WireGuard]]. На сервере должна быть включена маршутизация пакетов (в ''%%/etc/sysctl.conf%%''): |
|
<code>net.ipv4.ip_forward=1 |
|
net.ipv6.conf.all.forwarding=1</code> |
|
Т.о., подключаясь к VPN-серверу, клиент получает доступ и в Интернет, и в Yggdrasil. |
|
|
|
Пример конфигурации [[:wireguard|WireGuard]] на сервере: |
|
<code>[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 |
|
|
|
#... |
|
</code> |
|
|
|
На клиенте: |
|
<code>[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 |
|
</code> |
|
|
|
Для того, чтобы через туннель работало разрешение имен [[yggdrasil:dns:ALFIS|ALFIS]], можно установить ALFIS на сервере или использовать один из [[yggdrasil:dns:alfis#список_публичных_серверов|публичных серверов]] и на клиенте, в конфигурационном файле wireguard, в строке, начинающейся с ''%%DNS =%%'', указать адрес резолвера/сервера ALFIS. |
|
|
|
//Примечание:// при такой конфигурации, чтобы работало обычное соединение по IPv6, нужно наличие "настоящего" IPv6 на сервере, и для него (для нужного интерфейса) нужно будет добавить маскарадинг в ''%%PostUp =%%'' и ''%%PostDown =%%''. Подробнее здесь: [[wireguard:simple_vpn]] |
|
|
|
==== использование ZeroTier ==== |
|
Это еще один вариант с использованием отдельностоящего сервера в качестве VPN. |
|
|
|
Данный вариант инетерсен тем, что у [[https://www.zerotier.com/|ZeroTier]] есть клиент подо все популярные операционные системы и мобильные платформы. |
|
|
|
- Регистрируемся на [[https://my.zerotier.com/|контроллере]] (для личных нужд хватит бесплатной версии) или поднимаем один из своих контроллеров (например [[https://key-networks.com/ztncui/|ztncui]] или [[https://github.com/dec0dOS/zero-ui|zero-ui]]) |
|
- На сервере скачиваем и устанавливаем [[https://www.zerotier.com/download/|клиент ZeroTier]], устанавливаем [[yggdrasil:Yggdrasil]], и включаем ipv6 форвардинг посредством **sysctl net.ipv6.conf.all.forwarding=1** |
|
- Смотрим на полученные в yggdrasil адреса. Допустим aдрес Yggdrasil: **202:421a:2eс5:40a4:fa32:f4a4:9b42:d4e4**, префикс, соответственно: **302:421a:2eс5:40a4::/64** |
|
- В контроллере создаём новую сеть. В этой сети нужно выолнить следующие настройки: |
|
- Добавить роутинг **302:421a:2eс5:40a4::/64** "без gateway", т.е. эти адреса должны остаться внутри сети ZeroTier |
|
- Добавить роутинг **200::/7** через **302:421a:2eс5:40a4::1** (или любой другой адрес, который вам захочется назначить GW. |
|
- Отключить **IPv4 Auto-Assign** |
|
- Включить **IPv6 Auto-Assign** в режиме **Auto-Assign from Range** |
|
- Добавить пул выделяемых адресов с **302:421a:2eс5:40a4::1** по **302:421a:2eс5:40a4:ffff:ffff:ffff:ffff** |
|
- На сервере добавляем клиента ZeroTier в нашу сеть посредством **zerotier-cli join <netid>>** (netid берём из настроек сети в контроллере) |
|
- Так как ZeroTier считает **200::/7** публичной сетью (скажем искреннее спасибо авторам Yggdrasil за выбранный адрес), выполняем команду **zerotier-cli set <netid> allowGlobal=1** |
|
- В контроллере "авторизуем" нового клиента. Или переводим сеть из разряда **Private** в разряд **Public** и забываем об этой операции навсегда. Если вы не будете где попало светить <netid> своей сети, к ней никто подключиться не может всё равно. |
|
- Там же меняем IP у этого клиента на **302:421a:2eс5:40a4::1** |
|
|
|
Собственно, на этом всё. Теперь на любое устройство/компьютер можно поставить клиент ZeroTier и присоеденившись к сети автоматически олучить IP адрес и роутинг. Ну или полуавтоматически, если Вы параноик и не стали переводить сеть в режим **Public**, то Вам придётся на контроллере авторизовывать каждое новое устройство. Единственное - не забываем на клиенте разрешать "глобальные адреса" через **zerotier-cli set <netid> 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 \\ |
|
|
|
~~DISCUSSION~~
|
|
|