General

force-http-engine-hosts

Surge 用 TUN 接管的连接,由于 Surge 没有准确的方法确认,会把 HTTP 连接简单地当成 TCP 连接对待,但 Surge 的高级功能(Rewrite、脚本等)都是作用于 HTTP 连接的,所以你如果确认一个在 Surge 显示 TCP 的连接其实是一个 HTTP 连接,可以使用这个参数强制交给 HTTP 引擎解析,这样所有高级功能都能生效。具体配置看这里

注:

tcp-connection = true

这个参数不在 General,是 MITM 的参数,但与上面参数相关,就放一起了。上面说到 Surge 识别为 TCP 但实际是 HTTPS 的在开启该选项后,会把该连接进行 HTTPS 解密,解密出的请求也可以使用 Rewrite 等功能了。

Surge 开启 TUN ONLY 造成的功能缺失,就是因为走 TUN 的所有连接都当成 TCP 处理了,配合这两个参数可以解决(不推荐)。

tun-excluded-routes

Surge iOS 主要用系统代理的方式接管大部分请求,剩下的不走系统代理的请求交给 TUN 接管,使用这个参数可以让由Suege TUN 接管的连接绕过 Surge,交给系统处理。

该参数一般用来解决一些兼容性问题,如某些 App 无法通过 DLNA 协议投屏。抓包发现是多播地址 239.255.255.250 处理有些问题,因此可以加入tun-excluded-routes=239.255.255.250/32 将该 ip 交给系统处理。

use-local-host-item-for-proxy = true

由于通过规则判断走代理的请求,DNS 解析在远端完成,[HOST] 默认不生效,所以对这类请求,需要加上参数令 [HOST] 段定义生效。

为 Surge 的 http 代理分享设上密码

macOS:

http-listen = user:password@0.0.0.0:6152