Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
S

shuttle

> 编程语言
Open source

A web proxy in Golang with amazing features.

2.0K stars0 likes0 views
WebsiteGitHub

About

A web proxy in Golang with amazing features.

Shuttle

Shuttle is a cross-platform network proxy tool based on Go. Feel free to join our Slack or Telegram. (logo created by @不二)

  • 中文文档
  • Introduction
  • Features
  • Installation & Launch
    • macOS
    • Windows
    • Linux
  • Configuration
    • Version
    • General Settings
    • Proxy Settings
    • DNS
    • Request/Response Modification & URL Rewrite
    • MitM
    • Rule Configuration
  • API
  • Web Dashboard
    • Servers
    • DNS Cache
    • Records
    • Traffic Capture

(Translated by wao1201, reviewed by Joe Hill.)

Introduction

Shuttle is a cross-platform network proxy tool based on Go.

  • SOCKS5、SOCKS5 over TLS、shadowsocks protocols supported.
  • Proxying via rules: domain, IP CIDR and GEO-IP.
  • Customized policy: direct, reject and proxy.
  • Multiple proxy servers selection and grouping management. The policy of servers selection can be RTT(Round-trip time) or manual select.
  • HTTP/HTTPS traffic capture, reverse proxy, request head modification, response head modification and fake return value supported.
  • DNS parsing types: static, direct, remote.

Module Structure:

Screenshots:

Features

  • Proxy type
    • TCP(HTTP/HTTPS)
    • UDP
  • HTTP/HTTPS request extension
    • Traffic capture (MITM supported)
    • URL rewrite
    • Request/response modification
    • Request mapping
  • Remote servers management
    • Server grouping
    • Protocols supported
      • shadowsocks
      • SOCKS5
      • SOCKS5 over TLS
    • Grouping server selection policy
      • RTT
      • Manual select
  • Outbound Mode
    • Global, direct and reject
    • Rules
      • DOMAIN: full name match
      • DOMAIN-SUFFIX: suffix match
      • DOMAIN-KEYWORD: keyword match
      • IP-CIDR: IP range match
      • GEO-IP: GEO-IP route supported
  • DNS parsing type
    • static:static address mapping
    • direct:local DNS resolve
    • remote:remote server DNS resolve (prevent DNS Cache Poisoning)
  • External module
    • API ( see API document for details)
    • Web UI
      • Web UI (angular6 + ant design)

Installation & Launch

macOS

Preparation

Download the zip file from release and unzip it. The Folder structure is shown below.

bash
shuttle
   ├── RespFiles/ #mock file directory
   ├── shuttle  #shuttle main executable
   ├── shuttle.yaml #config file
   └── start.sh #launch script

Open the config file, shuttle.yaml. Make sure all the ports are all configured correctly before launching. The default ports in config file are 8080, 8081 and 8082.

yaml
General:
  http-port: "8080"  #http/https port
  socks-port: "8081" #socks port
  controller-port: "8082" #dashboard port

Launch

Go to the shuttle directory and enter the command below in terminal/CMD to launch the app.

bash
./start.sh #no output

Open your browser and visit http://localhost:8082 (For example, use the default settings controller-port: "8082"). The application has already run successfully if you can visit the dashboard on your browser. Otherwise check the shuttle.log for more details and new issues anytime.

System Configuration

If you can visit http://c.sipt.top on your browser, you can skip the following steps directly.

Open System Preference => Network => Advanced => Proxy,there are 3 main options:

  • Web Proxy(HTTP) set to 127.0.0.1:8080 (for example, http-port: "8080")
  • Web Proxy(HTTPS) set to 127.0.0.1:8080(for example, http-port: "8080")
  • SOCKS Proxy set to 127.0.0.1:8080(for example, socks-port: "8081")

Press OK and click Apply. The proxy settings are working if you can see the dashboard by visiting http://c.sipt.top on browser.

Enter the following commands to make Terminal.app go through proxies:

bash
export https_proxy="http://127.0.0.1:8080"
export http_proxy="http://127.0.0.1:8080"
export all_proxy="socks5://127.0.0.1:8081"

Windows

Preparation

Download the zip file from release and unzip it. The Folder structure is shown below.

shuttle
   ├── RespFiles/ #mock file directory
   ├── shuttle  #shuttle main executable
   ├── shuttle.yaml #config file
   └── startup.bat #launch script

Open the config file, shuttle.yaml. Make sure all the ports are all configured correctly before launching. The default ports in config file are 8080, 8081 and 8082.

yaml
General:
  http-port: "8080"  #http/https port
  socks-port: "8081" #socks port
  controller-port: "8082" #dashboard port

Launch

Double-click startup.bat, there will be no output on screen. Open your browser and visit http://localhost:8082 (For example, use the default settings controller-port: "8082"). The application has already run successfully if you can visit the dashboard on your browser. Otherwise check the shuttle.log for more details and new issues anytime.

System Configuration

If you could open http://c.sipt.top in your browser, you can skip the following steps directly.

Open System Preference => Network => Proxy, set to 127.0.0.1:8080(for example: http-port: "8080"). The proxy settings are working if you can see the dashboard by visiting http://c.sipt.top on browser.

Linux

Preparation

Download the zip file from release and unzip it. The Folder structure is shown below.

shuttle
   ├── RespFiles/ #mock file directory
   ├── shuttle  #shuttle main executable
   ├── shuttle.yaml #config file
   └── start.sh #launch script

Open the config file, shuttle.yaml. Make sure all the ports are all configured correctly before launching. The default ports in config file are 8080, 8081 and 8082.

yaml
General:
  http-port: "8080"  #http/https port
  socks-port: "8081" #socks port
  controller-port: "8082" #dashboard port

Launch

Go to the shuttle directory and enter the command below in terminal/CMD to launch the app.

bash
./start.sh #no output

Open your browser and visit http://localhost:8082 (For example, use the default settings controller-port: "8082"). The application has already run successfully if you can visit the dashboard on your browser. Otherwise check the shuttle.log for more details and new issues anytime.

Configuration

Version

yaml
ver: v1.0.1

Current config file only supports v1.0.1. Don't edit yourself.

General Settings

yaml
General:
  loglevel: "info"
  dns-server:
  - "114.114.114.114"
  - "223.5.5.5"
  http-port: "8080"
  http-interface: "0.0.0.0"
  socks-port: "8081"
  socks-interface: "0.0.0.0"
  controller-port: "8082"
  controller-interface: "0.0.0.0"
Name Description Value
loglevel Log output level, better use level: info or error trace,debug,info,error
dns-server DNS server address IP address
http-port HTTP/HTTPS port
http-interface HTTP/HTTPS port
socks-port SOCKS port
socks-interface SOCKS control
controller-port dashboard port
controller-interface dashboard control

Proxy Settings

Server name and server group name should not be repeating. DIRECT, REJECT and GLOBAL are reserved name.

Server

…

Server protocols:

  • ss: shadowsocks;

    format:

    yaml
    "server name": ["ss", "domain/IP", "port", "cipher", "password"]

    Current supported encryption methods:

    • aes-128-cfb
    • aes-192-cfb
    • aes-256-cfb
    • aes-128-ctr
    • aes-192-ctr
    • aes-256-ctr
    • des-cfb
    • bf-cfb
    • cast5-cfb
    • rc4-md5
    • chacha20
    • chacha20-ietf
    • salsa20
    • aes-256-gcm
    • aes-192-gcm
    • aes-128-gcm
    • chacha20-ietf-poly1305
  • socks: SOCKS5;

    Support username/password authentication.

    yaml
    "server name": ["socks", "domain/IP", "port"] 
    "server name": ["socks", "domain/IP", "port", "username", "password"]
  • socks-tls: SOCKS5 over TLS;

    Support username/password authentication. Use: skip-verify or verify for checking server's certificate.

    yaml
    "server name": ["socks-tls", "domain/IP", "ca check or not", "port"] 
    "server name": ["socks-tls", "domain/IP", "ca check or not", "port", "username", "password"]

Server Group

yaml
Proxy-Group:
  "Auto": ["rtt", "HK_a", "HK_b", "HK_c", "JP_a", "JP_b", "JP_c", "US_a", "US_b", "US_c"]
  "HK": ["select", "HK_a", "HK_b", "HK_c"]
  "JP": ["select", "JP_a", "JP_b", "JP_c"]
  "US": ["select", "US_a", "US_b", "US_c"]
  "Proxy": ["select", "Auto", "HK", "JP", "US"]
  "nProxy": ["select", "DIRECT"]

Format

yaml
"group name": ["option", "server name/server group name", ... ]
Option Description
select manual select
rtt select the server that has the shortest transaction time between local(through remote server) to www.gstatic.com

DNS

yaml
Local-DNS:
- ["DOMAIN", "localhost", "static", "127.0.0.1"]
- ["DOMAIN-KEYWORD", "google", "remote", ""]
- ["DOMAIN-SUFFIX", "baidu.com", "direct", "114.114.114.114"]

Format

yaml
- ["match option", "value", "resolve method", "parameter"]
Match Option Description Value
DOMAIN-SUFFIX match domain suffix domain suffix
DOMAIN match domain domain
DOMAIN-KEYWORD match domain keyword keyword
Resolve Option Description Parameter
static static resolve corresponding IP adress
direct use DNS to resolve DNS address
remote use remote server to resolve N/A

Request/Response Modification & URL Rewrite

HTTPS(turn the MitM on)

yaml
Http-Map:
  Req-Map: #request modification config
    - url-rex: "^http://www.zhihu.com"
      type: "UPDATE"
      items:
        - ["HEADER", "Scheme", "http"]
  Resp-Map: #response modification config
      - url-rex: "^http://www.zhihu.com"
      type: "UPDATE"
      items:
         - ["STATUS", "", "301"]
         - ["HEADER", "Location", "http://www.jianshu.com"]
Name Description
url-rex Use regex to match requested URL
type UPDATE

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Godnsgomitmproxy

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言