SagerNet / SagerNet/sing-box

Support EasyTier endpoint via official easytier-go host

Open
#4,442 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Go
Stars
38.2k
Forks
4.6k
Avg merge
19d 15h
Merged PRs (30d)
1

Description

Feature request

Would you consider adding an EasyTier endpoint backed by the official Go embedding library, EasyTier/easytier-go?

Why revisit this now

This was previously requested in #4184 and closed as not planned on June 20, 2026.

There is a material change since then: the official EasyTier/easytier-go repository was created on July 26, 2026. It embeds easytier-core in a pure-Go process through wazero/WASM rather than cgo, which seems to make integration into sing-box substantially more practical than before.

The current public API exposes, among other things:

  • typed EasyTier instance configuration;
  • network name/secret, virtual IPv4, peers and listeners;
  • IPv4/IPv6 STUN servers;
  • P2P policy and hole-punching methods;
  • SendPacket / ReceivePacket;
  • Dial, Listen, and ListenPacket using standard Go interfaces;
  • peer and route inspection.

It also includes a cross-platform TUN example that joins an existing EasyTier network and forwards raw IPv4 packets through the embedded core.

Use case

The main motivation is to let sing-box be the single VPN/TUN process while also participating as a real EasyTier peer.

For example:

sing-box
  ├─ normal Internet traffic -> existing sing-box routing/outbounds
  └─ EasyTier private routes -> EasyTier endpoint
                                -> EasyTier Core
                                -> P2P / NAT traversal / relay

This is particularly useful on Android/iOS, where running a separate EasyTier VPN alongside a sing-box-based VPN is awkward or impossible because only one system VPN tunnel can normally be active at a time.

This would be closer to the existing integrated Tailscale endpoint model than to routing through an external WireGuard/EasyTier gateway: sing-box itself would participate in the EasyTier mesh and could use EasyTier's own P2P/hole-punching logic.

Possible direction

Conceptually, an endpoint could look roughly like:

{
  "type": "easytier",
  "tag": "easytier",
  "network_name": "office",
  "network_secret": "...",
  "ipv4": "10.144.0.10/24",
  "peers": [
    "udp://example.com:11010"
  ]
}

The exact schema and implementation would of course be up to sing-box. The interesting part is that easytier-go now provides both raw packet APIs and standard Go network interfaces, so it may fit the endpoint abstraction without reimplementing the EasyTier protocol.

Caveats

easytier-go is still young, so there are reasonable concerns around WASM/wazero overhead, binary size, mobile behavior, UDP edge cases, and whether hole punching has full parity with native EasyTier on every platform. I am not assuming those are already solved.

The question is mainly whether this new official embedding layer changes the feasibility enough for an EasyTier endpoint to be considered now.

References:

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the referenced easytier-go API and sing-box’s existing integrated Tailscale endpoint model, then assess the stated mobile, WASM/wazero, and packet-interface caveats. Done would mean an agreed endpoint scope and schema, with implementation and validation criteria established for the relevant platforms.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, wasm
Domain
networking
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.