Shuttle
A web proxy in Golang with amazing features.
Install / Use
/learn @sipt/ShuttleREADME
Shuttle
Shuttle is a cross-platform network proxy tool based on Go. Feel free to join our Slack or Telegram. (logo created by @不二)
(Translated by wao1201, reviewed by Joe Hill.)
Introduction
Shuttle is a cross-platform network proxy tool based on Go.
SOCKS5、SOCKS5 over TLS、shadowsocksprotocols 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
- [x] TCP(HTTP/HTTPS)
- [ ] UDP
- [x] HTTP/HTTPS request extension
- [x] Traffic capture (MITM supported)
- [x] URL rewrite
- [x] Request/response modification
- [x] Request mapping
- [x] Remote servers management
- [x] Server grouping
- [x] Protocols supported
- [x] shadowsocks
- [x] SOCKS5
- [x] SOCKS5 over TLS
- [x] Grouping server selection policy
- [x] RTT
- [x] Manual select
- [x] Outbound Mode
- [x] Global, direct and reject
- [x] Rules
- [x] DOMAIN: full name match
- [x] DOMAIN-SUFFIX: suffix match
- [x] DOMAIN-KEYWORD: keyword match
- [x] IP-CIDR: IP range match
- [x] GEO-IP: GEO-IP route supported
- [x] DNS parsing type
- [x] static:static address mapping
- [x] direct:local DNS resolve
- [x] remote:remote server DNS resolve (prevent DNS Cache Poisoning)
- [x] External module
- [x] API ( see API document for details)
- [x] Web UI
- [x] Web UI (angular6 + ant design)
Installation & Launch
macOS
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.
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.
./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 to127.0.0.1:8080(for example,http-port: "8080")Web Proxy(HTTPS)set to127.0.0.1:8080(for example,http-port: "8080")SOCKS Proxyset to127.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:
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.
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.
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.
./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
ver: v1.0.1
Current config file only supports v1.0.1. Don't edit yourself.
General Settings
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
Proxy:
"🇯🇵JP_a": ["ss", "jp.a.example.com", "12345", "rc4-md5", "123456"]
"🇯🇵JP_b": ["ss", "jp.b.example.com", "12345", "rc4-md5", "123456"]
"🇯🇵JP_c": ["ss", "jp.c.example.com", "12345", "rc4-md5", "123456"]
"🇭🇰HK_a": ["ss", "hk.a.example.com", "12345", "rc4-md5", "123456"]
"🇭🇰HK_b": ["ss", "hk.b.example.com", "12345", "rc4-md5", "123456"]
"🇭🇰HK_c": ["ss", "hk.c.example.com", "12345", "rc4-md5", "123456"]
"🇺🇸US_a": ["ss", "us.a.example.com", "12345", "rc4-md5", "123456"]
"🇺🇸US_b": ["ss", "us.b.example.com", "12345", "rc4-md5", "123456"]
"🇺🇸US_c": ["ss", "hk.c.example.com", "12345", "rc4-md5", "123456"]
"socks": ["socks", "localhost", "12345"]
"socks-tls": ["socks-tls", "localhost", "12345", "skip-verify"]
"socks-auth": ["socks", "localhost", "12345", "user", "password"]
"socks-tls-auth": ["socks-tls", "localhost", "12345", "skip-verify", "user", "password"]
...
Server protocols:
-
ss: shadowsocks;
format:
"server name": ["ss", "domain/IP", "port", "cipher", "password"]Current supported encryption methods:
- [x] aes-128-cfb
- [x] aes-192-cfb
- [x] aes-256-cfb
- [x] aes-128-ctr
- [x] aes-192-ctr
- [x] aes-256-ctr
- [x] des-cfb
- [x] bf-cfb
- [x] cast5-cfb
- [x] rc4-md5
- [x] chacha20
- [x] chacha20-ietf
- [x] salsa20
- [x] aes-256-gcm
- [x] aes-192-gcm
- [x] aes-128-gcm
- [x] chac
