This guide explains how to install, configure, debug, and verify a working Yggdrasil node from scratch.
Goal: join the IPv6 mesh network reliably using outbound peers + listeners.
Yggdrasil is a decentralized encrypted IPv6 mesh overlay network.
Features:
sudo pacman -S yggdrasil
Enable service:
sudo systemctl enable yggdrasil
Create default config:
sudo yggdrasil -genconf > ~/yggdrasil.conf
Move into place:
sudo mv ~/yggdrasil.conf /etc/yggdrasil.conf
Example:
PrivateKey: YOUR_PRIVATE_KEY
Never regenerate unless you want a new node identity.
Find:
Peers: []
Replace with:
Peers: [
"tcp://ygg-1.okade.pro:20000",
"tcp://ygg.nadeko.net:44441",
"tls://ygg.nadeko.net:44442",
"quic://ip6.casa2.mywire.org:44443?key=000000003cb1cc50e05147fc548f6d1f78e7ffcdc67b456f9bb0db6f0a5e4723",
"tcp://Yggdrasil.UnderEu.Net:37001",
"quic://Yggdrasil.UnderEu.Net:37003",
"tls://ygg.jjolly.dev:3443",
"tcp://mo.us.ygg.triplebit.org:9000",
"tls://mo.us.ygg.triplebit.org:993"
]
Why inline format?
Because YAML indentation errors break configs easily.
This avoids them.
Find:
Listen: []
Replace with:
Listen: ["tls://0.0.0.0:0","tls://[::]:0"]
This allows:
Keep enabled:
MulticastInterfaces:
- Regex: .*
Beacon: true
Listen: true
This lets nearby nodes auto-connect.
sudo systemctl restart yggdrasil
Check peers:
yggdrasilctl getpeers
Working example output:
URI State
tcp://peer... Established
tls://peer... Established
Empty table means:
node is not connected yet.
Run:
ip addr | grep ygg
Expected:
ygg0
Ping internal mesh DNS node:
ping6 inv.nadeko.ygg
Success = working mesh connection
Before restarting service:
sudo yggdrasil -useconffile /etc/yggdrasil.conf -normaliseconf
If config is broken:
command prints exact error line.
journalctl -u yggdrasil -n 50
yggdrasilctl getpeers
Columns:
| Column | Meaning |
|---|---|
| URI | peer address |
| State | connection status |
| Dir | inbound/outbound |
| RTT | latency |
| RX/TX | traffic |
| Cost | routing metric |
Wrong:
Peers:
Correct:
Peers:
Fix inside vim:
:set expandtab
:retab
Wrong:
Peers: ["tcp://peer1" "tcp://peer2"]
Correct:
Peers: ["tcp://peer1","tcp://peer2"]
Wrong:
Peers: ["tcp://peer1",]
Check IPv6 address:
yggdrasilctl getself
Example:
Address: 200:xxxx:xxxx:xxxx::xxxx
This is your mesh address.
Permanent until PrivateKey changes.
If using firewall:
sudo ufw allow 0:65535/tcp
sudo ufw allow 0:65535/udp
yggdrasilctl getroutes
Shows mesh topology paths.
Working node checklist:
✔ service running ✔ ygg0 exists ✔ peers connected ✔ IPv6 assigned ✔ ping works ✔ routes visible
Once connected you can run:
Yggdrasil no tiene DNS oficial. Usá un servidor DNS público de la comunidad.
Without DNS, you can’t resolve .ygg domains like inv.nadeko.ygg.
Search online:
yggdrasil DNS server public list
Official list: https://yggdrasil-network.github.io/services.md
| IP | Location | Provider |
|---|---|---|
324:71e:281a:9ed3::53 |
(varies) | acetone |
302:db60::53 |
Praha, Czechia | Revertron |
300:6223::53 |
Bratislava, Slovakia | Revertron |
302:7991::53 |
Saint Petersburg, Russia | Revertron |
Not all DNS servers are accessible from every node. It depends on your mesh topology (who you’re peered with).
Test each one:
ping -c 2 324:71e:281a:9ed3::53
ping -c 2 302:db60::53
ping -c 2 300:6223::53
ping -c 2 302:7991::53
The one that responds = your DNS server.
In my case:
324:71e:281a:9ed3::53 responded to pingYour reachable DNS may be different. Test all of them.
sudo mkdir -p /etc/systemd/resolved.conf.d
Create config:
echo '[Resolve]
DNS=324:71e:281a:9ed3::53
Domains=~ygg' | sudo tee /etc/systemd/resolved.conf.d/yggdrasil.conf
What this does:
DNS= → Your Yggdrasil DNS server IPDomains=~ygg → Route all .ygg domains to this DNSRestart:
sudo systemctl restart systemd-resolved
resolvectl query inv.nadeko.ygg
Should return an IPv6 address like:
inv.nadeko.ygg: 200:28fa:d807:e104:5a13:e2c4:eaf:445f
| Service | URL |
|---|---|
| Invidious | http://inv.nadeko.ygg |
| 4get | http://4get.nadeko.ygg |
| Rimgo | http://ri.nadeko.ygg |
| PrivateBin | http://pbin.nadeko.ygg |
| Redlib | http://redlib.nadeko.ygg |
| Service | URL |
|---|---|
| Yggdrasil Directory | http://[21e:a51c:885b:7db0:166e:927:98cd:d186]/ |
| Yggdrasil Map | http://[21e:e795:8e82:a9e2:ff48:952d:55f2:f0bb]/ |
| HowTo Ygg Wiki | http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/ |
| Search Engine (Mimir) | http://[200:b48d:469e:c7c7:3e13:c41d:ba4d:d2b8] |
| IP Checker | http://[200:56bd:a9e9:c1fa:8f99:1d3c:3c84:6507] |
| Forum | http://[21a:34aa:c782:3ad2:1bf8:73f8:141:66e8] |
| i2pd | http://i2pd.ygg/ |
| PrivateBin | http://privatebin.ygg/ |
| Flibusta | http://flibusta.ygg/ |
| Rutracker mirror | http://rutracker.ygg/ |
| Minecraft | http://create.ygg/ |
| Matrix | http://matrix.softpigeones.ygg:8008 |
There’s a full directory with 157+ sites at:
http://[21e:a51c:885b:7db0:166e:927:98cd:d186]/
Check there for more services!
For HTTPS services on .ygg, you may need to:
https://inv-ygg.nadeko.net (clearnet alternative)curl -kL https://inv.nadeko.ygg
# Check peers
sudo yggdrasilctl getpeers
# Check routing table
sudo yggdrasilctl gettree
# See your address
sudo yggdrasilctl getself
# See sessions
sudo yggdrasilctl getsessions
# Restart Yggdrasil
sudo systemctl restart yggdrasil
# View logs
sudo journalctl -u yggdrasil -f
# Test DNS resolution
resolvectl query inv.nadeko.ygg
# Test connectivity
curl -sL http://inv.nadeko.ygg/
This section has everything you need to set up Yggdrasil on a fresh system.
sudo pacman -S yggdrasil
# Download from GitHub
wget https://github.com/yggdrasil-network/yggdrasil/releases/latest/download/yggdrasil-linux-amd64
mv yggdrasil-linux-amd64 /usr/local/bin/yggdrasil
chmod +x /usr/local/bin/yggdrasil
# Or build from source (requires Go)
git clone https://github.com/yggdrasil-network/yggdrasil
cd yggdrasil
go build -o yggdrasil .
sudo mv yggdrasil /usr/local/bin/
sudo dnf install yggdrasil
# Or use COPR
sudo dnf copr enable @yggdrasil/yggdrasil
sudo dnf install yggdrasil
sudo xbps-install yggdrasil
# Add to /etc/portage/package.accept_keywords
echo "=net-p2p/yggdrasil-9999 **" | sudo tee /etc/portage/package.accept_keywords/yggdrasil
sudo emerge --ask net-p2p/yggdrasil
brew install yggdrasil
# Or
sudo brew install --cask yggdrasil
sudo systemctl enable yggdrasil
sudo systemctl start yggdrasil
sudo rc-update add yggdrasil default
sudo service yggdrasil start
sudo launchctl load /Library/LaunchDaemons/com.yggdrasil.plist
sudo yggdrasil -useconffile /etc/yggdrasil.conf
sudo yggdrasil -genconf | sudo tee /etc/yggdrasil.conf
This creates a fresh config with:
Peers are required to join the network. Without peers, you can’t connect.
sudo yggdrasil -genconf > /tmp/yggdrasil-new.conf
# Edit the file and add peers to the Peers: [] section
nano /tmp/yggdrasil-new.conf
Recommended peers:
Peers: [
"tcp://ygg-1.okade.pro:20000",
"tcp://ygg.nadeko.net:44441",
"tls://ygg.nadeko.net:44442",
"tls://ygg.jjolly.dev:3443",
"tcp://mo.us.ygg.triplebit.org:9000",
"tls://mo.us.ygg.triplebit.org:993"
]
Official public peers list:
Look for peers close to your geographic location for best latency.
If other Yggdrasil nodes are on your LAN, multicast discovery will find them automatically:
MulticastInterfaces:
- Regex: .*
Beacon: true
Listen: true
Allow incoming connections for better connectivity:
Listen: ["tls://0.0.0.0:0","tls://[::]:0"]
This lets other nodes connect to you and improves network participation.
sudo cp /tmp/yggdrasil-new.conf /etc/yggdrasil.conf
sudo systemctl restart yggdrasil
Wait 10-30 seconds for connections to establish.
sudo systemctl status yggdrasil
# Or
ps aux | grep yggdrasil
sudo yggdrasilctl getself
Should show an address like 202:xxxx:xxxx:xxxx::xxxx
sudo yggdrasilctl getpeers
You should see peers with State: Established
sudo yggdrasilctl gettree
Shows known nodes (should grow over time)
ping -c 3 200:415c:2061:a9c0:9dbc:b95d:66ec:1347
This is nadeko’s Yggdrasil address.
This lets you resolve domains like inv.nadeko.ygg
sudo mkdir -p /etc/systemd/resolved.conf.d
echo '[Resolve]
DNS=324:71e:281a:9ed3::53
Domains=~ygg' | sudo tee /etc/systemd/resolved.conf.d/yggdrasil.conf
sudo systemctl restart systemd-resolved
resolvectl query inv.nadeko.ygg
Should return an IPv6 address.
# Find the IP first
resolvectl query inv.nadeko.ygg
# Add to /etc/hosts
echo "200:28fa:d807:e104:5a13:e2c4:eaf:445f inv.nadeko.ygg" | sudo tee -a /etc/hosts
sudo ufw allow 0:65535/tcp
sudo ufw allow 0:65535/udp
# Or more specific
sudo ufw allow 9001/tcp
sudo ufw allow 9001/udp
sudo iptables -A INPUT -p tcp --dport 9001 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 9001 -j ACCEPT
sudo ip6tables -A INPUT -p tcp --dport 9001 -j ACCEPT
sudo ip6tables -A OUTPUT -p tcp --sport 9001 -j ACCEPT
sudo firewall-cmd --permanent --add-port=9001/tcp
sudo firewall-cmd --reload
Check service status:
sudo systemctl status yggdrasil
Check logs:
sudo journalctl -u yggdrasil -n 50
Check firewall:
sudo ufw status
sudo iptables -L -n
Try different peers (some may be down)
Check your internet connection
Check configuration syntax:
sudo yggdrasil -useconffile /etc/yggdrasil.conf -normaliseconf
Check logs:
sudo journalctl -u yggdrasil -xe
Check port availability:
sudo netstat -tlnp | grep yggdrasil
Check systemd-resolved:
sudo systemd-resolve --status
# Or
resolvectl status
Test DNS server directly:
dig @324:71e:281a:9ed3::53 inv.nadeko.ygg
Check /etc/resolv.conf:
cat /etc/resolv.conf
Try different DNS server
Verify your Yggdrasil address:
sudo yggdrasilctl getself
Test connectivity to a known node:
ping -c 3 200:415c:2061:a9c0:9dbc:b95d:66ec:1347
Check your routing table:
sudo yggdrasilctl gettree
Check peer connections:
sudo yggdrasilctl getpeers
sudo systemctl status yggdrasilsudo yggdrasilctl getselfsudo yggdrasilctl getpeersping -c 3 200:415c:2061:a9c0:9dbc:b95d:66ec:1347resolvectl query inv.nadeko.yggcurl -sL http://inv.nadeko.ygg/Your Yggdrasil address is tied to your PrivateKey.
Backup your key:
sudo yggdrasilctl getself | grep "Private key"
# Or extract from config
grep PrivateKey /etc/yggdrasil.conf
Store this key securely. If you lose it, you get a new address.
Restoring on a new PC:
# Copy the PrivateKey to the new config
nano /etc/yggdrasil.conf
# Edit the PrivateKey line with your backed-up key
sudo systemctl restart yggdrasil
# Service management
sudo systemctl start yggdrasil
sudo systemctl stop yggdrasil
sudo systemctl restart yggdrasil
sudo systemctl status yggdrasil
# Get info
sudo yggdrasilctl getself # Your address and keys
sudo yggdrasilctl getpeers # Connected peers
sudo yggdrasilctl gettree # Routing table
sudo yggdrasilctl getsessions # Active sessions
# Debug
sudo journalctl -u yggdrasil -f # Follow logs
sudo yggdrasilctl list # All available commands
# Network
ip addr show tun0 # Check interface
ping -c 3 200:415c:2061:a9c0:9dbc:b95d:66ec:1347
# DNS
resolvectl query inv.nadeko.ygg
resolvectl query nadeko.net