Total Pageviews

Saturday, 25 November 2023

全局代理程序Leaf

 A versatile and efficient proxy framework with nice features suitable for various use cases.

releases ci

Leaf

A versatile and efficient proxy framework with nice features suitable for various use cases.

Multiplexing

There are 2 transports for traffic multiplexing:

  • AMux: A multiplexd transport based on reliable streams suitable for TCP-based protocols and transports
  • QUIC: A UDP-based, multiplexed and secure transport

The benefit of amux is that we can reuse connections to reduce handshake overhead, it's not designed to be memory efficient because it focus only on reusing connections and not reducing the number of connections. While quic can reduce both handshake overhead and memory usage without suffering the head-of-line blocking issue.

Transparent Proxying

There's the TUN inbound for this purpose, which is also of fundamental importance for VPN-like proxying use cases such as VPN apps on iOS and Android.

High Availability

Outbounds such as failover, tryall, retry, random and their combinations are able to flexibly deliver reqeusts to other outbounds based on their own metrics to achieve high availability or load balancing behaviors.

Request Routing

Rule-based request routing is also supported. Requests can be routed to different outbounds based on domain, IP, GEOIP and port rules.

Getting Started

[General]
dns-server = 223.5.5.5
socks-interface = 127.0.0.1
socks-port = 1080

[Proxy]
Direct = direct

More configuration examples can be found here. If you want more flexible control on the config options, the JSON format should be used, up-to-date examples for the JSON format could be found in the tests, both client-side and server-side config examples are presented there.

TUN Mode and Gateway Mode

TUN Mode

This syntax (tun = auto) is supported on macOS and Linux.

[General]
dns-server = 223.5.5.5
tun = auto

[Proxy]
Direct = direct

Gateway Mode

Running in gateway mode requires a configuration with TUN mode enabled. Gateway mode can be enabled by an environment variable.

GATEWAY_MODE=true leaf -c config.conf

Windows

  • Maple: A lightweight Universal Windows proxy app based on leaf

iOS & Android

Build

Install Rust: https://www.rust-lang.org/tools/install

Install GCC or Clang.

Clone & Build:

git clone --recursive https://github.com/eycorsican/leaf.git
cd leaf
cargo build -p leaf-bin

Run:

./target/debug/leaf --help
from https://github.com/eycorsican/leaf
-----

iLeaf

This simple app demonstrates the use of Leaf on iOS.

Leaf has released an iOS static library and can be downloaded by running a script (see details below).

Leaf supports a large feature set including SOCKS 5, HTTP, Shadowsocks, VMess and Trojan proxy protocols, and plugable proxy transports such as WebSocket and TLS. There are also flexible load balancing / high availability features to better deliver your network requests.

The app has no UIs and the switch is the only button to start and stop the proxy, you can control all the proxy behaviors by changing a config file, which is defined as a String variable and located in PacketTunnel/PacketTunnelProvider.swift.

Build & Run

  1. Fix Bundle Identifier and App Groups identifier and entitlements.

  2. Download leaf library:

./misc/download_leaf.sh
  1. Download dat files:
./misc/download_data.sh
  1. Edit the config conf in PacketTunnel/PacketTunnelProvider.swift, examples can be found here

  2. Build and Run

View Logs

Leaf by default outputs logs to the console, since it's a static library used by the NetworkExtension executable, you can checkout the logs on macOS via the Console.app.

While using the Console.app is the easiest way, my favorite is using the command

idevicesyslog -p PacketTunnel
You may install it via Homebrew, see https://libimobiledevice.org/ for more details.
from https://github.com/ChengLuffy/ileaf 

 

No comments:

Post a Comment