Deployment guide

EasyTier

Overview

EasyTier is a simple, fast and decentralized mesh VPN and SD-WAN built in Rust. Every node is a peer that discovers the others and forms direct, encrypted, point-to-point tunnels, and it relays traffic only when no direct path exists. The result is one flat virtual private network across your on-premises machines, cloud instances and remote sites, with low latency because traffic takes the shortest path instead of passing through a central gateway.

This SecureAnyCloud image runs EasyTier 2.6.4 on Ubuntu 24.04 on Azure, installed from the official prebuilt release binaries and run under systemd as the easytier.service mesh node. You manage the node with the easytier-cli command line tool over a loopback-only RPC port. The image has no web interface and no database: /etc/easytier/config.toml is the whole configuration.

Secure by default, with no known credentials. A node joins a network by knowing its name and secret, so a shared or default secret would let anyone join your mesh. To prevent that, a one-shot service on the first boot of every VM generates a unique network name and a strong random network secret for that VM alone. It writes them to a root-only credentials file, binds the management RPC port to loopback, and only then starts the node.

What you get:

  • EasyTier 2.6.4 from the official prebuilt release binaries (easytier-core and easytier-cli), run under systemd as easytier.service
  • A decentralized full mesh with direct peer-to-peer tunnels, automatic relay fallback, and UDP and TCP NAT traversal so nodes behind NAT still connect directly
  • End-to-end encryption keyed by your private network secret
  • The peer-to-peer transport on 0.0.0.0:11010 (TCP and UDP), the only network-facing port besides SSH
  • A loopback-only management port (127.0.0.1:15888) that easytier-cli uses to read peer and route tables, never reachable from the network
  • A unique per-instance network name and secret generated on first boot and written to /root/easytier-credentials.txt (root only)
  • A built-in mesh self test (/opt/easytier/mesh-selftest.sh) that proves the node forms a real tunnel, self-contained on the one VM

Prerequisites

You need:

  • An active Azure subscription, an SSH public key, and a VNet with a subnet in the target region
  • A subscription to the EasyTier listing on Azure Marketplace
  • Network security group (NSG) rules that allow TCP 22 (administration) and TCP 11010 and UDP 11010 (the peer-to-peer mesh transport) from the peers that will join the network

Recommended virtual machine size: Standard_B2s (2 vCPU, 4 GB RAM) is ample for a mesh hub or a small to medium network. EasyTier is a lightweight Rust daemon. You need larger sizes only for very high-throughput relaying.

1

Deploy from the Azure Portal

Search the Azure Marketplace for EasyTier, select the SecureAnyCloud publisher, and select Create.

Configure the network security group to allow TCP 11010 and UDP 11010 from the peers that will join this network, and TCP 22 for administration. UDP 11010 is the primary path and enables direct NAT hole punching. TCP 11010 is the fallback for restrictive networks.

2

Deploy from the Azure CLI

RG="mesh-prod"; LOCATION="eastus"; VM_NAME="easytier1" IMAGE_URN="sac1647283583153:easytier-ubuntu-24-04:default:latest" SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" az group create --name "$RG" --location "$LOCATION"
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:easytier-ubuntu-24-04:default:latest
az vm create \
  --resource-group "$RG" --name "$VM_NAME" \
  --image "$IMAGE_URN" \
  --size Standard_B2s \
  --admin-username azureuser \
  --ssh-key-values "$SSH_KEY" \
  --public-ip-sku Standard
az vm open-port --resource-group "$RG" --name "$VM_NAME" --port 11010 --priority 1001
az vm open-port --resource-group "$RG" --name "$VM_NAME" --port 22 --priority 1002
3

Retrieve your per-instance network name and secret

On first boot the image generates a unique network name and a strong random network secret for this VM. It renders /etc/easytier/config.toml with those values and this node's virtual IP, resolves the VM's public IP for the peer join endpoint, writes the root-only credentials file, and starts easytier. This completes within seconds.

SSH in as azureuser and read the credentials:

sudo cat /root/easytier-credentials.txt

The file records four values:

  • network_name and network_secret: your per-instance network name and the key that admits peers
  • virtual_ipv4: this node's virtual IP
  • node_endpoint (<public-ip>:11010): the endpoint that your other machines connect to

Keep the network secret private. Anyone who has it can join your mesh.

4

Confirm the node is running

Run the commands below. easytier.service should be active, and easytier-core --version should report 2.6.4. The ss output should show the node listening on :11010 for the peer-to-peer transport (TCP and UDP), with the management RPC port bound to loopback only.

systemctl is-active easytier.service /opt/easytier/easytier-core --version sudo ss -tulnp | grep -E ':11010|:15888'
5

Inspect this node

easytier-cli talks to the node over the loopback management port. Run easytier-cli node to see this node's virtual IP, public IP, peer ID and listeners.

sudo /opt/easytier/easytier-cli node

The virtual IP (10.144.144.1/24 by default) is this node's address inside the mesh. Every node you add gets a distinct virtual IP in the same range. Once a node has joined, every other node can reach it over that address.

6

Run the mesh self test

The image includes a mesh self test. It starts a second, short-lived EasyTier node in an isolated network namespace and joins it to the same network as this node. It then pings across the two virtual IPs to prove that a real peer-to-peer tunnel carries traffic. The test is self-contained on this one VM and needs no external peers.

sudo /opt/easytier/mesh-selftest.sh

The script prints MESH_SELFTEST_OK when the tunnel forms and the ping succeeds in both directions. It also confirms that both nodes see each other as connected peers.

To inspect the mesh routing table, run the command below. It lists the virtual IP of every reachable node and the next hop this node uses to reach it.

sudo /opt/easytier/easytier-cli route
7

Join a second machine to the mesh

To grow the mesh, install the free EasyTier client on another machine, or launch another of these images. Join it to the same network name and secret and point it at this node's public endpoint.

Read your network_name, network_secret and node_endpoint from /root/easytier-credentials.txt (Step 3). Then run this on the other machine:

sudo easytier-core \
  --network-name <EASYTIER_NETWORK_NAME> \
  --network-secret <EASYTIER_NETWORK_SECRET> \
  --ipv4 10.144.144.2 \
  --peers tcp://<public-ip>:11010 \
  --rpc-portal 127.0.0.1:15888

Give the second node a distinct virtual IP (10.144.144.2 in this example). Once it connects, each node can reach the other over its virtual IP. For example, run ping 10.144.144.1 from the second machine.

Because both nodes share the same secret, all traffic between them is authenticated and encrypted end to end. You can add as many nodes as you like. The network is a full mesh, so every node talks directly to every other node wherever a direct path exists.

8

Verify the secure defaults

This image ships with no known credentials. The network secret, which is the key that admits peers, is generated uniquely per VM at first boot and stored root-only. The management RPC port that easytier-cli uses is bound to loopback only, so it is never reachable from the network. Mesh traffic is encrypted with your secret. Besides SSH, the only network-facing surface is the peer-to-peer transport on port 11010.

Confirm the RPC binding and the encryption setting:

sudo ss -tulnp | grep 15888
sudo grep -E 'enable_encryption|network_name' /etc/easytier/config.toml
9

Rotate the network secret

Rotate the secret if it may have leaked. Generate a new one, update [network_identity] in /etc/easytier/config.toml on every node in the network, and restart the service. All nodes must share the same name and secret to stay in one network.

NEW_SECRET="$(openssl rand -hex 24)" echo "New network secret: $NEW_SECRET"
sudo sed -i "s/^network_secret = .*/network_secret = \"$NEW_SECRET\"/" /etc/easytier/config.toml
sudo systemctl restart easytier.service

Apply the same new secret to your other nodes so they can rejoin.

Troubleshooting

A peer will not connect. Confirm that the NSG allows UDP 11010 and TCP 11010 from the peer, and that both nodes use the identical network name and secret. Run sudo /opt/easytier/easytier-cli peer on both sides.

Check node health. sudo /opt/easytier/easytier-cli node prints this node's own state. sudo /opt/easytier/easytier-cli peer lists connected peers with latency. sudo systemctl status easytier and sudo journalctl -u easytier show service logs.

NAT traversal. EasyTier prefers a direct UDP tunnel, falls back to TCP, and then relays through another reachable node. Opening UDP 11010 gives you the best chance of a direct, low-latency path.

Support

SecureAnyCloud provides 24/7 technical support for this EasyTier image. Our engineers help with mesh address planning, joining machines, clouds and sites, exposing LAN subnets with the subnet proxy, NAT traversal and relay tuning, firewall and NSG rules, monitoring, and EasyTier version upgrades. Critical issues receive a one-hour average response time. Contact sales@secureanycloud.com.

All product and company names are trademarks or registered trademarks of their respective holders. Their use does not imply any affiliation with or endorsement by them.

Deploy on Azure

Launch EasyTier 2.6.4 on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure