dumbtv
dumbtv가 ADB로 Fire TV에서 광고·추적·업데이트 알림을 제거, 루트·앱 변경 없이, 무료 오픈소스
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A userspace mesh networking agent that builds VPN-like overlay networks across heterogeneous transport layers. It enables multi-hop routing with SOCKS5 ingress and CIDR-based exit routing, operating entirely in unprivileged userspace - no root privileges, no kernel extensions, no drivers.README 전문 보기 ↗A userspace mesh networking agent that builds VPN-like overlay networks across heterogeneous transport layers. It enables multi-hop routing with SOCKS5 ingress and CIDR-based exit routing, operating entirely in unprivileged userspace - no root privileges, no kernel extensions, no drivers.
muti-metroo is the mesh agent of the Muti Metroo suite:
OPERATOR WORKSTATION MESH NETWORK
.-------------------. .---------------------------------------------.
| +-----------+ | +-------------+ +-------------+ +-------------+ +--------+
| | ssh, curl | | | Agent A | | Agent B | | Agent C | | |
| | browser | | | INGRESS |=====| TRANSIT |=====| EXIT |---->| Target |
| +-----------+ | | (relay) | | | | | | Server |
| | | +-------------+ +-------------+ +-------------+ +--------+
| +-----------+ | | SOCKS5 | |
| | Mutiauk |------>| listener | |
| | (TUN) | | +-------------+ |
| +-----------+ | '-----------Encrypted Tunnel------------'
'-------------------' (Transit Cannot Decrypt)
Traffic Flow:
With autoroutes.enabled: true, Mutiauk receives the mesh's CIDR routes, mesh hostnames, and DNS suffixes from the ingress agent over the same SOCKS5 endpoint, so the workstation needs no route list.
# On the ingress agent: enable SOCKS5 auth and the WebSocket listener (see config below)
# On the operator workstation (Linux release binary shown)
curl -L -o mutiauk https://github.com/Muti-Metroo/Mutiauk/releases/latest/download/mutiauk-linux-amd64
chmod +x mutiauk && sudo mv mutiauk /usr/local/bin/
# Write a config that points at the ingress agent, then start the daemon
sudo MUTIAUK_SOCKS5_PASSWORD='...' mutiauk config generate \
--socks5-server wss://relay.example.com:8443/socks5 \
--socks5-username operator --autoroutes-enabled
sudo mutiauk daemon start
# Ordinary tools now reach mesh networks
ssh [email protected]
Plain SOCKS5 over TCP is not encrypted between the workstation and the ingress agent, credentials included. For a remote ingress, enable SOCKS5 authentication and use the SOCKS5 WebSocket listener over TLS (wss://) with a certificate the workstation trusts (Mutiauk verifies it against the system trust store), or reach the ingress over a network you already trust. See the Mutiauk repository and the Mutiauk documentation for setup details, including macOS and Windows builds.
SOCKS-aware applications can also use the ingress agent's SOCKS5 listener directly. This is useful for quick tests, a single application, machines without root or Administrator, and domain-based exit routes (Mutiauk works at the IP layer and only uses CIDR routes):
curl -x socks5h://user:[email protected]:1080 https://example.com
ssh -o ProxyCommand='nc -x 127.0.0.1:1080 %h %p' [email protected]
| Resource | Description |
|---|---|
| Documentation | Online documentation with installation, configuration, and usage guides |
| User Manual (PDF) | Comprehensive PDF manual for offline use and printing (download from latest release) |
| Architecture.md | Technical internals, protocol specification, and implementation details |
# Clone the repository
git clone [email protected]:Muti-Metroo/Muti-Metroo.git
cd Muti-Metroo
# Build the binary
make build
# Or without make:
go build -o build/muti-metroo ./cmd/muti-metroo
The easiest way to get started is using the interactive setup wizard:
./build/muti-metroo setup
The wizard guides you through:
The wizard generates a complete config.yaml and initializes your agent identity.
For single-file deployments, the wizard can embed configuration directly into the binary:
# Create embedded binary during setup
./build/muti-metroo setup
# Choose "Embed in binary" when prompted
# Run without config file (no 'run' command needed when
# the embedded config sets default_action: run)
./my-agent
# Edit embedded config later
./build/muti-metroo setup -c /path/to/embedded-binary
This simplifies deployment and distribution.
When running the setup wizard as root (Linux/macOS) or Administrator (Windows), you'll be offered to install Muti Metroo as a system service:
To uninstall the service:
# Linux/macOS (as root)
sudo muti-metroo service uninstall
# Windows (as Administrator)
muti-metroo service uninstall
Service management commands:
# Linux (systemd)
systemctl status muti-metroo # Check status
journalctl -u muti-metroo -f # View logs
systemctl restart muti-metroo # Restart
# macOS (launchd)
launchctl list com.muti-metroo # Check status
tail -f /path/to/working/dir/muti-metroo.log # View logs
launchctl stop com.muti-metroo # Stop
launchctl start com.muti-metroo # Start
# Windows
sc query muti-metroo # Check status
net start muti-metroo # Start
net stop muti-metroo # Stop
If you prefer manual configuration:
# Initialize agent identity
./build/muti-metroo init -d ./data
Generate fresh TLS certificates for your deployment:
# Generate CA certificate (valid for 1 year)
./build/muti-metroo cert ca --cn "My Mesh CA" -o ./certs
# Generate agent certificates signed by the CA
./build/muti-metroo cert agent --cn "agent-a" --dns "node-a.example.com" --ip "192.168.1.10"
./build/muti-metroo cert agent --cn "agent-b" --dns "node-b.example.com" --ip "192.168.1.20"
# Generate client certificate (for mTLS)
./build/muti-metroo cert client --cn "admin-client"
# View certificate details
./build/muti-metroo cert info ./certs/agent-a.crt
Certificate commands:
cert ca - Generate a new Certificate Authoritycert agent - Generate an agent/peer certificate (server + client auth)cert client - Generate a client-only certificatecert info - Display certificate information and expiration status# Copy and edit the example configuration
cp configs/example.yaml config.yaml
# Edit config.yaml with your settings
# Run the agent
./build/muti-metroo run -c ./config.yaml
# Or with make:
make run
# Windows: keep running after SSH disconnect (re-spawns outside session Job Object)
muti-metroo.exe run --detach -c config.yaml
See configs/example.yaml for a fully commented configuration file. Key sections:
agent:
id: "auto" # Auto-generate on first run, or specify hex string
display_name: "" # Human-readable name (Unicode allowed)
data_dir: "./data" # Directory for persistent state
log_level: "info" # debug, info, warn, error
log_format: "text" # text, json
listeners:
- transport: quic # quic, h2, or ws
address: "0.0.0.0:4433"
tls:
cert: "./certs/agent.crt"
key: "./certs/agent.key"
peers:
- id: "abc123..." # Expected peer AgentID
transport: quic
address: "192.168.1.50:4433"
tls:
ca: "./certs/peer-ca.crt"
The endpoint that Mutiauk (and any SOCKS-aware application) connects to. For an ingress that workstations reach over the network, enable authentication and the WebSocket listener with TLS:
tls:
cert: "./certs/relay.crt" # ECDSA; served by the WebSocket listener, must be trusted by workstations
key: "./certs/relay.key"
socks5:
enabled: true
address: "127.0.0.1:1080" # plain TCP listener
auth:
enabled: true
users:
- username: "operator"
password_hash: "$2a$12$..." # bcrypt hash (use: muti-metroo hash)
# SOCKS5 over WebSocket; Mutiauk connects with socks5.server: wss://relay.example.com:8443/socks5
# When auth.enabled is true, WebSocket requires HTTP Basic Auth with same credentials
websocket:
enabled: true
address: "0.0.0.0:8443"
path: "/socks5"
plaintext: false # true when behind a reverse proxy that terminates TLS
exit:
enabled: true
routes:
- "10.0.0.0/8"
- "0.0.0.0/0" # Default route
# dns.servers defaults to [] (the host's system resolver); set it only to
# pin specific upstream resolvers, for example an internal one:
# dns:
# servers:
# - "10.0.0.1:53"
# timeout: 5s
An agent can serve multiple roles simultaneously:
+--------------+ +-------------+ +-------------+ +-------------+
| SOCKS client | | Agent A | | Agent B | | Agent C |
| (Mutiauk) | | (Ingress) | | (Transit) | | (Exit) |
+------+-------+ +------+------+ +------+------+ +------+------+
| | | |
| SOCKS5 CONNECT | | |
|------------------->| | |
| | | |
| | Route Lookup | |
| | (longest match) | |
| | | |
| | STREAM_OPEN | STREAM_OPEN |
| |------------------>|------------------>|
| | | |
| | | | TCP Connect
| | | |------------>
| | | |
| | STREAM_OPEN_ACK | STREAM_OPEN_ACK |
| |<------------------|<------------------|
| | | |
| SOCKS5 OK | | |
|<-------------------| | |
| | | |
| STREAM_DATA frames (bidirectional relay) |
|<==========================================================>|
| Package | Purpose |
|---|---|
agent | Main orchestrator - initializes components, dispatches frames, manages lifecycle |
apiclient | HTTP client used by the CLI to call local and remote agent APIs (token auth, signed envelopes) |
certutil | TLS certificate generation and management - CA, server, client, peer certs |
chaos | Chaos testing utilities - fault injection, ChaosMonkey for resilience testing |
config | YAML config parsing with env var substitution (${VAR:-default}) |
crypto | End-to-end encryption - X25519 key exchange, ChaCha20-Poly1305, session key derivation |
dynconfig | Append-only JSONL journal persisting runtime peer/forward/route/display-name mutations |
embed | Embedded configuration - XOR encoding, binary config extraction and appending |
exit | Exit node handler - TCP dial, route-based access control, E2E decryption |
expose | Ephemeral forward endpoints over SOCKS5 - operators register ephemeral forward keys over the SOCKS5 CmdExpose stream; the registration disappears when the connection drops |
filetransfer | Streaming file/directory transfer with tar, gzip, and permission preservation |
flood | Route propagation via flooding with loop prevention and seen-cache |
forward | Port forwarding (reverse tunnel) - endpoints expose local services, listeners accept remote |
health | Health check HTTP server, remote agent status, pprof, dashboard, mesh connectivity testing |
hosts | Mesh-local hostname registry - config + journalled runtime entries |
icmp | ICMP echo (ping) - exit handler, unprivileged sockets, session management with E2E encryption |
identity | 128-bit AgentID generation, X25519 keypair storage for E2E encryption |
integration | Integration tests for multi-agent mesh scenarios |
make build # Build binary to ./build/muti-metroo
make test # Run all tests with race detection
make test-coverage # Generate coverage report
make test-short # Run short tests only
make lint # Run gofmt and go vet
make fmt # Format code
make clean # Clean build artifacts
make deps # Download and tidy dependencies
# All tests
make test
# Specific package
go test -v ./internal/transport/...
# Single test
go test -v -run TestName ./internal/peer/
# Integration tests
go test -v ./internal/integration/...
# Build image
docker build -t muti-metroo .
# Run with config
docker run -v $(pwd)/config.yaml:/app/config.yaml \
-v $(pwd)/data:/app/data \
-v $(pwd)/certs:/app/certs \
-p 1080:1080 -p 4433:4433/udp \
muti-metroo
| Type | Name | Description |
|---|---|---|
| 0x01 | STREAM_OPEN | Open a new virtual stream |
| 0x02 | STREAM_OPEN_ACK | Stream opened successfully |
| 0x03 | STREAM_OPEN_ERR | Stream open failed |
| 0x04 | STREAM_DATA | Stream data payload |
| 0x05 | STREAM_CLOSE | Close stream |
| 0x06 | STREAM_RESET | Reset stream with error |
| 0x10 | ROUTE_ADVERTISE | Announce CIDR routes |
| 0x11 | ROUTE_WITHDRAW | Remove CIDR routes |
| 0x12 | NODE_INFO_ADVERTISE | Announce node metadata |
| 0x20 | PEER_HELLO | Handshake initiation |
| 0x21 | PEER_HELLO_ACK | Handshake acknowledgment |
| 0x22 | KEEPALIVE | Connection keepalive |
| 0x23 | KEEPALIVE_ACK | Keepalive acknowledgment |
| 0x24 | CONTROL_REQUEST | Request metrics/status from remote agent |
| 0x25 | CONTROL_RESPONSE | Response with metrics/status data |
MIT License - see LICENSE file.
loadtest | Load testing utilities - stream throughput, route table, connection churn |
logging | Structured logging with slog - text/JSON formats, standard attribute keys |
peer | Peer connection lifecycle - handshake, keepalive, reconnection with backoff |
probe | Connectivity testing for Muti Metroo listeners - transport dial, handshake verification |
protocol | Binary frame protocol - 14-byte header, encode/decode for all frame types |
recovery | Panic recovery utilities for goroutines with logging and callbacks |
routing | Route table with CIDR longest-prefix match, domain pattern matching, agent presence table, route manager |
service | Cross-platform service management - systemd (Linux), launchd (macOS), Windows Service |
shell | Management commands - interactive (PTY) and streaming command execution, whitelist, authentication |
sleep | Mesh hibernation - state machine, jittered polling, command deduplication, persistence, deterministic windows |
socks5 | SOCKS proxy server (SOCKS4/4a/5 auto-detected) with no-auth and username/password methods, optional WebSocket transport |
stream | Stream state machine (Opening->Open->HalfClosed->Closed), buffered I/O |
sysinfo | System information collection for node info advertisements |
transport | Transport abstraction with QUIC, HTTP/2, and WebSocket implementations, TLS fingerprinting |
udp | UDP relay handler for SOCKS5 UDP ASSOCIATE - association lifecycle, datagram forwarding |
wizard | Interactive setup wizard with certificate generation |