Skip to content

Instantly share code, notes, and snippets.

@xh4n3
Last active June 16, 2020 07:42
Show Gist options
  • Save xh4n3/cf25e79bdb29c8e03458 to your computer and use it in GitHub Desktop.
Save xh4n3/cf25e79bdb29c8e03458 to your computer and use it in GitHub Desktop.
Surge

Feature

  • 替代 PAC,实现根据规则区分选择代理线路
  • 支持 SOCKS5 和 Shadowsocks 协议
  • 完整支持所有的 Shadowsocks 加密方式 (table, rc4-md5, salsa20, chacha20, aes-256-cfb, aes-192-cfb, aes-128-cfb, bf-cfb, cast5-cfb, des-cfb, rc2-cfb, rc4, seed-cfb)
  • 全面支持双向 HTTP Keep-Alvie
  • 快,各种黑科技加速
  • 直接临时修改某个域名的访问规则 (暂时仅 Mac 版本)
  • 支持使用 GeoIP 规则决定线路

Usage

  • 需要 OS X 10.10 / iOS 9.0 以上版本

Configuration

General

  • interface:设置监听的 interface,支持 IP 或者设备名(如 en0),不填写默认 127.0.0.1 (仅 Mac 版本)
  • port:设置监听端口号 (仅 Mac 版本)
  • loglevel:支持 4 个级别的日志 verbose, info, notify, warning,默认 notify

Proxy

Proxy 部分支持 4 种代理

  • ProxyA=shadowsocks,127.0.0.1,3120,rc4-md5,password
  • ProxyB=socks5,127.0.0.1,3129
  • ProxyC=http,127.0.0.1,3120,username,password (用户名密码选填)
  • ProxyD=https,127.0.0.1,3120,username,password (用户名密码选填)

Rule

Rule 部分支持以下 4 种规则,对于每个域名规则会按照顺序去尝试匹配

  • DOMAIN-SUFFIX 域名后缀匹配
  • DOMAIN-KEYWORD 域名关键字匹配,用于 google 或者 youtube 这种有无数个国家后缀的服务
  • GEOIP 根据 IP 归属地匹配,当遇到这项规则时会使用当前的 DNS 去解析域名,所以可能会受到 GFW 污染影响,对于会被污染的域名请在 GEOIP 规则之前使用匹配规则
  • FINAL 结束匹配,一般在最后使用,指定默认线路

Known Issues

  • 不支持 HTTP pipelining,目前暂时没有发现哪个应用默认启用了
  • 不支持多个代理同时使用 Shadosocks 的 table 加密模式(其余模式不受影响)
  • 对某些不是很遵守 HTTP 规范的服务器支持会有问题
  • 因为对 Chunked Transfer Encoding 的支持,导致有一定概率使得连接提前中断,等待修复
  • 应用必须遵从系统代理设置,且暂时不支持 UDP 应用,目前已知的不支持的应用有
    • 官方 Twitter.app
      • Outlook
    • QQ 和微信的聊天功能
    • 各种在线游戏
  • 使用 HTTP 和 HTTPS 代理时,代理服务器必须支持 CONNECT 方法,即使是访问非 HTTPS 网站时也是如此

Roadmap

  • 更多 GUI 功能
  • DIRECT 模式支持指定某个 interface
  • 支持自定义 IP 段规则
  • 支持正则表达式规则
  • 支持根据 URL 设置规则
  • 配置热重加载
  • 在 Mac GUI 上选择配置
  • Mac 版本自动修改系统代理设置
@jianminLee
Copy link

很不错,去除了GEOIP,CN规则,然后用作者的gfwlist2surge现在xx速度比GEOIP要快,工具很方便!

@binderclip
Copy link

Hello LX,不小心搜到了这个 gist 😆

@KushNee
Copy link

KushNee commented Mar 2, 2016

shadowsocks协议的proxy应该写custom吧?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment