一个基于规则进行透明代理的 V2Ray 客户端,支持 Windows 和 macOS。
https://github.com/eycorsican/Mellow/releases
Mellow 可对所有应用、所有请求进行透明代理,不需要为每个应用或程序单独设置代理,它所支持的特性可以概括为:
| Mellow | Surge Mac | SSTap | Proxifier | Outline | |
|---|---|---|---|---|---|
| 透明代理 | ✅ | ✅ | ✅ | ✅ | ✅ |
| TCP 代理 | ✅ | ✅ | ✅ | ✅ | ✅ |
| UDP 代理 | ✅ | ✅ | ✅ | ✅ | |
| IP 规则 | ✅ | ✅ | ✅ | ✅ | |
| 域名规则 | ✅ | ✅ | ✅ | ||
| 应用进程规则 | ✅ | ✅ | ✅ | ||
| 端口规则 | ✅ | ✅ | ✅ | ||
| MitM | ✅ | ||||
| URL Rewrite | ✅ | ||||
| 多个代理出口 | ✅ | ✅ | ✅ | ||
| 负载均衡 | ✅ | ✅ | |||
| DNS 分流 | ✅ | ✅ | |||
| SOCKS | ✅ | ✅ | ✅ | ✅ | |
| Shadowsocks | ✅ | ✅ | ✅ | ✅ | |
| VMess | ✅ | ||||
| WebSocket, mKCP, QUIC, HTTP/2 传输 | ✅ | ||||
| Windows 支持 | ✅ | ✅ | ✅ | ✅ | |
| macOS 支持 | ✅ | ✅ | ✅ | ✅ |
其它 V2Ray 所支持的功能也都是支持的,上面并没有全部列出。
# macOS yarn && yarn distmac # Windows yarn && yarn distwin
可根据代理请求的 RTT,自动选择负载均衡组中最优线路来转发请求。
"routing": { "balancers": [ { "tag": "server_lb", "selector": [ "server_1", "server_2" ], "strategy": "latency", "totalMeasures": 2, "interval": 300, "delay": 1, "timeout": 6, "tolerance": 300, "probeTarget": "tls:www.google.com:443", "probeContent": "HEAD / HTTP/1.1\r\n\r\n" } ] }
支持 * 和 ? 通配符匹配,匹配内容为进程名称。
在 Windows 上,进程名称通常为 xxx.exe,例如 chrome.exe,在 Mellow 的 Statistics 中可方便查看。
在 macOS 上也可以通过 Mellow 的 Statistics 查看,也可以通过 ps 命令查看进程。
"routing": { "rules": [ { "app": [ "git*", "chrome.exe" ], "type": "field", "outboundTag": "proxy" } ] }
cfg.json
{
"log": {
"loglevel": "info"
},
"dns": {
"hosts": {
"localhost": "127.0.0.1"
},
"servers": [
{
"address": "8.8.8.8",
"port": 53
},
{
"address": "223.5.5.5",
"port": 53,
"domains": [
"geosite:cn"
]
}
]
},
"outbounds": [
{
"protocol": "vmess",
"settings": {},
"tag": "economic_vps_1"
},
{
"protocol": "vmess",
"settings": {},
"tag": "economic_vps_2"
},
{
"protocol": "vmess",
"settings": {},
"tag": "bittorrent_vps_1"
},
{
"protocol": "vmess",
"settings": {},
"tag": "expensive_vps_1"
},
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"settings": {},
"protocol": "blackhole",
"tag": "block"
}
],
"policy": {
"levels": {
"0": {
"connIdle": 300,
"downlinkOnly": 0,
"uplinkOnly": 0,
"handshake": 4
}
}
},
"routing": {
"domainStrategy": "IPIfNonMatch",
"balancers": [
{
"tag": "limited",
"selector": [
"expensive_vps_1",
"economic_vps_1"
],
"strategy": "latency",
"totalMeasures": 2,
"interval": 300,
"delay": 1,
"timeout": 6,
"tolerance": 300,
"probeTarget": "tls:www.google.com:443",
"probeContent": "HEAD / HTTP/1.1\r\n\r\n"
},
{
"tag": "bt",
"selector": [
"bittorrent_vps_1"
]
},
{
"tag": "nolimit",
"selector": [
"economic_vps_1",
"economic_vps_2"
],
"strategy": "latency",
"totalMeasures": 2,
"interval": 120
}
],
"rules": [
{
"domain": [
"domain:doubleclick.net"
],
"type": "field",
"outboundTag": "block"
},
{
"type": "field",
"ip": [
"1.1.1.1",
"9.9.9.9",
"8.8.8.8",
"8.8.4.4"
],
"balancerTag": "limited"
},
{
"app": [
"ssh",
"git",
"brew",
"Dropbox"
],
"type": "field",
"balancerTag": "limited"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:cn",
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"app": [
"aria2c"
],
"balancerTag": "bt"
},
{
"type": "field",
"domain": [
"googlevideo",
"dl.google.com",
"ytimg"
],
"balancerTag": "nolimit"
},
{
"type": "field",
"domain": [
"domain:youtube.com",
"android",
"google",
"nyaa",
"git"
],
"balancerTag": "limited"
},
{
"ip": [
"0.0.0.0/0",
"::/0"
],
"type": "field",
"balancerTag": "nolimit"
}
]
}
}