An alternative client Popura

Popura is an alternative Yggdrasil Network client.

Popura uses the same Yggdrasil's core API internally, but adds some useful and experimental features which the original client lacks.

Popura's features:

  • Automatic Internet peering
  • Advertising /64 prefix to LAN
  • Meshname naming system
  • DHT crawling method in Admin API

By default, it works just like the original yggdrasil client, all features must be enabled manually. Popura adds new command line flags and config file sections to control those features.

Download the most recent version of Popura here https://github.com/popura-network/Popura/releases.

Autopeering

Popura has a built-in peer list. If there are no Internet peers configured, it picks a single random peer out of ten with least latency. If a picked peer goes offline, Popura picks another one, so it's effectively “autohealing”. To enable automatic Internet peering, run yggdrasil with -autopeer command line flag.

By default, peer list is compiled from the public-peers repository https://github.com/yggdrasil-network/public-peers/.

Router advertisement

Popura is able to advertise a /64 prefix to LAN clients for stateless IPv6 address autoconfiguration (SLAAC).

While it is generally encouraged that nodes run the software locally, to provide end-to-end cryptographic sessions and participate in routing, this is not always practical. Some network devices will inevitably be unable to run user code, but may still provide IPv6 connectivity. Users may also prefer to avoid running the software on an otherwise compatible system, perhaps to provide guest access or to avoid any overhead to battery powered devices. To that end, it is each node is assigned a /64 prefix in parallel to their address. A node acting as a router may advertise this prefix just as they would any other ordinary IPv6 network.

This may be best illustrated by example. Suppose a node has generated the address: 200:1111:2222:3333:4444:5555:6666:7777. Then the node may also use addresses from the prefix: 300:1111:2222:3333::/64 (note the 200 changed to 300, a separate /8 is used for prefixes, but the rest of the first 64 bits are the same).

This feature currently works on Linux systems. Support for other operating systems might be added later, if there will be a demand for it.

Make sure to enable IPv6 packet forwarding:

sudo sysctl -w net.ipv6.conf.all.forwarding=1

An example RAdv section in Popura's config:

  RAdv:

  {
    Enable: true
    
    Interface: eth0
    
    SetGatewayIP: true
  }

Interface is LAN network interface, for example `wlan0` or `eth0`.

SetGatewayIP option automatically adds an IP address to the Interface.

Meshname

Meshname is a universal naming system for all IPv6-based meshnets, including CJDNS and Yggdrasil

Having a naming system is a common requirement for deploying preexisting decentralized applications. I.e., applications for e-mail, XMPP and ActivityPub require domain names for server to server communications.

Self-organized networks like CJDNS and Yggdrasil Network use public-key cryptography for IP address allocation. Every network node owns a globally unique IPv6 address. Binary form of that address can be encoded with base32 notation for deriving a globally unique name space managed by that node.

Since there is no need for a global authority or consensus, such a naming system will reliably work in any network split scenarios.

Meshname implementation in Popura is a local DNS server that can both host and resolve “meshname” domains. It is recommended to configure meshname as an upstream DNS server for the regular DNS server, like dnsmasq or bind.

To generate a sample meshname config for your Yggdrasil node, run:

yggdrasil -meshnameconf $(yggdrasil -useconffile /etc/yggdrasil.conf -address)

An example meshname section in Popura's config:

  Meshname:
  {
    Config:
    {
      aicrxoqgun7siwm42akzfsox7m:
      [
        aicrxoqgun7siwm42akzfsox7m.ygg AAAA 205:1bba:6a3:7f24:599c:d015:92c9:d7fb
        _xmpp-client._tcp.aicrxoqgun7siwm42akzfsox7m.ygg. 86400 IN SRV 5 0 5222 xmpp.aicrxoqgun7siwm42akzfsox7m.ygg.
        _xmpp-server._tcp.aicrxoqgun7siwm42akzfsox7m.ygg. 86400 IN SRV 5 0 5269 xmpp.aicrxoqgun7siwm42akzfsox7m.ygg.
        xmpp.aicrxoqgun7siwm42akzfsox7m.ygg. AAAA 305:1bba:6a3:7f24::23
      ]
    }
    Enable: true
    Listen: "[::1]:53535"
  }

An example dnsmasq configuration that uses meshname as an upstream server:

port=53 domain-needed bogus-priv server=/meshname/::1#53535 server=/ygg/::1#53535 server=8.8.8.8

DHTCrawl

A DHTCrawl method is added to the AdminAPI. It does a recursive DHTPing crawling over all known Yggdrasil nodes and collects their NodeInfo. To enable DHTCrawl method, run yggdrasil with `-dhtcrawler` command line flag.

References

You could leave a comment if you were logged in.
en/yggdrasil/alt_clients/popura.txt · Last modified: 2023/10/10 18:06 by 127.0.0.1
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki