yggdrasil配置和使用

官方文档
public peers
给ygg提供原生域名的区块链域名系统alfis
ygghowto(俄文材料)
这玩意是我真的想要的东西,解决该死的设备无法互联的方案,有时我并不需要强匿名不是吗
而且他原生考虑到了移动端,光在这一点上就薄纱一众e2e/p2p连接工具了

原理

这是go写的,是的,又是go,但是至少他支持了移动端

yggdrasil利用0200::/7这一段在ipv6规范中被IETF不建议使用的地址段来编址,通过已有的ipv6支持(原生支持几乎所有网络工具和服务!),添加一个“不应该存在的ipv6地址”,来实现地址系统。但是他并不需要你真的有ipv6,它可以帮你实现ipv6-in-ipv4或者ipv6-in-ipv6。

0200::/7也就是从0200::到
03FF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
其中300::/64用于子网

如何路由

yggdrasil的连接是树状的,通过节点之间相互连接,允许对一个节点到另一个节点通过已有的树状连接结构进行路由,并在已有的树状线路中寻找到最优的路线。这当中不会发生一般DHT设计中的节点分享(但是局域网下的节点会相互连接),所以不会有意外的远程连接。设计上他也没有考虑设备之间“创建出”直连的情况有点极端了。也就是说,他是e2e的。
所以,你可以非常方便的构成一个独立的网络,设计上,yggdrasil应该是一个mesh工具,而不是暗网工具。

如何产生地址

设置时会产生一个公私钥对,你的地址将由你的公钥产生和决定,所有e2e连接都将是加密的。

配置

有通用的需要进行的配置,无论哪个端你都会需要的

在linux下,你需要手动生成一个默认配置文件yggdrasil -genconf > /etc/yggdrasil.conf

如果你用这个HJSON格式的话,列表直接换行写就行,不需要考虑引号和逗号

配置项

peers

如你所见,我们需要形成树状网络,我们并不是“无服务器”结构的。
所以你需要在设置中的peers下添加一个列表,指向你向连接的节点。
如果你并不是想建立一个私有的网络,我们有一个公共节点列表
正如这个页面告诉你的,只要选取靠近你的节点,不要选取和你有高延迟的节点,不要添加大量节点,把同一个地址的节点的不同协议加几次对你不会有帮助

IfName

如果你需要自定义一个TUN名字的话,可以在这里设置,可能的协议如下

Listen

如果你要配置一个tree,那么你需要自己的root peer,你可以在这里进行设置

tcp://[::]:1234 (TCP)
tls://[::]:1234 (TCP+TLS)
quic://[::]:1234 (QUIC+TLS)
unix:///path/to/sock.sock (UNIX)
ws://[::]:444 (WebSockets, Yggdrasil 0.5.7 or later only)

同时你也可以使用password=PASSWORDurl参数来限制连接

其他的配置

自己去看官方文档吧,我觉得我用不上他们(

linux

向本地添加子网地址

注意下面添加的子网地址并不是真正的子网地址,请使用你自己的子网地址
这里使用NetworkManager进行管理,如果你使用其他方法,可以查阅ygghowto(俄文材料)

1
2
3
sudo nmcli connection add con-name ygg-loopback type loopback
sudo nmcli connection modify ygg-loopback +ipv6.addresses "300::1"
sudo nmcli connection modify ygg-loopback +ipv6.addresses "300::2"

请确认版本

一些发行版的源当中版本会比较旧,因为yggdrasil是在高强度更新的,请保证他是最新的

win下

yggdrasil并没有对win做很好的支持,但也能用

请确保你的9001端口没有被占用

yggdrasil似乎并不支持修改这个api port,如果你的电脑上跑着一些程序占用着这个端口,请把他删掉或者切换他的端口,否则你会卡在安装界面

tun

tun是会自动安装的,但是奇怪的是他会自动安装一个ipv4协议给这个接口(虽然应该并不影响实际使用),但是只有服务运行的时候存在这个tun,一旦服务关闭,你在虚拟网卡当中进行的所有配置都会消失。

dns问题

目前官方没有支持在配置中添加ygg的虚拟网卡的dns设置支持,这里提供一个方法:
假定你的网卡名称是Yggdrasil,假定你已经正常安装了Yggdrasil
保存以下内容到ygg.xml文件,(这是一个计划运行的配置),如果你要设置dns,请在当中的"Set-DNSClientServerAddress 'Yggdrasil' –ServerAddresses ('324:71e:281a:9ed3::53', '302:7991::53')"处修改(你看得出来里面有两个dns地址对吧)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<URI>\change ygg dns</URI>
</RegistrationInfo>
<Triggers>
<EventTrigger>
<Enabled>true</Enabled>
<Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Microsoft-Windows-NetworkProfile/Operational"&gt;&lt;Select Path="Microsoft-Windows-NetworkProfile/Operational"&gt;*[System[Provider[@Name='Microsoft-Windows-NetworkProfile'] and EventID=10000]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
</EventTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<LogonType>S4U</LogonType>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>true</RunOnlyIfNetworkAvailable>
<NetworkSettings>
<Name>Yggdrasil</Name>
<Id>{84C18B55-924E-483A-8763-AB8D898C8955}</Id>
</NetworkSettings>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>powershell</Command>
<Arguments>-windowstyle hidden -command "Set-DNSClientServerAddress 'Yggdrasil' –ServerAddresses ('324:71e:281a:9ed3::53', '302:7991::53')"</Arguments>
</Exec>
</Actions>
</Task>

打开C:\Windows\System32\taskschd.msc,点击导入,导入你刚刚下到的xml文件,确认即可。
此后,每次ygg服务运行时都会运行一段脚本来向Yggdrasil虚拟网卡添加dns服务器
如果你好奇原理的话,我也不理解win的计划任务 ; )