├── docs ├── handbook │ ├── out.md │ ├── route.md │ ├── out.ru.md │ ├── route.ru.md │ ├── index.md │ ├── index.ru.md │ ├── dns.md │ ├── dns.ru.md │ └── syntax.md ├── CNAME ├── assets │ ├── logo.webp │ ├── images.jpeg │ └── image │ │ └── tun │ │ └── iperf.png ├── groups.md ├── startup │ ├── web.md │ ├── client │ │ ├── index.md │ │ └── index.ru.md │ ├── faq.md │ ├── service │ │ ├── index.md │ │ ├── index.en.md │ │ └── index.ru.md │ ├── faq.en.md │ ├── faq.ru.md │ └── index.en.md ├── config │ ├── proxies │ │ ├── dns.md │ │ ├── direct.md │ │ ├── direct.ru.md │ │ ├── dns.ru.md │ │ ├── built-in.md │ │ ├── socks.md │ │ ├── socks.ru.md │ │ ├── ssr.md │ │ ├── ssr.ru.md │ │ ├── built-in.en.md │ │ ├── http.md │ │ ├── built-in.ru.md │ │ ├── snell.md │ │ ├── http.ru.md │ │ ├── mieru.md │ │ ├── ssh.md │ │ ├── snell.ru.md │ │ ├── anytls.md │ │ ├── ssh.ru.md │ │ ├── mieru.ru.md │ │ ├── sudoku.md │ │ ├── hysteria.md │ │ ├── anytls.ru.md │ │ ├── hysteria.ru.md │ │ ├── trojan.md │ │ ├── hysteria2.en.md │ │ ├── vmess.md │ │ ├── trojan.ru.md │ │ ├── hysteria2.md │ │ ├── hysteria2.ru.md │ │ ├── tuic.md │ │ ├── vmess.ru.md │ │ ├── vless.md │ │ ├── dialer-proxy.md │ │ ├── tls.md │ │ ├── transport.md │ │ ├── tuic.ru.md │ │ ├── dialer-proxy.ru.md │ │ ├── tls.en.md │ │ ├── vless.ru.md │ │ ├── transport.ru.md │ │ ├── index.md │ │ ├── tls.ru.md │ │ ├── wg.md │ │ └── index.ru.md │ ├── inbound │ │ ├── listeners │ │ │ ├── redirect.md │ │ │ ├── redirect.ru.md │ │ │ ├── tunnel.md │ │ │ ├── tunnel.ru.md │ │ │ ├── tproxy.md │ │ │ ├── tproxy.ru.md │ │ │ ├── mieru.md │ │ │ ├── tuic-v4.ru.md │ │ │ ├── tuic-v5.ru.md │ │ │ ├── sudoku.md │ │ │ ├── anytls.ru.md │ │ │ ├── http.ru.md │ │ │ ├── http.en.md │ │ │ ├── mixed.ru.md │ │ │ ├── socks.ru.md │ │ │ ├── mixed.en.md │ │ │ ├── socks.en.md │ │ │ ├── index.md │ │ │ ├── tun.md │ │ │ ├── tuic-v4.md │ │ │ ├── tuic-v5.md │ │ │ ├── tun.ru.md │ │ │ ├── http.md │ │ │ ├── mixed.md │ │ │ ├── socks.md │ │ │ ├── anytls.md │ │ │ ├── index.ru.md │ │ │ ├── ss.ru.md │ │ │ ├── vmess.ru.md │ │ │ ├── vless.ru.md │ │ │ ├── trojan.ru.md │ │ │ ├── vmess.md │ │ │ ├── hysteria2.md │ │ │ ├── trojan.md │ │ │ ├── hysteria2.ru.md │ │ │ ├── ss.md │ │ │ └── vless.md │ │ ├── port.md │ │ ├── port.en.md │ │ └── port.ru.md │ ├── proxy-groups │ │ ├── built-in.md │ │ ├── select.md │ │ ├── select.ru.md │ │ ├── select.en.md │ │ ├── fallback.md │ │ ├── url-test.md │ │ ├── fallback.ru.md │ │ ├── fallback.en.md │ │ ├── url-test.en.md │ │ ├── url-test.ru.md │ │ ├── built-in.en.md │ │ ├── built-in.ru.md │ │ ├── load-balance.md │ │ ├── relay.md │ │ ├── relay.en.md │ │ ├── load-balance.ru.md │ │ ├── load-balance.en.md │ │ ├── relay.ru.md │ │ └── index.md │ ├── sub-rule.md │ ├── sub-rule.ru.md │ ├── dns │ │ ├── hosts.md │ │ ├── hosts.en.md │ │ ├── hosts.ru.md │ │ ├── type.ru.md │ │ ├── type.md │ │ ├── diagram.md │ │ ├── diagram.ru.md │ │ └── index.md │ ├── experimental.md │ ├── experimental.ru.md │ ├── ntp │ │ ├── index.md │ │ └── index.ru.md │ ├── experimental.en.md │ ├── index.en.md │ ├── index.md │ ├── index.ru.md │ ├── tunnels.md │ ├── tunnels.en.md │ ├── tunnels.ru.md │ ├── sniff │ │ ├── index.md │ │ └── index.ru.md │ ├── rule-providers │ │ ├── index.md │ │ ├── content.md │ │ ├── content.en.md │ │ ├── content.ru.md │ │ ├── index.en.md │ │ └── index.ru.md │ ├── proxy-providers │ │ ├── content.md │ │ ├── content.en.md │ │ ├── content.ru.md │ │ └── index.md │ └── rules │ │ └── index.md ├── example │ ├── index.md │ ├── index.ru.md │ ├── index.en.md │ └── geox ├── index.en.md ├── index.md ├── index.ru.md └── api │ └── index.md ├── .gitignore ├── requirements.txt ├── .github └── workflows │ └── deploy.yml └── README.md /docs/handbook/out.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/handbook/route.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | wiki.metacubex.one -------------------------------------------------------------------------------- /docs/handbook/out.ru.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/handbook/route.ru.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/handbook/index.md: -------------------------------------------------------------------------------- 1 | # 画饼 2 | -------------------------------------------------------------------------------- /docs/handbook/index.ru.md: -------------------------------------------------------------------------------- 1 | # Руководство -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .idea/ 3 | .tool-versions -------------------------------------------------------------------------------- /docs/assets/logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaCubeX/Meta-Docs/HEAD/docs/assets/logo.webp -------------------------------------------------------------------------------- /docs/assets/images.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaCubeX/Meta-Docs/HEAD/docs/assets/images.jpeg -------------------------------------------------------------------------------- /docs/assets/image/tun/iperf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaCubeX/Meta-Docs/HEAD/docs/assets/image/tun/iperf.png -------------------------------------------------------------------------------- /docs/handbook/dns.md: -------------------------------------------------------------------------------- 1 | # DNS 2 | 3 | Mihomo 通过 DNS 劫持进入 DNS 模块,使得来自 TUN、Redirect 或 TProxy 入站的流量可以将 IP 映射至对应的域名。 4 | -------------------------------------------------------------------------------- /docs/groups.md: -------------------------------------------------------------------------------- 1 | # 某奇怪群组 2 | 3 | 请不要传播,否则该链接将会撤销 4 | 5 | Please do not share; otherwise, the link will be revoked. 6 | 7 | https://t.me/+QL4Imm5KrV9kOGQ1 -------------------------------------------------------------------------------- /docs/startup/web.md: -------------------------------------------------------------------------------- 1 | 2 | [Yacd](http://yacd.metacubex.one) 3 | 4 | [Metacubexd](http://d.metacubex.one) 5 | 6 | [zashboard](http://board.zash.run.place/) 7 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | mkdocs-material 2 | mkdocs-git-revision-date-localized-plugin 3 | mkdocs-toc-sidebar-plugin 4 | mkdocs-awesome-pages-plugin 5 | mkdocs-static-i18n -------------------------------------------------------------------------------- /docs/config/proxies/dns.md: -------------------------------------------------------------------------------- 1 | # DNS 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "dns-out" 6 | type: dns 7 | ``` 8 | 9 | `dns`出站会将请求劫持到内部[dns](../dns/index.md)模块,所有请求均在内部处理 10 | -------------------------------------------------------------------------------- /docs/handbook/dns.ru.md: -------------------------------------------------------------------------------- 1 | # DNS 2 | 3 | Mihomo перехватывает DNS через DNS-перехват, что позволяет трафику из входящих соединений TUN, Redirect или TProxy сопоставлять IP-адреса с соответствующими доменными именами. -------------------------------------------------------------------------------- /docs/config/inbound/listeners/redirect.md: -------------------------------------------------------------------------------- 1 | # REDIRECT 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: redir-in 6 | type: redir 7 | port: 7893 8 | listen: 0.0.0.0 9 | ``` 10 | 11 | ## [通用字段](./index.md) 12 | -------------------------------------------------------------------------------- /docs/config/proxy-groups/built-in.md: -------------------------------------------------------------------------------- 1 | # 预置代理组 2 | 3 | ## GLOBAL 4 | 5 | 默认填充所有代理组和代理节点 6 | 7 | 该策略组也可以在配置文件中自定义 8 | 9 | 但 web 面板以及部分客户端使用 GLOBAL 策略组内的 策略组顺序 进行排序 10 | 11 | 建议在自定义 GLOBAL 策略组时,书写完整当前配置所有的策略组 (除了 GLOBAL 本身) -------------------------------------------------------------------------------- /docs/config/inbound/listeners/redirect.ru.md: -------------------------------------------------------------------------------- 1 | # REDIRECT 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: redir-in 6 | type: redir 7 | port: 7893 8 | listen: 0.0.0.0 9 | ``` 10 | 11 | ## [Общие поля](./index.md) -------------------------------------------------------------------------------- /docs/config/inbound/listeners/tunnel.md: -------------------------------------------------------------------------------- 1 | # TUNNEL 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: tunnel-in 6 | type: tunnel 7 | port: 10816 8 | listen: 0.0.0.0 9 | network: [tcp, udp] 10 | target: target.com 11 | ``` 12 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/tunnel.ru.md: -------------------------------------------------------------------------------- 1 | # TUNNEL 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: tunnel-in 6 | type: tunnel 7 | port: 10816 8 | listen: 0.0.0.0 9 | network: [tcp, udp] 10 | target: target.com 11 | ``` -------------------------------------------------------------------------------- /docs/config/proxies/direct.md: -------------------------------------------------------------------------------- 1 | # DIRECT 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "direct" 6 | type: direct 7 | udp: true 8 | ip-version: ipv4 9 | interface-name: eth0 10 | routing-mark: 1234 11 | ``` 12 | 13 | [通用字段](./index.md) 14 | -------------------------------------------------------------------------------- /docs/config/proxies/direct.ru.md: -------------------------------------------------------------------------------- 1 | # DIRECT 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "direct" 6 | type: direct 7 | udp: true 8 | ip-version: ipv4 9 | interface-name: eth0 10 | routing-mark: 1234 11 | ``` 12 | 13 | [Общие поля](./index.md) -------------------------------------------------------------------------------- /docs/config/proxies/dns.ru.md: -------------------------------------------------------------------------------- 1 | # DNS 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "dns-out" 6 | type: dns 7 | ``` 8 | 9 | Исходящее соединение `dns` перехватывает запросы во внутренний модуль [dns](../dns/index.md), где все запросы обрабатываются внутренне -------------------------------------------------------------------------------- /docs/config/proxy-groups/select.md: -------------------------------------------------------------------------------- 1 | # Select 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: Proxy 6 | type: select 7 | proxies: 8 | - ss 9 | - vmess 10 | - auto 11 | #disable-udp: true 12 | ``` 13 | 14 | ## 通用字段 15 | 16 | 参阅 [通用字段](./index.md) 17 | -------------------------------------------------------------------------------- /docs/example/index.md: -------------------------------------------------------------------------------- 1 | ## Alpha 分支 2 | 3 | 开发版,新特性支持 4 | 5 | [链接](https://github.com/MetaCubeX/mihomo/blob/Alpha/docs/config.yaml) 6 | 7 | ## Meta 分支 8 | 9 | 稳定版,每月一更,部分文档内容不会及时发布在 meta 分支内 10 | 11 | [链接](https://github.com/MetaCubeX/mihomo/blob/Meta/docs/config.yaml) 12 | -------------------------------------------------------------------------------- /docs/config/proxy-groups/select.ru.md: -------------------------------------------------------------------------------- 1 | # Select 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: Proxy 6 | type: select 7 | proxies: 8 | - ss 9 | - vmess 10 | - auto 11 | #disable-udp: true 12 | ``` 13 | 14 | ## Общие поля 15 | 16 | См. [Общие поля](./index.md) -------------------------------------------------------------------------------- /docs/config/inbound/listeners/tproxy.md: -------------------------------------------------------------------------------- 1 | # TPROXY 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: tproxy-in 6 | type: tproxy 7 | port: 7894 8 | listen: 0.0.0.0 9 | udp: true 10 | ``` 11 | 12 | ## [通用字段](./index.md) 13 | 14 | ## 协议配置 15 | 16 | ### udp 17 | 18 | 是否监听 UDP 19 | -------------------------------------------------------------------------------- /docs/config/proxies/built-in.md: -------------------------------------------------------------------------------- 1 | # 预置出站 2 | 3 | ## DIRECT 4 | 5 | 直连,数据直接出站 6 | 7 | ## REJECT 8 | 9 | 拒绝,拦截数据出站 10 | 11 | ## REJECT-DROP 12 | 13 | 拒绝,与`REJECT`不同的是,该策略将静默抛弃请求 14 | 15 | ## PASS 16 | 17 | 绕过,会使匹配规则时跳过此规则 18 | 19 | ## COMPATIBLE 20 | 21 | 兼容,在策略组筛选不出节点时出现,等效 `DIRECT` 22 | -------------------------------------------------------------------------------- /docs/config/sub-rule.md: -------------------------------------------------------------------------------- 1 | # SUB-RULE 2 | 3 | ```{.yaml linenums="1"} 4 | sub-rules: 5 | rule1: 6 | - DOMAIN-SUFFIX,baidu.com,DIRECT 7 | - MATCH,PROXY 8 | sub-rule2: 9 | - IP-CIDR,1.1.1.1/32,REJECT 10 | - IP-CIDR,8.8.8.8/32,ss1 11 | - DOMAIN,dns.alidns.com,REJECT 12 | ``` 13 | -------------------------------------------------------------------------------- /docs/config/sub-rule.ru.md: -------------------------------------------------------------------------------- 1 | # SUB-RULE 2 | 3 | ```{.yaml linenums="1"} 4 | sub-rules: 5 | rule1: 6 | - DOMAIN-SUFFIX,baidu.com,DIRECT 7 | - MATCH,PROXY 8 | sub-rule2: 9 | - IP-CIDR,1.1.1.1/32,REJECT 10 | - IP-CIDR,8.8.8.8/32,ss1 11 | - DOMAIN,dns.alidns.com,REJECT 12 | ``` -------------------------------------------------------------------------------- /docs/config/proxy-groups/select.en.md: -------------------------------------------------------------------------------- 1 | # Select 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: Proxy 6 | type: select 7 | proxies: 8 | - ss 9 | - vmess 10 | - auto 11 | #disable-udp: true 12 | ``` 13 | 14 | ## Common Fields 15 | 16 | Refer to [Common Fields](./index.md). 17 | -------------------------------------------------------------------------------- /docs/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | - navigation 4 | - toc 5 | --- 6 | 7 | The non-Chinese pages are translated by ChatGPT 3.5. Feel free to contribute in your local language. 8 | 9 | [This document](https://github.com/MetaCubeX/Meta-Docs/) is still under revision. Your pull requests are welcome. 10 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/tproxy.ru.md: -------------------------------------------------------------------------------- 1 | # TPROXY 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: tproxy-in 6 | type: tproxy 7 | port: 7894 8 | listen: 0.0.0.0 9 | udp: true 10 | ``` 11 | 12 | ## [Общие поля](./index.md) 13 | 14 | ## Настройка протокола 15 | 16 | ### udp 17 | 18 | Прослушивать ли UDP -------------------------------------------------------------------------------- /docs/config/inbound/listeners/mieru.md: -------------------------------------------------------------------------------- 1 | # Mieru 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: mieru-in-1 6 | type: mieru 7 | port: 10818 8 | listen: 0.0.0.0 9 | transport: TCP # 支持 TCP 或者 UDP 10 | users: 11 | username1: password1 12 | username2: password2 13 | ``` 14 | 15 | [通用字段](./index.md) 16 | -------------------------------------------------------------------------------- /docs/startup/client/index.md: -------------------------------------------------------------------------------- 1 | # Client 2 | 3 | ## Windows 4 | 5 | ~~[**Clash.Mini**](https://github.com/MetaCubeX/Clash.Mini)~~ 6 | 7 | ## Mac OS 8 | 9 | [**ClashX.Meta**](https://github.com/MetaCubeX/ClashX.Meta) 10 | 11 | ## Android 12 | 13 | [**Clash.Meta for Android**](https://github.com/MetaCubeX/ClashMetaForAndroid/releases/tag/Prerelease-alpha) 14 | -------------------------------------------------------------------------------- /docs/startup/client/index.ru.md: -------------------------------------------------------------------------------- 1 | # Client 2 | 3 | ## Windows 4 | 5 | ~~[**Clash.Mini**](https://github.com/MetaCubeX/Clash.Mini)~~ 6 | 7 | ## Mac OS 8 | 9 | [**ClashX.Meta**](https://github.com/MetaCubeX/ClashX.Meta) 10 | 11 | ## Android 12 | 13 | [**Clash.Meta for Android**](https://github.com/MetaCubeX/ClashMetaForAndroid/releases/tag/Prerelease-alpha) 14 | -------------------------------------------------------------------------------- /docs/config/proxy-groups/fallback.md: -------------------------------------------------------------------------------- 1 | # Fallback 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: "fallback" 6 | type: fallback 7 | proxies: 8 | - ss 9 | - vmess 10 | url: 'https://www.gstatic.com/generate_204' 11 | interval: 300 12 | #lazy: true 13 | ``` 14 | 15 | 当前节点超时时,则会按代理顺序选择第一个可用节点 16 | 17 | ## 通用字段 18 | 19 | 参阅 [通用字段](./index.md) 20 | -------------------------------------------------------------------------------- /docs/config/dns/hosts.md: -------------------------------------------------------------------------------- 1 | # hosts 2 | 3 | ```{.yaml linenums="1"} 4 | hosts: 5 | '*.clash.dev': 127.0.0.1 6 | 'alpha.clash.dev': '::1' 7 | test.com: [1.1.1.1, 2.2.2.2] 8 | baidu.com: google.com 9 | ``` 10 | 11 | 键支持[域名通配](../../handbook/syntax.md#_8) 12 | 13 | 值支持字符串/数组,域名重定向不支持数组 14 | 15 | !!! note 16 | 完整的的域名优先级高于使用通配符的域名,例如:foo.example.com > \*.example.com > .example.com 17 | -------------------------------------------------------------------------------- /docs/example/index.ru.md: -------------------------------------------------------------------------------- 1 | ## Ветка Alpha 2 | 3 | Версия для разработки, поддержка новых функций 4 | 5 | [Ссылка](https://github.com/MetaCubeX/mihomo/blob/Alpha/docs/config.yaml) 6 | 7 | ## Ветка Meta 8 | 9 | Стабильная версия, обновляется раз в месяц, часть документации может публиковаться в этой ветке с задержкой 10 | 11 | [Ссылка](https://github.com/MetaCubeX/mihomo/blob/Meta/docs/config.yaml) -------------------------------------------------------------------------------- /docs/config/proxy-groups/url-test.md: -------------------------------------------------------------------------------- 1 | # Url-test 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: "自动选择" 6 | type: url-test 7 | proxies: 8 | - ss 9 | - vmess 10 | url: 'https://www.gstatic.com/generate_204' 11 | interval: 300 12 | #tolerance: 50 13 | #lazy: true 14 | ``` 15 | 16 | ## 通用字段 17 | 18 | 参阅 [通用字段](./index.md) 19 | 20 | ## tolerance 21 | 22 | 节点切换容差,单位 ms 23 | -------------------------------------------------------------------------------- /docs/config/proxies/socks.md: -------------------------------------------------------------------------------- 1 | # SOCKS 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "socks" 6 | type: socks5 7 | server: server 8 | port: 443 9 | # username: username 10 | # password: password 11 | # tls: true 12 | # fingerprint: xxxx 13 | # skip-cert-verify: true 14 | # udp: true 15 | # ip-version: ipv6 16 | ``` 17 | 18 | [通用字段](./index.md) 19 | 20 | [TLS 字段](./tls.md) 21 | -------------------------------------------------------------------------------- /docs/example/index.en.md: -------------------------------------------------------------------------------- 1 | ## Alpha Branch 2 | 3 | Development version with support for new features. 4 | 5 | [Link](https://github.com/MetaCubeX/mihomo/blob/Alpha/docs/config.yaml) 6 | 7 | ## Meta Branch 8 | 9 | Stable version, updated monthly. Some documentation content may not be released promptly in the meta branch. 10 | 11 | [Link](https://github.com/MetaCubeX/mihomo/blob/Meta/docs/config.yaml) 12 | -------------------------------------------------------------------------------- /docs/config/experimental.md: -------------------------------------------------------------------------------- 1 | # 实验性配置 2 | 3 | ```{.yaml linenums="1"} 4 | experimental: 5 | quic-go-disable-gso: false 6 | quic-go-disable-ecn: false 7 | dialer-ip4p-convert: false 8 | ``` 9 | 10 | ## quic-go-disable-gso 11 | 12 | 禁用`GSO` 13 | 14 | ## quic-go-disable-ecn 15 | 16 | 禁用`ECN` 17 | 18 | ## dialer-ip4p-convert 19 | 20 | 启用[IP4P](https://github.com/heiher/natmap/wiki/faq#域名访问是如何实现的)地址转换 21 | -------------------------------------------------------------------------------- /docs/config/proxies/socks.ru.md: -------------------------------------------------------------------------------- 1 | # SOCKS 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "socks" 6 | type: socks5 7 | server: server 8 | port: 443 9 | # username: username 10 | # password: password 11 | # tls: true 12 | # fingerprint: xxxx 13 | # skip-cert-verify: true 14 | # udp: true 15 | # ip-version: ipv6 16 | ``` 17 | 18 | [Общие поля](./index.md) 19 | 20 | [Поля TLS](./tls.md) -------------------------------------------------------------------------------- /docs/config/proxies/ssr.md: -------------------------------------------------------------------------------- 1 | # ShadowsocksR 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "ssr" 6 | type: ssr 7 | server: server 8 | port: 443 9 | cipher: chacha20-ietf 10 | password: "password" 11 | obfs: tls1.2_ticket_auth 12 | protocol: auth_sha1_v4 13 | # obfs-param: domain.tld 14 | # protocol-param: "#" 15 | # udp: true 16 | ``` 17 | 18 | [通用字段](./index.md) 19 | -------------------------------------------------------------------------------- /docs/config/proxies/ssr.ru.md: -------------------------------------------------------------------------------- 1 | # ShadowsocksR 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "ssr" 6 | type: ssr 7 | server: server 8 | port: 443 9 | cipher: chacha20-ietf 10 | password: "password" 11 | obfs: tls1.2_ticket_auth 12 | protocol: auth_sha1_v4 13 | # obfs-param: domain.tld 14 | # protocol-param: "#" 15 | # udp: true 16 | ``` 17 | 18 | [Общие поля](./index.md) -------------------------------------------------------------------------------- /docs/config/inbound/listeners/tuic-v4.ru.md: -------------------------------------------------------------------------------- 1 | # TUIC V4 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: tuicv4-in 6 | type: tuic 7 | port: 10003 8 | listen: 0.0.0.0 9 | token: 10 | - TOKEN 11 | certificate: ./server.crt 12 | private-key: ./server.key 13 | congestion-controller: bbr 14 | max-idle-time: 15000 15 | authentication-timeout: 1000 16 | alpn: 17 | - h3 18 | max-udp-relay-packet-size: 1500 19 | ``` -------------------------------------------------------------------------------- /docs/config/proxy-groups/fallback.ru.md: -------------------------------------------------------------------------------- 1 | # Fallback 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: "fallback" 6 | type: fallback 7 | proxies: 8 | - ss 9 | - vmess 10 | url: 'https://www.gstatic.com/generate_204' 11 | interval: 300 12 | #lazy: true 13 | ``` 14 | 15 | Если текущий узел не отвечает по таймауту, будет выбран первый доступный узел в порядке списка прокси 16 | 17 | ## Общие поля 18 | 19 | См. [Общие поля](./index.md) -------------------------------------------------------------------------------- /docs/config/experimental.ru.md: -------------------------------------------------------------------------------- 1 | # Экспериментальная конфигурация 2 | 3 | ```{.yaml linenums="1"} 4 | experimental: 5 | quic-go-disable-gso: false 6 | quic-go-disable-ecn: false 7 | dialer-ip4p-convert: false 8 | ``` 9 | 10 | ## quic-go-disable-gso 11 | 12 | Отключить `GSO` 13 | 14 | ## quic-go-disable-ecn 15 | 16 | Отключить `ECN` 17 | 18 | ## dialer-ip4p-convert 19 | 20 | Включить преобразование адреса [IP4P](https://github.com/heiher/natmap/wiki/faq#域名访问是如何实现的) -------------------------------------------------------------------------------- /docs/config/ntp/index.md: -------------------------------------------------------------------------------- 1 | # NTP 2 | 3 | ```{.yaml linenums="1"} 4 | ntp: 5 | enable: true 6 | write-to-system: true 7 | server: time.apple.com 8 | port: 123 9 | interval: 30 10 | ``` 11 | 12 | ## enable 13 | 14 | 是否启用 NTP 服务 15 | 16 | ## write-to-system 17 | 18 | 是否同步至系统时间,需要 root、管理员模式运行。 19 | 20 | ## server 21 | 22 | NTP 服务地址,默认 `time.apple.com` 23 | 24 | ## port 25 | 26 | NTP 服务端口,默认 `123` 27 | 28 | ## interval 29 | 30 | 同步时间间隔,单位(分),默认同步间隔为 30 分 31 | -------------------------------------------------------------------------------- /docs/config/proxy-groups/fallback.en.md: -------------------------------------------------------------------------------- 1 | # Fallback 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: "fallback" 6 | type: fallback 7 | proxies: 8 | - ss 9 | - vmess 10 | url: 'https://www.gstatic.com/generate_204' 11 | interval: 300 12 | #lazy: true 13 | ``` 14 | 15 | If the current node times out, the first available node will be selected in the order of proxies 16 | 17 | ## Common Fields 18 | 19 | Refer to [Common Fields](./index.md). 20 | -------------------------------------------------------------------------------- /docs/config/proxy-groups/url-test.en.md: -------------------------------------------------------------------------------- 1 | # Url-test 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: "自动选择" 6 | type: url-test 7 | proxies: 8 | - ss 9 | - vmess 10 | url: 'https://www.gstatic.com/generate_204' 11 | interval: 300 12 | #tolerance: 50 13 | #lazy: true 14 | ``` 15 | 16 | ## Common Fields 17 | 18 | Refer to [Common Fields](./index.md). 19 | 20 | ## tolerance 21 | 22 | proxies switch tolerance, measured in milliseconds (ms). 23 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/tuic-v5.ru.md: -------------------------------------------------------------------------------- 1 | # TUIC V5 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: tuicv5-in 6 | type: tuic 7 | port: 10004 8 | listen: 0.0.0.0 9 | users: 10 | UUID1: PASSWORD1 11 | UUID2: PASSWORD2 12 | certificate: ./server.crt 13 | private-key: ./server.key 14 | congestion-controller: bbr 15 | max-idle-time: 15000 16 | authentication-timeout: 1000 17 | alpn: 18 | - h3 19 | max-udp-relay-packet-size: 1500 20 | ``` -------------------------------------------------------------------------------- /docs/config/proxy-groups/url-test.ru.md: -------------------------------------------------------------------------------- 1 | # Url-test 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: "自动选择" 6 | type: url-test 7 | proxies: 8 | - ss 9 | - vmess 10 | url: 'https://www.gstatic.com/generate_204' 11 | interval: 300 12 | #tolerance: 50 13 | #lazy: true 14 | ``` 15 | 16 | ## Общие поля 17 | 18 | См. [Общие поля](./index.md) 19 | 20 | ## tolerance 21 | 22 | Допустимая погрешность при переключении узлов, измеряется в миллисекундах (мс). -------------------------------------------------------------------------------- /docs/config/proxies/built-in.en.md: -------------------------------------------------------------------------------- 1 | # Preset outbound 2 | 3 | ## DIRECT 4 | 5 | Direct, data exits directly. 6 | 7 | ## REJECT 8 | 9 | Reject, intercepts data from going out. 10 | 11 | ## REJECT-DROP 12 | 13 | Reject, unlike `REJECT`, this strategy silently drops the request. 14 | 15 | ## PASS 16 | 17 | Bypass, skipping this rule when matching. 18 | 19 | ## COMPATIBLE 20 | 21 | Compatible, appears when no node is selected in the policy group filtering, equivalent to `DIRECT`. 22 | -------------------------------------------------------------------------------- /docs/config/experimental.en.md: -------------------------------------------------------------------------------- 1 | # Experimental configuration 2 | 3 | ```{.yaml linenums="1"} 4 | experimental: 5 | quic-go-disable-gso: false 6 | quic-go-disable-ecn: false 7 | ``` 8 | 9 | ## quic-go-disable-gso 10 | 11 | Disable GSO (Generic Segmentation Offload). 12 | 13 | ## quic-go-disable-ecn 14 | 15 | Disable ECN (Explicit Congestion Notification). 16 | 17 | ## dialer-ip4p-convert 18 | 19 | Enable [IP4P](https://github.com/heiher/natmap/wiki/faq#域名访问是如何实现的) address conversion. 20 | -------------------------------------------------------------------------------- /docs/config/proxies/http.md: -------------------------------------------------------------------------------- 1 | # HTTP 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "http" 6 | type: http 7 | server: server 8 | port: 443 9 | # username: username 10 | # password: password 11 | # tls: true # https 12 | # skip-cert-verify: true 13 | # sni: custom.com 14 | # fingerprint: xxxx # 同 experimental.fingerprints 使用 sha256 指纹,配置协议独立的指纹,将忽略 experimental.fingerprints 15 | # ip-version: dual 16 | headers: 17 | ``` 18 | 19 | [通用字段](./index.md) 20 | 21 | [TLS 字段](./tls.md) 22 | -------------------------------------------------------------------------------- /docs/config/proxy-groups/built-in.en.md: -------------------------------------------------------------------------------- 1 | # Predefined Proxy Group 2 | 3 | ## GLOBAL 4 | 5 | Default fill all proxy-groups and proxies 6 | 7 | The strategy group can also be customized in the configuration file 8 | 9 | However, the web panel and some client applications sort according to the order of policy groups within the GLOBAL policy group 10 | 11 | It is recommended to write out all the policy groups of the current configuration in full (except for the GLOBAL itself) when customizing the GLOBAL policy group -------------------------------------------------------------------------------- /docs/config/proxy-groups/built-in.ru.md: -------------------------------------------------------------------------------- 1 | # Предопределенные группы прокси 2 | 3 | ## GLOBAL 4 | 5 | По умолчанию включает все группы прокси и прокси-узлы 6 | 7 | Эта группа стратегий также может быть настроена в конфигурационном файле 8 | 9 | Однако веб-панель и некоторые клиентские приложения выполняют сортировку в соответствии с порядком групп политик в группе политик GLOBAL 10 | 11 | При настройке группы политик GLOBAL рекомендуется полностью расписать все группы политик текущей конфигурации (кроме самой GLOBAL) -------------------------------------------------------------------------------- /docs/config/dns/hosts.en.md: -------------------------------------------------------------------------------- 1 | # hosts 2 | 3 | ```{.yaml linenums="1"} 4 | hosts: 5 | '*.clash.dev': 127.0.0.1 6 | 'alpha.clash.dev': '::1' 7 | test.com: [1.1.1.1, 2.2.2.2] 8 | baidu.com: google.com 9 | ``` 10 | 11 | Keys support [domain wildcards](../../handbook/syntax.md#domain-wildcards). 12 | 13 | Values support strings/arrays; domain redirection does not support arrays. 14 | 15 | !!! note 16 | A complete domain takes precedence over domains using wildcards, for example: foo.example.com > *.example.com > .example.com. -------------------------------------------------------------------------------- /docs/config/proxies/built-in.ru.md: -------------------------------------------------------------------------------- 1 | # Встроенные исходящие соединения 2 | 3 | ## DIRECT 4 | 5 | Прямое соединение, данные отправляются напрямую 6 | 7 | ## REJECT 8 | 9 | Отклонение, блокирует исходящие данные 10 | 11 | ## REJECT-DROP 12 | 13 | Отклонение, в отличие от `REJECT`, этот режим отбрасывает запрос без уведомления 14 | 15 | ## PASS 16 | 17 | Обход, при совпадении правила позволяет пропустить его 18 | 19 | ## COMPATIBLE 20 | 21 | Совместимость, появляется когда в группе политик не удалось отфильтровать узлы, эквивалентно `DIRECT` -------------------------------------------------------------------------------- /docs/config/dns/hosts.ru.md: -------------------------------------------------------------------------------- 1 | # hosts 2 | 3 | ```{.yaml linenums="1"} 4 | hosts: 5 | '*.clash.dev': 127.0.0.1 6 | 'alpha.clash.dev': '::1' 7 | test.com: [1.1.1.1, 2.2.2.2] 8 | baidu.com: google.com 9 | ``` 10 | 11 | Ключи поддерживают [маску доменов](../../handbook/syntax.md#_8) 12 | 13 | Значения поддерживают строки/массивы, перенаправление доменов не поддерживает массивы 14 | 15 | !!! note 16 | Полные доменные имена имеют более высокий приоритет, чем доменные имена с использованием масок, например: foo.example.com > \*.example.com > .example.com -------------------------------------------------------------------------------- /docs/config/proxies/snell.md: -------------------------------------------------------------------------------- 1 | # Snell 2 | 3 | ```{.yaml linenums="1"} 4 | proxies 5 | - name: "snell" 6 | type: snell 7 | server: server 8 | port: 44046 9 | psk: yourpsk 10 | version: 3 11 | obfs-opts: 12 | mode: http 13 | host: bing.com 14 | ``` 15 | 16 | [通用字段](./index.md) 17 | 18 | ## psk 19 | 20 | 必须,Snell 预共享密钥 21 | 22 | ## version 23 | 24 | snell 版本,仅支持 v1-3,默认为 v1,仅 v3 支持 udp 25 | 26 | ## obfs-opts 27 | 28 | Snell 混淆设置 29 | 30 | ### obfs-opts.mode 31 | 32 | Snell 混淆模式,支持 http/tls 33 | 34 | ### obfs-opts.host 35 | 36 | Snell 混淆域名 37 | -------------------------------------------------------------------------------- /docs/config/proxies/http.ru.md: -------------------------------------------------------------------------------- 1 | # HTTP 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "http" 6 | type: http 7 | server: server 8 | port: 443 9 | # username: username 10 | # password: password 11 | # tls: true # https 12 | # skip-cert-verify: true 13 | # sni: custom.com 14 | # fingerprint: xxxx # как в experimental.fingerprints, использует sha256 отпечаток, настраивает отпечаток независимо от протокола, игнорирует experimental.fingerprints 15 | # ip-version: dual 16 | headers: 17 | ``` 18 | 19 | [Общие поля](./index.md) 20 | 21 | [Поля TLS](./tls.md) -------------------------------------------------------------------------------- /docs/config/inbound/listeners/sudoku.md: -------------------------------------------------------------------------------- 1 | # Sudoku 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: sudoku-in-1 6 | type: sudoku 7 | port: 8443 # 仅支持单端口 8 | listen: 0.0.0.0 9 | key: "" # 如果你使用sudoku生成的ED25519密钥对,此处是密钥对中的公钥,当然,你也可以仅仅使用任意uuid充当key 10 | aead-method: chacha20-poly1305 # 支持chacha20-poly1305或者aes-128-gcm以及none,sudoku的混淆层可以确保none情况下数据安全 11 | padding-min: 1 # 填充最小长度 12 | padding-max: 15 # 填充最大长度,均不建议过大 13 | table-type: prefer_ascii # 可选值:prefer_ascii、prefer_entropy 前者全ascii映射,后者保证熵值(汉明1)低于3 14 | handshake-timeout: 5 # optional 15 | ``` 16 | 17 | [通用字段](./index.md) 18 | -------------------------------------------------------------------------------- /docs/config/ntp/index.ru.md: -------------------------------------------------------------------------------- 1 | # NTP 2 | 3 | ```{.yaml linenums="1"} 4 | ntp: 5 | enable: true 6 | write-to-system: true 7 | server: time.apple.com 8 | port: 123 9 | interval: 30 10 | ``` 11 | 12 | ## enable 13 | 14 | Включение службы NTP 15 | 16 | ## write-to-system 17 | 18 | Синхронизировать со временем системы, требуется запуск от root или с правами администратора. 19 | 20 | ## server 21 | 22 | Адрес сервера NTP, по умолчанию `time.apple.com` 23 | 24 | ## port 25 | 26 | Порт сервера NTP, по умолчанию `123` 27 | 28 | ## interval 29 | 30 | Интервал синхронизации времени в минутах, по умолчанию 30 минут -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | - navigation 4 | - toc 5 | --- 6 | [**虚空终端**](https://github.com/MetaCubeX/mihomo/tree/Meta) **是一个基于开源项目** [**原神**](https://www.yuanshen.com/) **的二次开发版本,增加了一些独有特性**,[本文档](https://github.com/MetaCubeX/Meta-Docs/)仍在修订中,欢迎 PR。 7 | 8 | **使用 虚空终端 前,请悉知:** 9 | 10 | * **任何与 [MetaCubeX](https://github.com/MetaCubeX) 无关的下游项目名称中不得包含mihomo一词。** 11 | * 本 Wiki 主要介绍 虚空终端 的特色功能,原神 特性请查看 [**原神 Wiki**](https://wiki.biligame.com/ys/%E9%A6%96%E9%A1%B5) 12 | * 本 Wiki 基于最新的 [**虚空终端**](https://github.com/MetaCubeX/mihomo/tree/Alpha) 分支介绍,如果您的 虚空终端 低于此版本,可能会有部分功能不支持; 13 | * 虚空终端 支持原神的全部特性,支持 原神 Premium 核心部分特性。 14 | -------------------------------------------------------------------------------- /docs/config/proxies/mieru.md: -------------------------------------------------------------------------------- 1 | # Mieru 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: mieru 6 | type: mieru 7 | server: server 8 | port: 2999 9 | port-range: 2090-2099 10 | transport: TCP 11 | username: user 12 | password: password 13 | multiplexing: MULTIPLEXING_LOW 14 | ``` 15 | 16 | [通用字段](./index.md) 17 | 18 | ## port-range 19 | 20 | 端口范围,不可与 `port` 同时书写 21 | 22 | ## transport 23 | 24 | 协议,目前支持 `TCP` 和 `UDP` 25 | 26 | ## multiplexing 27 | 28 | 多路复用,可以使用的值包括 `MULTIPLEXING_OFF`, `MULTIPLEXING_LOW`, `MULTIPLEXING_MIDDLE`, `MULTIPLEXING_HIGH`。其中 `MULTIPLEXING_OFF` 会关闭多路复用功能。默认值为 `MULTIPLEXING_LOW` 29 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/anytls.ru.md: -------------------------------------------------------------------------------- 1 | # AnyTLS 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: anytls-in-1 6 | type: anytls 7 | port: 10818 8 | listen: 0.0.0.0 9 | users: 10 | username1: password1 11 | username2: password2 12 | certificate: ./server.crt 13 | private-key: ./server.key 14 | padding-scheme: "" # https://github.com/anytls/anytls-go/blob/main/docs/protocol.md#cmdupdatepaddingscheme 15 | ``` 16 | 17 | [Общие поля](./index.md) 18 | 19 | !!! warning "" 20 | `certificate` и `private-key` обязательны 21 | 22 | ## padding-scheme 23 | 24 | См. https://github.com/anytls/anytls-go/blob/main/docs/protocol.md#cmdupdatepaddingscheme -------------------------------------------------------------------------------- /docs/config/index.en.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | - :material-login:   __[Inbounds][inbound]__ 4 | 5 | test 6 | 7 | - :material-shuffle-variant:   __[Routing Rules][rule]__ 8 | 9 | test 10 | 11 | - :material-logout:   __[Outbound Proxies][proxie]__ 12 | 13 | test 14 | 15 | - :material-format-list-group:   __[Proxy Groups][proxy-group]__ 16 | 17 | test 18 | 19 | - :material-dns-outline:   __[DNS][dns]__ 20 | 21 | test 22 | 23 |
24 | 25 | [inbound]: ./inbound/index.md 26 | [proxy-group]: ./proxy-groups/index.md 27 | [proxie]: ./proxies/index.md 28 | [rule]: ./rules/index.md 29 | [dns]: ./dns/index.md 30 | -------------------------------------------------------------------------------- /docs/config/proxy-groups/load-balance.md: -------------------------------------------------------------------------------- 1 | # Load-balance 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: "load-balance" 6 | type: load-balance 7 | proxies: 8 | - ss1 9 | - ss2 10 | - vmess1 11 | url: 'https://www.gstatic.com/generate_204' 12 | interval: 300 13 | #lazy: true 14 | #strategy: consistent-hashing 15 | ``` 16 | 17 | ## 通用字段 18 | 19 | 参阅 [通用字段](./index.md) 20 | 21 | ## strategy 22 | 23 | 负载均衡策略 24 | 25 | * `round-robin` 将会把所有的请求分配给策略组内不同的代理节点 26 | 27 | * `consistent-hashing` 将相同的 `目标地址` 的请求分配给策略组内的同一个代理节点 28 | 29 | * `sticky-sessions`: 将相同的 `来源地址` 和 `目标地址` 的请求分配给策略组内的同一个代理节点,缓存 10 分钟过期 30 | 31 | !!! note 32 | `目标地址` 为域名时,使用顶级域名匹配 -------------------------------------------------------------------------------- /docs/config/proxies/ssh.md: -------------------------------------------------------------------------------- 1 | # SSH 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "ssh-out" 6 | type: ssh 7 | 8 | server: 127.0.0.1 9 | port: 22 10 | username: root 11 | password: password 12 | private-key: key 13 | private-key-passphrase: key_password 14 | host-key: 15 | - "ssh-rsa AAAAB3NzaC1yc2EAA..." 16 | host-key-algorithms: 17 | - rsa 18 | ``` 19 | 20 | [通用字段](./index.md) 21 | 22 | ## username 23 | 24 | SSH 用户 25 | 26 | ## password 27 | 28 | SSH 密码 29 | 30 | ## private-key 31 | 32 | 密钥内容/路径 33 | 34 | ## private_key_passphrase 35 | 36 | 密钥密码 37 | 38 | ## host-key 39 | 40 | 主机密钥,留空接受所有 41 | 42 | ## host-key-algorithms 43 | 44 | 主机密钥算法 45 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/http.ru.md: -------------------------------------------------------------------------------- 1 | # HTTP 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: http-in 6 | type: http 7 | port: 7890 8 | listen: 0.0.0.0 9 | users: 10 | - username: username1 11 | password: password1 12 | certificate: ./server.crt 13 | private-key: ./server.key 14 | ``` 15 | 16 | ## [Общие поля](./index.md) 17 | 18 | ## Настройка протокола 19 | 20 | ### Аутентификация пользователей 21 | 22 | Если не заполнено поле users, то используются глобальные настройки [аутентификации пользователей](../../general.md/#_2). Если заполнено, глобальные настройки игнорируются. Чтобы пропустить аутентификацию для этого входящего соединения, можно указать `users: []` -------------------------------------------------------------------------------- /docs/config/proxies/snell.ru.md: -------------------------------------------------------------------------------- 1 | # Snell 2 | 3 | ```{.yaml linenums="1"} 4 | proxies 5 | - name: "snell" 6 | type: snell 7 | server: server 8 | port: 44046 9 | psk: yourpsk 10 | version: 3 11 | obfs-opts: 12 | mode: http 13 | host: bing.com 14 | ``` 15 | 16 | [Общие поля](./index.md) 17 | 18 | ## psk 19 | 20 | Обязательно, предварительный общий ключ Snell 21 | 22 | ## version 23 | 24 | Версия snell, поддерживаются только v1-3, по умолчанию v1, только v3 поддерживает udp 25 | 26 | ## obfs-opts 27 | 28 | Настройки маскировки Snell 29 | 30 | ### obfs-opts.mode 31 | 32 | Режим маскировки Snell, поддерживает http/tls 33 | 34 | ### obfs-opts.host 35 | 36 | Домен для маскировки Snell -------------------------------------------------------------------------------- /docs/config/inbound/listeners/http.en.md: -------------------------------------------------------------------------------- 1 | # HTTP 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: http-in 6 | type: http 7 | port: 7890 8 | listen: 0.0.0.0 9 | users: 10 | - username: username1 11 | password: password1 12 | certificate: ./server.crt 13 | private-key: ./server.key 14 | ``` 15 | 16 | ## [General Fields](./index.md) 17 | 18 | ## Protocol Configuration 19 | 20 | ### User Authentication 21 | 22 | If the users field is not filled in, it will follow the global [User Authentication](../../general.md/#user-authentication) settings. If it is filled in, the global settings will be ignored. To skip authentication for this inbound connection, you can set `users: []`. 23 | -------------------------------------------------------------------------------- /docs/config/proxies/anytls.md: -------------------------------------------------------------------------------- 1 | # AnyTLS 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: anytls 6 | type: anytls 7 | server: 1.2.3.4 8 | port: 443 9 | password: "" 10 | client-fingerprint: chrome 11 | udp: true 12 | idle-session-check-interval: 30 13 | idle-session-timeout: 30 14 | min-idle-session: 0 15 | sni: "example.com" 16 | alpn: 17 | - h2 18 | - http/1.1 19 | skip-cert-verify: true 20 | ``` 21 | 22 | [通用字段](./index.md) 23 | 24 | [TLS 字段](./tls.md) 25 | 26 | ## idle-session-check-interval 27 | 28 | 检查空闲会话的时间间隔。默认值:30 秒。 29 | 30 | ## idle-session-timeout 31 | 32 | 在检查中,关闭闲置时间超过此值的会话。默认值:30 秒。 33 | 34 | ## min-idle-session 35 | 36 | 在检查中,至少前 n 个空闲会话保持打开状态。默认值:n=0 -------------------------------------------------------------------------------- /docs/config/inbound/listeners/mixed.ru.md: -------------------------------------------------------------------------------- 1 | # MIXED 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: mixed-in 6 | type: mixed 7 | port: 7892 8 | listen: 0.0.0.0 9 | udp: true 10 | users: 11 | - username: username1 12 | password: password1 13 | certificate: ./server.crt 14 | private-key: ./server.key 15 | ``` 16 | 17 | ## [Общие поля](./index.md) 18 | 19 | ## Настройка протокола 20 | 21 | ### udp 22 | 23 | Прослушивать ли UDP 24 | 25 | ### Аутентификация пользователей 26 | 27 | Если не заполнено поле users, то используются глобальные настройки [аутентификации пользователей](../../general.md/#_2). Если заполнено, глобальные настройки игнорируются. Чтобы пропустить аутентификацию для этого входящего соединения, можно указать users: [] -------------------------------------------------------------------------------- /docs/config/inbound/listeners/socks.ru.md: -------------------------------------------------------------------------------- 1 | # SOCKS 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: socks-in 6 | type: socks 7 | port: 7891 8 | listen: 0.0.0.0 9 | udp: true 10 | users: 11 | - username: username1 12 | password: password1 13 | certificate: ./server.crt 14 | private-key: ./server.key 15 | ``` 16 | 17 | ## [Общие поля](./index.md) 18 | 19 | ## Настройка протокола 20 | 21 | ### udp 22 | 23 | Прослушивать ли UDP 24 | 25 | ### Аутентификация пользователей 26 | 27 | Если не заполнено поле users, то используются глобальные настройки [аутентификации пользователей](../../general.md/#_2). Если заполнено, глобальные настройки игнорируются. Чтобы пропустить аутентификацию для этого входящего соединения, можно указать users: [] -------------------------------------------------------------------------------- /docs/config/inbound/listeners/mixed.en.md: -------------------------------------------------------------------------------- 1 | # MIXED 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: mixed-in 6 | type: mixed 7 | port: 7892 8 | listen: 0.0.0.0 9 | udp: true 10 | users: 11 | - username: username1 12 | password: password1 13 | certificate: ./server.crt 14 | private-key: ./server.key 15 | ``` 16 | 17 | ## [General Fields](./index.md) 18 | 19 | ## Protocol Configuration 20 | 21 | ### UDP 22 | 23 | Whether to listen for UDP 24 | 25 | ### User Authentication 26 | 27 | If the users field is left empty, it will follow the global [User Authentication](../../general.md/#user-authentication) settings. If filled in, it will override the global settings. To skip authentication for this inbound connection, you can specify users: [] 28 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/socks.en.md: -------------------------------------------------------------------------------- 1 | # SOCKS 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: socks-in 6 | type: socks 7 | port: 7891 8 | listen: 0.0.0.0 9 | udp: true 10 | users: 11 | - username: username1 12 | password: password1 13 | certificate: ./server.crt 14 | private-key: ./server.key 15 | ``` 16 | 17 | ## [General Fields](./index.md) 18 | 19 | ## Protocol Configuration 20 | 21 | ### UDP 22 | 23 | Whether to listen for UDP 24 | 25 | ### User Authentication 26 | 27 | If the users field is not filled in, it will follow the global [User Authentication](../../general.md/#user-authentication) settings. If it is filled in, the global settings will be ignored. To bypass authentication for this inbound connection, you can set users: [] 28 | -------------------------------------------------------------------------------- /docs/config/inbound/port.md: -------------------------------------------------------------------------------- 1 | # 代理端口 2 | 3 | [http/socks/mixed端口验证与外部访问](../general.md/#_1) 4 | 5 | ## http(s) 代理端口 6 | 7 | ```{.yaml linenums="1"} 8 | port: 7890 9 | ``` 10 | 11 | ## socks4/4a/5 代理端口 12 | 13 | ```{.yaml linenums="1"} 14 | socks-port: 7891 15 | ``` 16 | 17 | ## 混合端口 18 | 19 | !!! node 20 | 混合端口是一个特殊的端口,它同时支持 HTTP(S) 和 SOCKS5 协议。您可以使用任何支持 HTTP 或 SOCKS 代理的程序连接到这个端口 21 | 22 | ```{.yaml linenums="1"} 23 | mixed-port: 7892 24 | ``` 25 | 26 | ## 透明代理端口 27 | 28 | !!! note 29 | redirect 端口仅限 Linux(Android) 以及 macOS 适用,tproxy 端口仅限 linux(Android) 适用 30 | 31 | redirect 透明代理端口,仅能代理 TCP 流量 32 | 33 | ```{.yaml linenums="1"} 34 | redir-port: 7893 35 | ``` 36 | 37 | tproxy 透明代理端口,可代理 TCP 与 UDP 流量 38 | 39 | ```{.yaml linenums="1"} 40 | tproxy-port: 7894 41 | ``` 42 | -------------------------------------------------------------------------------- /docs/config/proxies/ssh.ru.md: -------------------------------------------------------------------------------- 1 | # SSH 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "ssh-out" 6 | type: ssh 7 | 8 | server: 127.0.0.1 9 | port: 22 10 | username: root 11 | password: password 12 | private-key: key 13 | private-key-passphrase: key_password 14 | host-key: 15 | - "ssh-rsa AAAAB3NzaC1yc2EAA..." 16 | host-key-algorithms: 17 | - rsa 18 | ``` 19 | 20 | [Общие поля](./index.md) 21 | 22 | ## username 23 | 24 | Пользователь SSH 25 | 26 | ## password 27 | 28 | Пароль SSH 29 | 30 | ## private-key 31 | 32 | Содержимое ключа/путь к ключу 33 | 34 | ## private_key_passphrase 35 | 36 | Пароль ключа 37 | 38 | ## host-key 39 | 40 | Ключ хоста, оставьте пустым, чтобы принимать все 41 | 42 | ## host-key-algorithms 43 | 44 | Алгоритмы ключа хоста -------------------------------------------------------------------------------- /docs/config/proxies/mieru.ru.md: -------------------------------------------------------------------------------- 1 | # Mieru 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: mieru 6 | type: mieru 7 | server: server 8 | port: 2999 9 | port-range: 2090-2099 10 | transport: TCP 11 | username: user 12 | password: password 13 | multiplexing: MULTIPLEXING_LOW 14 | ``` 15 | 16 | [Общие поля](./index.md) 17 | 18 | ## port-range 19 | 20 | Диапазон портов, не может использоваться одновременно с `port` 21 | 22 | ## transport 23 | 24 | Протокол, В настоящее время поддерживает `TCP` и `UDP`. 25 | 26 | ## multiplexing 27 | 28 | Мультиплексирование, возможные значения: `MULTIPLEXING_OFF`, `MULTIPLEXING_LOW`, `MULTIPLEXING_MIDDLE`, `MULTIPLEXING_HIGH`. `MULTIPLEXING_OFF` отключает функцию мультиплексирования. По умолчанию `MULTIPLEXING_LOW` 29 | -------------------------------------------------------------------------------- /docs/config/proxies/sudoku.md: -------------------------------------------------------------------------------- 1 | # Sudoku 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: sudoku 6 | type: sudoku 7 | server: 1.2.3.4 8 | port: 443 9 | key: "" 10 | aead-method: chacha20-poly1305 11 | padding-min: 2 12 | padding-max: 7 13 | table-type: prefer_ascii 14 | http-mask: true 15 | ``` 16 | 17 | [通用字段](./index.md) 18 | 19 | ## key 20 | 21 | 如果你使用sudoku生成的ED25519密钥对,请填写密钥对中的私钥,否则填入和服务端相同的uuid 22 | 23 | ## aead-method 24 | 25 | 可选值:`chacha20-poly1305`、`aes-128-gcm`、`none` 我们保证在none的情况下sudoku混淆层仍然确保安全 26 | 27 | ## padding-min 28 | 29 | 最小填充字节数 30 | 31 | ## padding-max 32 | 33 | 最大填充字节数 34 | 35 | ## table-type 36 | 37 | 可选值:prefer_ascii、prefer_entropy 前者全ascii映射,后者保证熵值(汉明1)低于3 38 | 39 | ## http-mask 40 | 41 | 是否启用http掩码 42 | -------------------------------------------------------------------------------- /docs/config/proxy-groups/relay.md: -------------------------------------------------------------------------------- 1 | # Relay 2 | 3 | !!! warning 4 | relay 策略已经被弃用,请使用[dialer-proxy](../proxies/index.md#dialer-proxy) 5 | 6 | 31 | -------------------------------------------------------------------------------- /docs/config/index.md: -------------------------------------------------------------------------------- 1 | # 配置 2 | 3 |
4 | 5 | - :octicons-file-code-24:   __[完整示例][example]__ 6 | 7 | test 8 | 9 | - :material-login:   __[流量入站][inbound]__ 10 | 11 | test 12 | 13 | - :material-shuffle-variant:   __[路由规则][rule]__ 14 | 15 | test 16 | 17 | - :material-logout:   __[出站代理][proxie]__ 18 | 19 | test 20 | 21 | - :material-dns-outline:   __[DNS][dns]__ 22 | 23 | test 24 | 25 | - :material-format-list-group:   __[策略组][proxy-group]__ 26 | 27 | test 28 | 29 |
30 | 31 | [example]: https://github.com/MetaCubeX/mihomo/blob/Meta/docs/config.yaml 32 | [inbound]: ./inbound/index.md 33 | [proxy-group]: ./proxy-groups/index.md 34 | [proxie]: ./proxies/index.md 35 | [rule]: ./rules/index.md 36 | [dns]: ./dns/index.md 37 | -------------------------------------------------------------------------------- /docs/config/proxies/hysteria.md: -------------------------------------------------------------------------------- 1 | # Hysteria 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "hysteria" 6 | type: hysteria 7 | server: server.com 8 | port: 443 9 | # ports: 1000,2000-3000,4000 # port 不可省略 10 | auth-str: yourpassword 11 | # obfs: obfs_str 12 | # alpn: 13 | # - h3 14 | protocol: udp # 支持 udp/wechat-video/faketcp 15 | up: "30 Mbps" # 若不写单位,默认为 Mbps 16 | down: "200 Mbps" # 若不写单位,默认为 Mbps 17 | # sni: server.com 18 | # skip-cert-verify: false 19 | # recv-window-conn: 12582912 20 | # recv-window: 52428800 21 | # disable_mtu_discovery: false 22 | # fingerprint: xxxx # 配置指纹将实现 SSL Pining 效果, 可使用 openssl x509 -noout -fingerprint -sha256 -inform pem -in yourcert.pem 获取 23 | # fast-open: true # 启用 Fast Open (降低连接建立延迟),默认为 false 24 | ``` 25 | 26 | [通用字段](./index.md) 27 | 28 | [TLS 字段](./tls.md) 29 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/index.md: -------------------------------------------------------------------------------- 1 | # LISTENERS 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: in-name 6 | type: shadowsocks 7 | port: 10000 8 | listen: 0.0.0.0 9 | rule: sub-rule-1 10 | proxy: proxy 11 | ``` 12 | 13 | ## name 14 | 15 | 入站名称,可用于匹配[`入站规则`](../../rules/index.md#in-name) 16 | 17 | ## type 18 | 19 | 入站类型 20 | 21 | ## listen 22 | 23 | 监听地址 24 | 25 | ## port 26 | 27 | 监听端口,支持使用 ports 格式,格式参考[端口范围](../../../handbook//syntax.md#_14) 28 | 29 | ## rule 30 | 31 | 使用[`子规则`](../../sub-rule.md)作为入站匹配规则出站,为空则默认使用[`rules`](../../rules/index.md),如果未找到[`子规则`](../../sub-rule.md)则直接使用[`rules`](../../rules/index.md) 32 | 33 | ## proxy 34 | 35 | 使用[`出站代理`](../../proxies/index.md)或[`策略组`](../../proxy-groups/index.md)直接出站,为空则默认使用[`rules`](../../rules/index.md) 36 | 37 | !!! warning "" 38 | 当`proxy`不为空时,这里的`proxy`名称必须合法,否则会出错 39 | -------------------------------------------------------------------------------- /docs/config/proxies/anytls.ru.md: -------------------------------------------------------------------------------- 1 | # AnyTLS 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: anytls 6 | type: anytls 7 | server: 1.2.3.4 8 | port: 443 9 | password: "" 10 | client-fingerprint: chrome 11 | udp: true 12 | idle-session-check-interval: 30 13 | idle-session-timeout: 30 14 | min-idle-session: 0 15 | sni: "example.com" 16 | alpn: 17 | - h2 18 | - http/1.1 19 | skip-cert-verify: true 20 | ``` 21 | 22 | [Общие поля](./index.md) 23 | 24 | [Поля TLS](./tls.md) 25 | 26 | ## idle-session-check-interval 27 | 28 | Интервал проверки неактивных сессий. По умолчанию: 30 секунд. 29 | 30 | ## idle-session-timeout 31 | 32 | При проверке закрывает сессии, неактивные дольше этого значения. По умолчанию: 30 секунд. 33 | 34 | ## min-idle-session 35 | 36 | При проверке первые n неактивных сессий остаются открытыми. По умолчанию: n=0 -------------------------------------------------------------------------------- /docs/config/index.ru.md: -------------------------------------------------------------------------------- 1 | # Конфигурация 2 | 3 |
4 | 5 | - :octicons-file-code-24:   __[Полный пример][example]__ 6 | 7 | test 8 | 9 | - :material-login:   __[Входящий трафик][inbound]__ 10 | 11 | test 12 | 13 | - :material-shuffle-variant:   __[Правила маршрутизации][rule]__ 14 | 15 | test 16 | 17 | - :material-logout:   __[Исходящие прокси][proxie]__ 18 | 19 | test 20 | 21 | - :material-dns-outline:   __[DNS][dns]__ 22 | 23 | test 24 | 25 | - :material-format-list-group:   __[Группы политик][proxy-group]__ 26 | 27 | test 28 | 29 |
30 | 31 | [example]: https://github.com/MetaCubeX/mihomo/blob/Meta/docs/config.yaml 32 | [inbound]: ./inbound/index.md 33 | [proxy-group]: ./proxy-groups/index.md 34 | [proxie]: ./proxies/index.md 35 | [rule]: ./rules/index.md 36 | [dns]: ./dns/index.md -------------------------------------------------------------------------------- /docs/config/proxies/hysteria.ru.md: -------------------------------------------------------------------------------- 1 | # Hysteria 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "hysteria" 6 | type: hysteria 7 | server: server.com 8 | port: 443 9 | # ports: 1000,2000-3000,4000 # port нельзя опустить 10 | auth-str: yourpassword 11 | # obfs: obfs_str 12 | # alpn: 13 | # - h3 14 | protocol: udp # поддерживает udp/wechat-video/faketcp 15 | up: "30 Mbps" # если единица измерения не указана, по умолчанию Mbps 16 | down: "200 Mbps" # если единица измерения не указана, по умолчанию Mbps 17 | # sni: server.com 18 | # skip-cert-verify: false 19 | # recv-window-conn: 12582912 20 | # recv-window: 52428800 21 | # disable_mtu_discovery: false 22 | # fingerprint: xxxx 23 | # fast-open: true # включить Fast Open (снижает задержку установки соединения), по умолчанию false 24 | ``` 25 | 26 | [Общие поля](./index.md) 27 | 28 | [Поля TLS](./tls.md) 29 | -------------------------------------------------------------------------------- /docs/config/proxy-groups/relay.en.md: -------------------------------------------------------------------------------- 1 | # Relay 2 | 3 | ```{.yaml linenums="1"} 4 | Proxy Groups: 5 | # Traffic: Clash <-> http <-> vmess <-> ss1 <-> ss2 <-> Internet 6 | - name: "relay" 7 | type: relay 8 | proxies: 9 | - http 10 | - vmess 11 | - ss1 12 | - ss2 13 | ``` 14 | 15 | !!! warning 16 | The relay strategy is about to be deprecated. Please use [dialer-proxy](../proxies/index.md#dialer-proxy). 17 | 18 | WireGuard currently does not support usage in relay, so please also use [dialer-proxy](../proxies/index.md#dialer-proxy). 19 | 20 | The traffic flow is Clash <-> http <-> vmess <-> ss1 <-> ss2 <-> Internet. 21 | 22 | ## About UDP 23 | 24 | Relay supports the transmission of UDP, provided that both the head and tail nodes of the proxy chain support UDP over TCP. Currently, the protocols that support UDP include `vmess`, `vless`, `trojan`, `ss`, `ssr`, and `tuic`. -------------------------------------------------------------------------------- /docs/config/tunnels.md: -------------------------------------------------------------------------------- 1 | # TUNNEL 2 | 3 | 流量转发隧道,可以转发 tcp/udp 流量,也可经过代理转发 4 | 5 | ```{.yaml linenums="1"} 6 | tunnels: 7 | - tcp/udp,127.0.0.1:6553,114.114.114.114:53,proxy 8 | - network: [tcp, udp] 9 | address: 127.0.0.1:7777 10 | target: target.com 11 | proxy: proxy 12 | ``` 13 | 14 | ## 单行 15 | 16 | ```{.yaml linenums="1"} 17 | tunnels: 18 | - tcp/udp,127.0.0.1:6553,8.8.8.8:53,proxy 19 | ``` 20 | 21 | ## 多行 22 | 23 | ```{.yaml linenums="1"} 24 | tunnels: 25 | - network: [tcp, udp] 26 | address: 127.0.0.1:6553 27 | target: 8.8.8.8:53 28 | proxy: proxy 29 | ``` 30 | 31 | 单行顺序分别对应多行的 `network`/`address`/`target`/`proxy` 32 | 33 | ### network 34 | 35 | 需要监听的网络类型,可为 tcp/udp 36 | 37 | ### address 38 | 39 | 本地监听地址 40 | 41 | ### target 42 | 43 | 转发的目标地址 44 | 45 | ### proxy 46 | 47 | 可选项,经过某个 `proxies`/`proxy-groups` 发送流量 48 | 49 | 如上示例为 访问`127.0.0.1:6553`为经过`proxy`这个`proxies`/`proxy-groups`访问`8.8.8.8:53` 50 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/tun.md: -------------------------------------------------------------------------------- 1 | # TUN 2 | 3 | 注意,listeners中的tun仅提供给高级用户使用,普通用户应使用顶层配置中的tun 4 | 5 | ```{.yaml linenums="1"} 6 | listeners: 7 | - name: tun-in 8 | type: tun 9 | stack: system 10 | dns-hijack: 11 | - 0.0.0.0:53 12 | # auto-detect-interface: false 13 | # auto-route: false 14 | # mtu: 9000 15 | inet4-address: 16 | - 198.19.0.1/30 17 | inet6-address: 18 | - "fdfe:dcba:9877::1/126" 19 | # strict-route: true 20 | # inet4-route-address:由 21 | # - 0.0.0.0/1 22 | # - 128.0.0.0/1 23 | # inet6-route-address: 24 | # - "::/1" 25 | # - "8000::/1" 26 | # endpoint-independent-nat: false 27 | # include-uid: 28 | # - 0 29 | # include-uid-range: 30 | # - 1000-99999 31 | # exclude-uid: 32 | # - 1000 33 | # exclude-uid-range: 34 | # - 1000-99999 35 | # include-android-user: 36 | # - 0 37 | # - 10 38 | # include-package: 39 | # - com.android.chrome 40 | # exclude-package: 41 | # - com.android.captiveportallogin 42 | ``` 43 | -------------------------------------------------------------------------------- /docs/index.ru.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | - navigation 4 | - toc 5 | --- 6 | [**Mihomo**](https://github.com/MetaCubeX/mihomo/tree/Meta) **это форк открытого проекта** [**Clash**](https://www.yuanshen.com/) **с дополнительными уникальными функциями**. [Эта документация](https://github.com/MetaCubeX/Meta-Docs/) все еще находится в процессе разработки, мы приветствуем ваши PR. 7 | 8 | **Перед использованием Mihomo, пожалуйста, обратите внимание:** 9 | 10 | * **Любой проект, не связанный с [MetaCubeX](https://github.com/MetaCubeX), не должен содержать слово mihomo в своем названии.** 11 | * Эта Wiki в основном описывает особенности Mihomo. Для информации о Clash, пожалуйста, смотрите [**Clash Wiki**](https://wiki.biligame.com/ys/%E9%A6%96%E9%A1%B5) 12 | * Эта Wiki основана на последней ветке [**Mihomo**](https://github.com/MetaCubeX/mihomo/tree/Alpha). Если ваша версия Mihomo старше, некоторые функции могут не поддерживаться. 13 | * Mihomo поддерживает все функции Clash, а также основную часть функций Clash Premium. -------------------------------------------------------------------------------- /docs/config/proxy-groups/load-balance.ru.md: -------------------------------------------------------------------------------- 1 | # Load-balance 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: "load-balance" 6 | type: load-balance 7 | proxies: 8 | - ss1 9 | - ss2 10 | - vmess1 11 | url: 'https://www.gstatic.com/generate_204' 12 | interval: 300 13 | #lazy: true 14 | #strategy: consistent-hashing # или round-robin 15 | ``` 16 | 17 | ## Общие поля 18 | 19 | См. [Общие поля](./index.md) 20 | 21 | ## strategy 22 | 23 | Стратегии балансировки нагрузки 24 | 25 | * `round-robin` распределяет все запросы между разными прокси-узлами в группе стратегий. 26 | 27 | * `consistent-hashing` назначает запросы с одинаковым `целевым адресом` одному и тому же прокси-узлу в группе стратегий. 28 | 29 | * `sticky-sessions`: запросы с одинаковым `исходным адресом` и `целевым адресом` будут направляться к одному и тому же прокси-узлу в группе стратегий, срок действия кэша - 10 минут. 30 | 31 | !!! note 32 | Когда `целевой адрес` является доменом, используется сопоставление по домену верхнего уровня. -------------------------------------------------------------------------------- /docs/config/proxy-groups/load-balance.en.md: -------------------------------------------------------------------------------- 1 | # Load-balance 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: "load-balance" 6 | type: load-balance 7 | proxies: 8 | - ss1 9 | - ss2 10 | - vmess1 11 | url: 'https://www.gstatic.com/generate_204' 12 | interval: 300 13 | #lazy: true 14 | #strategy: consistent-hashing # or round-robin 15 | ``` 16 | 17 | ## Common Fields 18 | 19 | Refer to [Common Fields](./index.md). 20 | 21 | ## Strategy 22 | 23 | Load Balancing Strategies 24 | 25 | * `round-robin` will distribute all requests among different proxy nodes within the strategy group. 26 | 27 | * `consistent-hashing` will assign requests with the same `target address` to the same proxy node within the strategy group. 28 | 29 | * `sticky-sessions`: requests with the same `source address` and `target address` will be directed to the same proxy node within the strategy group, with a cache expiration of 10 minutes. 30 | 31 | !!! note 32 | When the `target address` is a domain, it uses top-level domain matching. 33 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/tuic-v4.md: -------------------------------------------------------------------------------- 1 | # TUIC V4 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: tuicv4-in 6 | type: tuic 7 | port: 10003 8 | listen: 0.0.0.0 9 | token: 10 | - TOKEN 11 | certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径 12 | private-key: ./server.key # 证书对应的私钥 PEM 格式,或者私钥路径 13 | # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空 14 | # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify" 15 | # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径 16 | # 如果填写则开启ech(可由 mihomo generate ech-keypair <明文域名> 生成) 17 | # ech-key: | 18 | # -----BEGIN ECH KEYS----- 19 | # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK 20 | # madSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz 21 | # dC5jb20AAA== 22 | # -----END ECH KEYS----- 23 | congestion-controller: bbr 24 | max-idle-time: 15000 25 | authentication-timeout: 1000 26 | alpn: 27 | - h3 28 | max-udp-relay-packet-size: 1500 29 | ``` 30 | -------------------------------------------------------------------------------- /docs/config/proxy-groups/relay.ru.md: -------------------------------------------------------------------------------- 1 | # Relay 2 | 3 | !!! warning 4 | Стратегия relay устарела; вместо нее используйте [dialer-proxy](../proxies/index.md#dialer-proxy). 5 | 6 | 30 | -------------------------------------------------------------------------------- /docs/config/proxies/trojan.md: -------------------------------------------------------------------------------- 1 | # Trojan 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "trojan" 6 | type: trojan 7 | server: server 8 | port: 443 9 | password: yourpsk 10 | udp: true 11 | 12 | sni: example.com 13 | alpn: 14 | - h2 15 | - http/1.1 16 | client-fingerprint: random 17 | fingerprint: xxxx 18 | skip-cert-verify: true 19 | ss-opts: 20 | enabled: false 21 | method: aes-128-gcm 22 | password: "example" 23 | reality-opts: 24 | public-key: xxxx 25 | short-id: xxxx 26 | 27 | network: tcp 28 | 29 | smux: 30 | enabled: false 31 | ``` 32 | 33 | [通用字段](./index.md) 34 | 35 | [TLS 字段](./tls.md) 36 | 37 | ## password 38 | 39 | 必须,trojan 服务器密码 40 | 41 | ## ss-opts 42 | 43 | ### ss-opfs.enabled 44 | 45 | 启用 trojan-go 的 shadowsocks AEAD 加密 46 | 47 | ### ss-opfs.method 48 | 49 | 加密方法,支持 aes-128-gcm/aes-256-gcm/chacha20-ietf-poly1305 50 | 51 | ### ss-opfs.password 52 | 53 | trojan-go 的 shadowsocks AEAD 加密密码 54 | 55 | ## network 56 | 57 | 传输层,支持 ws/grpc,不配置或配置其他值则为 tcp 58 | 59 | 参阅 [传输层配置](./transport.md) -------------------------------------------------------------------------------- /docs/config/inbound/port.en.md: -------------------------------------------------------------------------------- 1 | # Proxy Ports 2 | 3 | [HTTP/SOCKS/Mixed Port Verification and External Access](../general.md/#allow-lan) 4 | 5 | ## HTTP(S) Proxy Port 6 | 7 | ```{.yaml linenums="1"} 8 | port: 7890 9 | ``` 10 | 11 | ## SOCKS4/4a/5 Proxy Port 12 | 13 | ```{.yaml linenums="1"} 14 | socks-port: 7891 15 | ``` 16 | 17 | ## Mixed Port 18 | 19 | !!! note 20 | The mixed port is a special port that supports both HTTP(S) and SOCKS5 protocols. You can connect to this port using any program that supports HTTP or SOCKS proxies. 21 | 22 | ```{.yaml linenums="1"} 23 | mixed-port: 7892 24 | ``` 25 | 26 | ## Transparent Proxy Port 27 | 28 | !!! note 29 | The redirect port is applicable only for Linux (Android) and macOS, while the tproxy port is applicable only for Linux (Android). 30 | 31 | The redirect transparent proxy port can only proxy TCP traffic. 32 | 33 | ```{.yaml linenums="1"} 34 | redir-port: 7893 35 | ``` 36 | 37 | The tproxy transparent proxy port can proxy both TCP and UDP traffic. 38 | 39 | ```{.yaml linenums="1"} 40 | tproxy-port: 7894 41 | ``` -------------------------------------------------------------------------------- /docs/config/inbound/listeners/tuic-v5.md: -------------------------------------------------------------------------------- 1 | # TUIC V5 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: tuicv5-in 6 | type: tuic 7 | port: 10004 8 | listen: 0.0.0.0 9 | users: 10 | UUID1: PASSWORD1 11 | UUID2: PASSWORD2 12 | certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径 13 | private-key: ./server.key # 证书对应的私钥 PEM 格式,或者私钥路径 14 | # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空 15 | # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify" 16 | # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径 17 | # 如果填写则开启ech(可由 mihomo generate ech-keypair <明文域名> 生成) 18 | # ech-key: | 19 | # -----BEGIN ECH KEYS----- 20 | # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK 21 | # madSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz 22 | # dC5jb20AAA== 23 | # -----END ECH KEYS----- 24 | congestion-controller: bbr 25 | max-idle-time: 15000 26 | authentication-timeout: 1000 27 | alpn: 28 | - h3 29 | max-udp-relay-packet-size: 1500 30 | ``` 31 | -------------------------------------------------------------------------------- /docs/config/inbound/port.ru.md: -------------------------------------------------------------------------------- 1 | # Порты прокси 2 | 3 | [Аутентификация и внешний доступ для портов http/socks/mixed](../general.md/#_1) 4 | 5 | ## Порт http(s) прокси 6 | 7 | ```{.yaml linenums="1"} 8 | port: 7890 9 | ``` 10 | 11 | ## Порт socks4/4a/5 прокси 12 | 13 | ```{.yaml linenums="1"} 14 | socks-port: 7891 15 | ``` 16 | 17 | ## Смешанный порт 18 | 19 | !!! node 20 | Смешанный порт — это специальный порт, который одновременно поддерживает протоколы HTTP(S) и SOCKS5. Вы можете использовать любую программу с поддержкой HTTP или SOCKS прокси для подключения к этому порту 21 | 22 | ```{.yaml linenums="1"} 23 | mixed-port: 7892 24 | ``` 25 | 26 | ## Порты прозрачного прокси 27 | 28 | !!! note 29 | Порт redirect доступен только на Linux(Android) и macOS, порт tproxy доступен только на Linux(Android) 30 | 31 | Порт прозрачного прокси redirect, может проксировать только TCP-трафик 32 | 33 | ```{.yaml linenums="1"} 34 | redir-port: 7893 35 | ``` 36 | 37 | Порт прозрачного прокси tproxy, может проксировать TCP и UDP трафик 38 | 39 | ```{.yaml linenums="1"} 40 | tproxy-port: 7894 41 | ``` -------------------------------------------------------------------------------- /docs/config/inbound/listeners/tun.ru.md: -------------------------------------------------------------------------------- 1 | # TUN 2 | 3 | Примечание: Параметр tun в разделе «Слушатели» предназначен только для опытных пользователей. Обычным пользователям следует использовать параметр tun в конфигурации верхнего уровня. 4 | 5 | ```{.yaml linenums="1"} 6 | listeners: 7 | - name: tun-in 8 | type: tun 9 | stack: system 10 | dns-hijack: 11 | - 0.0.0.0:53 12 | # auto-detect-interface: false 13 | # auto-route: false 14 | # mtu: 9000 15 | inet4-address: 16 | - 198.19.0.1/30 17 | inet6-address: 18 | - "fdfe:dcba:9877::1/126" 19 | # strict-route: true 20 | # inet4-route-address: 21 | # - 0.0.0.0/1 22 | # - 128.0.0.0/1 23 | # inet6-route-address: 24 | # - "::/1" 25 | # - "8000::/1" 26 | # endpoint-independent-nat: false 27 | # include-uid: 28 | # - 0 29 | # include-uid-range: 30 | # - 1000-99999 31 | # exclude-uid: 32 | # - 1000 33 | # exclude-uid-range: 34 | # - 1000-99999 35 | # include-android-user: 36 | # - 0 37 | # - 10 38 | # include-package: 39 | # - com.android.chrome 40 | # exclude-package: 41 | # - com.android.captiveportallogin 42 | ``` 43 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/http.md: -------------------------------------------------------------------------------- 1 | # HTTP 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: http-in 6 | type: http 7 | port: 7890 8 | listen: 0.0.0.0 9 | users: 10 | - username: username1 11 | password: password1 12 | # 下面两项如果填写则开启 tls(需要同时填写) 13 | # certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径 14 | # private-key: ./server.key # 证书对应的私钥 PEM 格式,或者私钥路径 15 | # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空 16 | # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify" 17 | # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径 18 | # 如果填写则开启ech(可由 mihomo generate ech-keypair <明文域名> 生成) 19 | # ech-key: | 20 | # -----BEGIN ECH KEYS----- 21 | # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK 22 | # madSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz 23 | # dC5jb20AAA== 24 | # -----END ECH KEYS----- 25 | ``` 26 | 27 | ## [通用字段](./index.md) 28 | 29 | ## 协议配置 30 | 31 | ### 用户验证 32 | 33 | 如果不填写 users 项,则遵从全局 [用户验证](../../general.md/#_2) 设置,如果填写会忽略全局设置,如想跳过该入站的验证可填写 `users: []` 34 | -------------------------------------------------------------------------------- /docs/config/dns/type.ru.md: -------------------------------------------------------------------------------- 1 | # Поддерживаемые типы 2 | 3 | ## UDP 4 | 5 | ```{.yaml linenums="1"} 6 | - 223.5.5.5 7 | - udp://223.5.5.5 8 | ``` 9 | 10 | ## TCP 11 | 12 | ```{.yaml linenums="1"} 13 | - tcp://8.8.8.8 14 | ``` 15 | 16 | ## DNS over TLS 17 | 18 | ```{.yaml linenums="1"} 19 | - tls://1.1.1.1 20 | ``` 21 | 22 | ## DNS over HTTPS 23 | 24 | ```{.yaml linenums="1"} 25 | - https://doh.pub/dns-query 26 | ``` 27 | 28 | ## DNS over QUIC 29 | 30 | ```{.yaml linenums="1"} 31 | - quic://dns.adguard.com:784 32 | ``` 33 | 34 | ## system 35 | 36 | ```{.yaml linenums="1"} 37 | - system:// 38 | - system 39 | ``` 40 | 41 | ## dhcp 42 | 43 | ```{.yaml linenums="1"} 44 | - dhcp://en0 45 | ``` 46 | 47 | Только для cmfa, использует системный dns 48 | 49 | ```{.yaml linenums="1"} 50 | - dhcp://system 51 | ``` 52 | 53 | ## rcode 54 | 55 | ```{.yaml linenums="1"} 56 | - rcode://success # Нет ошибки 57 | - rcode://format_error # Ошибка формата 58 | - rcode://server_failure # Ошибка сервера 59 | - rcode://name_error # Несуществующий домен 60 | - rcode://not_implemented # Не реализовано 61 | - rcode://refused # Запрос отклонен 62 | ``` -------------------------------------------------------------------------------- /docs/config/dns/type.md: -------------------------------------------------------------------------------- 1 | # 支持的类型 2 | 3 | ## UDP 4 | 5 | ```{.yaml linenums="1"} 6 | - 223.5.5.5 7 | - udp://223.5.5.5 8 | ``` 9 | 10 | ## TCP 11 | 12 | ```{.yaml linenums="1"} 13 | - tcp://8.8.8.8 14 | ``` 15 | 16 | ## DNS over TLS 17 | 18 | ```{.yaml linenums="1"} 19 | - tls://1.1.1.1 20 | ``` 21 | 22 | ## DNS over HTTPS 23 | 24 | ```{.yaml linenums="1"} 25 | - https://doh.pub/dns-query 26 | ``` 27 | 28 | ## DNS over QUIC 29 | 30 | ```{.yaml linenums="1"} 31 | - quic://dns.adguard.com:784 32 | ``` 33 | 34 | ## system 35 | 36 | ```{.yaml linenums="1"} 37 | - system:// 38 | - system 39 | ``` 40 | 41 | ## dhcp 42 | 43 | ```{.yaml linenums="1"} 44 | - dhcp://en0 45 | ``` 46 | 47 | 仅限 cmfa,使用系统 dns 48 | 49 | ```{.yaml linenums="1"} 50 | - dhcp://system 51 | ``` 52 | 53 | ## rcode 54 | 55 | ```{.yaml linenums="1"} 56 | - rcode://success # No error 57 | - rcode://format_error # Format error 58 | - rcode://server_failure # Server failure 59 | - rcode://name_error # Non-existent domain 60 | - rcode://not_implemented # Not implemented 61 | - rcode://refused # Query refused 62 | ``` 63 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/mixed.md: -------------------------------------------------------------------------------- 1 | # MIXED 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: mixed-in 6 | type: mixed 7 | port: 7892 8 | listen: 0.0.0.0 9 | udp: true 10 | users: 11 | - username: username1 12 | password: password1 13 | # 下面两项如果填写则开启 tls(需要同时填写) 14 | # certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径 15 | # private-key: ./server.key # 证书对应的私钥 PEM 格式,或者私钥路径 16 | # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空 17 | # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify" 18 | # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径 19 | # 如果填写则开启ech(可由 mihomo generate ech-keypair <明文域名> 生成) 20 | # ech-key: | 21 | # -----BEGIN ECH KEYS----- 22 | # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK 23 | # madSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz 24 | # dC5jb20AAA== 25 | # -----END ECH KEYS----- 26 | ``` 27 | 28 | ## [通用字段](./index.md) 29 | 30 | ## 协议配置 31 | 32 | ### udp 33 | 34 | 是否监听 UDP 35 | 36 | ### 用户验证 37 | 38 | 如果不填写 users 项,则遵从全局 [用户验证](../../general.md/#_2) 设置,如果填写会忽略全局设置,如想跳过该入站的验证可填写 users: [] 39 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/socks.md: -------------------------------------------------------------------------------- 1 | # SOCKS 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: socks-in 6 | type: socks 7 | port: 7891 8 | listen: 0.0.0.0 9 | udp: true 10 | users: 11 | - username: username1 12 | password: password1 13 | # 下面两项如果填写则开启 tls(需要同时填写) 14 | # certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径 15 | # private-key: ./server.key # 证书对应的私钥 PEM 格式,或者私钥路径 16 | # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空 17 | # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify" 18 | # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径 19 | # 如果填写则开启ech(可由 mihomo generate ech-keypair <明文域名> 生成) 20 | # ech-key: | 21 | # -----BEGIN ECH KEYS----- 22 | # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK 23 | # madSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz 24 | # dC5jb20AAA== 25 | # -----END ECH KEYS----- 26 | ``` 27 | 28 | ## [通用字段](./index.md) 29 | 30 | ## 协议配置 31 | 32 | ### udp 33 | 34 | 是否监听 UDP 35 | 36 | ### 用户验证 37 | 38 | 如果不填写 users 项,则遵从全局 [用户验证](../../general.md/#_2) 设置,如果填写会忽略全局设置,如想跳过该入站的验证可填写 users: [] 39 | -------------------------------------------------------------------------------- /docs/config/proxies/hysteria2.en.md: -------------------------------------------------------------------------------- 1 | # Hysteria2 2 | 3 | [Configuration Reference](https://hysteria.network/en/docs/advanced-usage/#client-side) 4 | 5 | ```{.yaml linenums="1"} 6 | proxies: 7 | - name: "hysteria2" 8 | type: hysteria2 9 | server: server.com 10 | port: 443 11 | ports: 443-8443 12 | password: yourpassword 13 | up: "30 Mbps" 14 | down: "200 Mbps" 15 | obfs: salamander # Default is empty; if filled, obfs is enabled. Currently, only salamander is supported. 16 | obfs-password: yourpassword 17 | 18 | sni: server.com 19 | skip-cert-verify: false 20 | fingerprint: xxxx 21 | alpn: 22 | - h3 23 | ``` 24 | 25 | [Common Fields](./index.md) 26 | 27 | [TLS Fields](./tls.md) 28 | 29 | ## Ports 30 | 31 | Configuring this enables port jumping, ignoring `port`. Refer to [Port Range](../../handbook/syntax.md#port-ranges) for format. 32 | 33 | ## Password 34 | 35 | Authentication password. 36 | 37 | ## Up/Down 38 | 39 | Brutal rate control; if no unit is specified, the default is Mbps. 40 | 41 | ## Obfs 42 | 43 | QUIC traffic obfuscator type, can only be set to `salamander`. If left empty, it is disabled. 44 | 45 | ## Obfs-password 46 | 47 | QUIC traffic obfuscator password. 48 | -------------------------------------------------------------------------------- /docs/config/tunnels.en.md: -------------------------------------------------------------------------------- 1 | # TUNNEL 2 | 3 | Flow forwarding tunnel, capable of forwarding TCP/UDP traffic, and can also be forwarded through a proxy. 4 | 5 | ```{.yaml linenums="1"} 6 | tunnels: 7 | - tcp/udp,127.0.0.1:6553,114.114.114.114:53,proxy 8 | - network: [tcp, udp] 9 | address: 127.0.0.1:7777 10 | target: target.com 11 | proxy: proxy 12 | ``` 13 | 14 | ## Single Line 15 | 16 | ```{.yaml linenums="1"} 17 | tunnels: 18 | - tcp/udp,127.0.0.1:6553,8.8.8.8:53,proxy 19 | ``` 20 | 21 | ## Multiple Lines 22 | 23 | ```{.yaml linenums="1"} 24 | tunnels: 25 | - network: [tcp, udp] 26 | address: 127.0.0.1:6553 27 | target: 8.8.8.8:53 28 | proxy: proxy 29 | ``` 30 | 31 | In the single line example, the order corresponds to the multiple lines: `network`/`address`/`target`/`proxy`. 32 | 33 | ### network 34 | 35 | The type of network to listen to, can be tcp/udp. 36 | 37 | ### address 38 | 39 | Local listening address. 40 | 41 | ### target 42 | 43 | The forwarding target address. 44 | 45 | ### proxy 46 | 47 | Optional, traffic sent through a specific `proxies`/`proxy-groups`. 48 | 49 | In the above example, accessing `127.0.0.1:6553` is forwarded through the `proxy` in the `proxies`/`proxy-groups` to access `8.8.8.8:53`. 50 | -------------------------------------------------------------------------------- /docs/config/proxies/vmess.md: -------------------------------------------------------------------------------- 1 | # VMess 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "vmess" 6 | type: vmess 7 | server: server 8 | port: 443 9 | udp: true 10 | uuid: uuid 11 | alterId: 0 12 | cipher: auto 13 | packet-encoding: packetaddr 14 | global-padding: false 15 | authenticated-length: false 16 | 17 | tls: true 18 | servername: example.com 19 | alpn: 20 | - h2 21 | - http/1.1 22 | fingerprint: xxxx 23 | client-fingerprint: chrome 24 | skip-cert-verify: true 25 | reality-opts: 26 | public-key: xxxx 27 | short-id: xxxx 28 | 29 | network: tcp 30 | 31 | smux: 32 | enabled: false 33 | ``` 34 | 35 | [通用字段](./index.md) 36 | 37 | [TLS 字段](./tls.md) 38 | 39 | ## uuid 40 | 41 | 必须,VMess 用户 ID 42 | 43 | ## alterId 44 | 45 | 必须,如果不为 0,则启用旧协议 46 | 47 | ## cipher 48 | 49 | 必须,加密方法,支持 `auto`/`none`/`zero`/`aes-128-gcm`/`chacha20-poly1305` 50 | 51 | ## packet-encoding 52 | 53 | UDP 包编码,为空则使用原始编码,可选 `packetaddr` (由 `v2ray 5+` 支持)/`xudp` (由 `xray` 支持) 54 | 55 | ## global-padding 56 | 57 | 协议参数。如果启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。 58 | 59 | ## authenticated-length 60 | 61 | 协议参数。启用长度块加密 62 | 63 | ## network 64 | 65 | 传输层,支持 ws/http/h2/grpc,不配置或配置其他值则为 tcp 66 | 67 | 参阅 [传输层配置](./transport.md) 68 | -------------------------------------------------------------------------------- /docs/config/proxies/trojan.ru.md: -------------------------------------------------------------------------------- 1 | # Trojan 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "trojan" 6 | type: trojan 7 | server: server 8 | port: 443 9 | password: yourpsk 10 | udp: true 11 | 12 | sni: example.com 13 | alpn: 14 | - h2 15 | - http/1.1 16 | client-fingerprint: random 17 | fingerprint: xxxx 18 | skip-cert-verify: true 19 | ss-opts: 20 | enabled: false 21 | method: aes-128-gcm 22 | password: "example" 23 | reality-opts: 24 | public-key: xxxx 25 | short-id: xxxx 26 | 27 | network: tcp 28 | 29 | smux: 30 | enabled: false 31 | ``` 32 | 33 | [Общие поля](./index.md) 34 | 35 | [Поля TLS](./tls.md) 36 | 37 | ## password 38 | 39 | Обязательно, пароль сервера trojan 40 | 41 | ## ss-opts 42 | 43 | ### ss-opfs.enabled 44 | 45 | Включить шифрование AEAD shadowsocks для trojan-go 46 | 47 | ### ss-opfs.method 48 | 49 | Метод шифрования, поддерживает aes-128-gcm/aes-256-gcm/chacha20-ietf-poly1305 50 | 51 | ### ss-opfs.password 52 | 53 | Пароль шифрования AEAD shadowsocks для trojan-go 54 | 55 | ## network 56 | 57 | Транспортный уровень, поддерживает ws/grpc, если не настроен или настроен с другим значением, используется tcp 58 | 59 | См. [Конфигурация транспортного уровня](./transport.md) -------------------------------------------------------------------------------- /docs/config/tunnels.ru.md: -------------------------------------------------------------------------------- 1 | # TUNNEL 2 | 3 | Туннель для переадресации трафика, способный пересылать трафик TCP/UDP, а также может передаваться через прокси. 4 | 5 | ```{.yaml linenums="1"} 6 | tunnels: 7 | - tcp/udp,127.0.0.1:6553,114.114.114.114:53,proxy 8 | - network: [tcp, udp] 9 | address: 127.0.0.1:7777 10 | target: target.com 11 | proxy: proxy 12 | ``` 13 | 14 | ## Однострочный вариант 15 | 16 | ```{.yaml linenums="1"} 17 | tunnels: 18 | - tcp/udp,127.0.0.1:6553,8.8.8.8:53,proxy 19 | ``` 20 | 21 | ## Многострочный вариант 22 | 23 | ```{.yaml linenums="1"} 24 | tunnels: 25 | - network: [tcp, udp] 26 | address: 127.0.0.1:6553 27 | target: 8.8.8.8:53 28 | proxy: proxy 29 | ``` 30 | 31 | В однострочном примере порядок соответствует многострочному варианту: `network`/`address`/`target`/`proxy`. 32 | 33 | ### network 34 | 35 | Тип сети для прослушивания, может быть tcp/udp. 36 | 37 | ### address 38 | 39 | Локальный адрес прослушивания. 40 | 41 | ### target 42 | 43 | Целевой адрес для переадресации. 44 | 45 | ### proxy 46 | 47 | Опционально, трафик отправляется через определенный `proxies`/`proxy-groups`. 48 | 49 | В примере выше, доступ к `127.0.0.1:6553` перенаправляется через `proxy` из `proxies`/`proxy-groups` для доступа к `8.8.8.8:53`. -------------------------------------------------------------------------------- /docs/config/sniff/index.md: -------------------------------------------------------------------------------- 1 | # 域名嗅探 2 | 3 | ```{.yaml linenums="1"} 4 | sniffer: 5 | enable: false 6 | force-dns-mapping: true 7 | parse-pure-ip: true 8 | override-destination: false 9 | sniff: 10 | HTTP: 11 | ports: [80, 8080-8880] 12 | override-destination: true 13 | TLS: 14 | ports: [443, 8443] 15 | QUIC: 16 | ports: [443, 8443] 17 | force-domain: 18 | - +.v2ex.com 19 | skip-domain: 20 | - Mijia Cloud 21 | skip-src-address: 22 | - 192.168.0.3/32 23 | skip-dst-address: 24 | - 192.168.0.3/32 25 | ``` 26 | 27 | ## enable 28 | 29 | 是否启用 sniffer 30 | 31 | ## force-dns-mapping 32 | 33 | 对 `redir-host` 类型识别的流量进行强制嗅探 34 | 35 | ## parse-pure-ip 36 | 37 | 对所有未获取到域名的流量进行强制嗅探 38 | 39 | ## override-destination 40 | 41 | 是否使用嗅探结果作为实际访问,默认为 true 42 | 43 | ## sniff 44 | 45 | 需要嗅探的协议设置,仅支持 `HTTP`/`TLS`/`QUIC` 46 | 47 | - `ports`: [端口范围](../../handbook/syntax.md#_14) 48 | - `override-destination`: 覆盖全局`override-destination`设置 49 | 50 | ## force-domain 51 | 52 | 强制进行嗅探的域名列表,使用[域名通配](../../handbook/syntax.md#_8) 53 | 54 | ## skip-domain 55 | 56 | 跳过嗅探的域名列表,使用[域名通配](../../handbook/syntax.md#_8) 57 | 58 | ## skip-src-address 59 | 60 | 跳过嗅探的来源 IP 段列表 61 | 62 | ## skip-dst-address 63 | 64 | 跳过嗅探的目标 IP 段列表 65 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy docs to GitHub Pages 2 | on: 3 | push: 4 | branches: 5 | - main 6 | concurrency: 7 | group: ${{ github.ref }}-${{ github.workflow }} 8 | cancel-in-progress: true 9 | 10 | jobs: 11 | deploy: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | with: 16 | fetch-depth: '0' 17 | - uses: actions/setup-python@v4 18 | with: 19 | python-version: 3.x 20 | cache: 'pip' 21 | - run: | 22 | echo "COMMIT_MSG=$(git rev-parse --short HEAD)" >> $GITHUB_ENV 23 | - run: pip install -r requirements.txt 24 | - run: mkdocs build 25 | - name: Git push assets to "gh-pages" branch 26 | run: | 27 | cd site || exit 1 28 | git init 29 | git config --local user.name "github-actions[bot]" 30 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 31 | git checkout -b gh-pages 32 | git add . 33 | git commit -m "Deployed ${{ env.COMMIT_MSG }}" 34 | git remote add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 35 | git push -f -u origin gh-pages 36 | -------------------------------------------------------------------------------- /docs/config/proxies/hysteria2.md: -------------------------------------------------------------------------------- 1 | # Hysteria2 2 | 3 | [配置参考](https://hysteria.network/zh/docs/advanced-usage/#%e5%ae%a2%e6%88%b7%e7%ab%af) 4 | 5 | ```{.yaml linenums="1"} 6 | proxies: 7 | - name: "hysteria2" 8 | type: hysteria2 9 | server: server.com 10 | port: 443 11 | ports: 443-8443 12 | password: yourpassword 13 | up: "30 Mbps" 14 | down: "200 Mbps" 15 | obfs: salamander # 默认为空,如果填写则开启obfs,目前仅支持salamander 16 | obfs-password: yourpassword 17 | 18 | sni: server.com 19 | skip-cert-verify: false 20 | fingerprint: xxxx # 配置指纹将实现 SSL Pining 效果, 可使用 openssl x509 -noout -fingerprint -sha256 -inform pem -in yourcert.pem 获取 21 | alpn: 22 | - h3 23 | ###quic-go特殊配置项,不要随意修改除非你知道你在干什么### 24 | # initial-stream-receive-window: 8388608 25 | # max-stream-receive-window: 8388608 26 | # initial-connection-receive-window: 20971520 27 | # max-connection-receive-window: 20971520 28 | ``` 29 | 30 | [通用字段](./index.md) 31 | 32 | [TLS 字段](./tls.md) 33 | 34 | ## ports 35 | 36 | 配置则启用端口跳跃,忽略`port`,格式参考[端口范围](../../handbook/syntax.md#_14) 37 | 38 | ## password 39 | 40 | 认证密码 41 | 42 | ## up/down 43 | 44 | brutal 速率控制,若不写单位,默认为 Mbps 45 | 46 | ## obfs 47 | 48 | QUIC 流量混淆器类型,仅可设为 `salamander`,如果为空则禁用 49 | 50 | ## obfs-password 51 | 52 | QUIC 流量混淆器密码 53 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/anytls.md: -------------------------------------------------------------------------------- 1 | # AnyTLS 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: anytls-in-1 6 | type: anytls 7 | port: 10818 8 | listen: 0.0.0.0 9 | users: 10 | username1: password1 11 | username2: password2 12 | certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径 13 | private-key: ./server.key # 证书对应的私钥 PEM 格式,或者私钥路径 14 | # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空 15 | # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify" 16 | # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径 17 | # 如果填写则开启ech(可由 mihomo generate ech-keypair <明文域名> 生成) 18 | # ech-key: | 19 | # -----BEGIN ECH KEYS----- 20 | # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK 21 | # madSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz 22 | # dC5jb20AAA== 23 | # -----END ECH KEYS----- 24 | padding-scheme: "" # https://github.com/anytls/anytls-go/blob/main/docs/protocol.md#cmdupdatepaddingscheme 25 | ``` 26 | 27 | [通用字段](./index.md) 28 | 29 | !!! warning "" 30 | `certificate` 和 `private-key` 是必要的 31 | 32 | ## padding-scheme 33 | 34 | 参阅 https://github.com/anytls/anytls-go/blob/main/docs/protocol.md#cmdupdatepaddingscheme 35 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/index.ru.md: -------------------------------------------------------------------------------- 1 | # LISTENERS 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: in-name 6 | type: shadowsocks 7 | port: 10000 8 | listen: 0.0.0.0 9 | rule: sub-rule-1 10 | proxy: proxy 11 | ``` 12 | 13 | ## name 14 | 15 | Имя входящего соединения, может использоваться для сопоставления с [`правилами входящих соединений`](../../rules/index.md#in-name) 16 | 17 | ## type 18 | 19 | Тип входящего соединения 20 | 21 | ## listen 22 | 23 | Адрес прослушивания 24 | 25 | ## port 26 | 27 | Порт прослушивания, поддерживает формат ports, формат описан в [диапазон портов](../../../handbook//syntax.md#_14) 28 | 29 | ## rule 30 | 31 | Использует [`подправила`](../../sub-rule.md) в качестве правил маршрутизации для входящих соединений. Если пусто, по умолчанию используются [`rules`](../../rules/index.md). Если [`подправила`](../../sub-rule.md) не найдены, напрямую используются [`rules`](../../rules/index.md) 32 | 33 | ## proxy 34 | 35 | Использует [`исходящий прокси`](../../proxies/index.md) или [`группу политик`](../../proxy-groups/index.md) напрямую для исходящих соединений. Если пусто, по умолчанию используются [`rules`](../../rules/index.md) 36 | 37 | !!! warning "" 38 | Когда `proxy` не пусто, имя `proxy` должно быть корректным, иначе возникнет ошибка -------------------------------------------------------------------------------- /docs/config/inbound/listeners/ss.ru.md: -------------------------------------------------------------------------------- 1 | # ShadowSocks 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: ss-in 6 | type: shadowsocks 7 | port: 10001 8 | listen: 0.0.0.0 9 | cipher: 2022-blake3-aes-256-gcm 10 | password: vlmpIPSyHH6f4S8WVPdRIHIlzmB+GIRfoH3aNJ/t9Gg= 11 | udp: true 12 | ``` 13 | 14 | ## [Общие поля](./index.md) 15 | 16 | ## Настройка протокола 17 | 18 | ### cipher 19 | 20 | Метод шифрования 21 | 22 | | Метод | Длина пароля | 23 | | ----------------------------- | -------- | 24 | | 2022-blake3-aes-128-gcm | 16 | 25 | | 2022-blake3-aes-256-gcm | 32 | 26 | | 2022-blake3-chacha20-poly1305 | 32 | 27 | | none | / | 28 | | aes-128-gcm | / | 29 | | aes-192-gcm | / | 30 | | aes-256-gcm | / | 31 | | chacha20-ietf-poly1305 | / | 32 | | xchacha20-ietf-poly1305 | / | 33 | 34 | ### password 35 | 36 | | Метод | Формат пароля | 37 | | ---- | ------------------------------------ | 38 | | none | / | 39 | | 2022 | `openssl rand --base64 <длина пароля>` | 40 | | другие | любая строка | 41 | 42 | ### udp 43 | 44 | Прослушивать ли UDP -------------------------------------------------------------------------------- /docs/config/rule-providers/index.md: -------------------------------------------------------------------------------- 1 | # rule-provider 2 | 3 | ```{.yaml linenums="1"} 4 | rule-providers: 5 | google: 6 | type: http 7 | path: ./rule1.yaml 8 | url: "https://raw.githubusercontent.com/../Google.yaml" 9 | interval: 600 10 | proxy: DIRECT 11 | behavior: classical 12 | format: yaml 13 | size-limit: 0 14 | payload: 15 | - 'DOMAIN-SUFFIX,google.com' 16 | ``` 17 | 18 | ## name 19 | 20 | 必须,如`google`,不能重复 21 | 22 | ## type 23 | 24 | 必须,`provider`类型,可选`http` / `file` / `inline` 25 | 26 | ## url 27 | 28 | 类型为`http`则必须配置 29 | 30 | ## path 31 | 32 | 可选,文件路径,不可重复,不填写时会使用 url 的 MD5 作为此文件的文件名 33 | 34 | 由于安全问题,此路径将限制只允许在 `HomeDir`(有启动参数 -d 配置) 中,如果想存储到其他位置,请通过设置 `SAFE_PATHS` 环境变量指定额外的安全路径。该环境变量的语法同本操作系统的PATH环境变量解析规则(即Windows下以分号分割,其他系统下以冒号分割) 35 | 36 | ## interval 37 | 38 | 更新`provider`的时间,单位为秒 39 | 40 | ## proxy 41 | 42 | 经过指定代理进行下载/更新 43 | 44 | ## behavior 45 | 46 | 行为,可选`domain`/`ipcidr`/`classical`,对应不同格式的 rule-provider 文件格式,请按实际格式填写 47 | 48 | ## format 49 | 50 | 格式,可选 `yaml`/`text`/`mrs`,默认 `yaml` 51 | 52 | `mrs`目前 `behavior` 仅支持 `domain`/`ipcidr`,可以通过`mihomo convert-ruleset domain/ipcidr yaml/text XXX.yaml XXX.mrs`转换得到 53 | 54 | ## size-limit 55 | 56 | 限制下载文件的最大大小,默认为 0 即不限制文件大小,单位为字节 (`b`) 57 | 58 | ## payload 59 | 60 | 内容,仅 `type` 为 `inline` 时生效 61 | -------------------------------------------------------------------------------- /docs/config/rule-providers/content.md: -------------------------------------------------------------------------------- 1 | # rule-providers 文件内容 2 | 3 | ## classical 4 | 5 | `classical` 支持[路由规则](../rules/index.md)的全部类型 (rule-set/sub-rule 除外) 6 | 7 | === "yaml" 8 | ```{.yaml linenums="1"} 9 | payload: 10 | - DOMAIN-SUFFIX,google.com 11 | - DOMAIN-KEYWORD,google 12 | - DOMAIN,ad.com 13 | - SRC-IP-CIDR,192.168.1.201/32 14 | - IP-CIDR,127.0.0.0/8 15 | - GEOIP,CN 16 | - DST-PORT,80 17 | - SRC-PORT,7777 18 | ``` 19 | 20 | === "text" 21 | ```text 22 | DOMAIN-SUFFIX,google.com 23 | DOMAIN-KEYWORD,google 24 | DOMAIN,ad.com 25 | SRC-IP-CIDR,192.168.1.201/32 26 | IP-CIDR,127.0.0.0/8 27 | GEOIP,CN 28 | DST-PORT,80 29 | SRC-PORT,7777 30 | ``` 31 | 32 | ## domain 33 | 34 | `domain`类规则集合内容通配应遵守[clash 通配符](../../handbook/syntax.md#_8) 35 | 36 | === "yaml" 37 | ```{.yaml linenums="1"} 38 | payload: 39 | - '.blogger.com' 40 | - '*.*.microsoft.com' 41 | - 'books.itunes.apple.com' 42 | ``` 43 | 44 | === "text" 45 | ```text 46 | .blogger.com 47 | *.*.microsoft.com 48 | books.itunes.apple.com 49 | ``` 50 | 51 | ## ipcidr 52 | 53 | === "yaml" 54 | ```{.yaml linenums="1"} 55 | payload: 56 | - '192.168.1.0/24' 57 | - '10.0.0.0.1/32' 58 | ``` 59 | 60 | === "text" 61 | ```text 62 | 192.168.1.0/24 63 | 10.0.0.0.1/32 64 | ``` 65 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/vmess.ru.md: -------------------------------------------------------------------------------- 1 | # VMESS 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: vmess-in-1 6 | type: vmess 7 | port: 10814 # поддерживает формат ports, например 200,302 или 200,204,401-429,501-503 8 | listen: 0.0.0.0 9 | # rule: sub-rule-name1 # по умолчанию использует rules, если sub-rule не найдено, то напрямую использует rules 10 | # proxy: proxy # если не пусто, то входящий трафик напрямую передается указанному proxy (когда proxy не пусто, имя proxy должно быть корректным, иначе возникнет ошибка) 11 | users: 12 | - username: 1 13 | uuid: 9d0cb9d0-964f-4ef6-897d-6c6b3ccf9e68 14 | alterId: 1 15 | # ws-path: "/" # если не пусто, то включается транспортный уровень websocket 16 | # grpc-service-name: "GunService" # если не пусто, то включается транспортный уровень grpc 17 | # следующие два параметра, если заполнены, включают tls (необходимо заполнить оба) 18 | # certificate: ./server.crt 19 | # private-key: ./server.key 20 | # если заполнен reality-config, то включается reality (не может использоваться одновременно с certificate и private-key) 21 | # reality-config: 22 | # dest: test.com:443 23 | # private-key: jNXHt1yRo0vDuchQlIP6Z0ZvjT3KtzVI-T4E7RoLJS0 # можно сгенерировать командой mihomo generate reality-keypair 24 | # short-id: 25 | # - 0123456789abcdef 26 | # server-names: 27 | # - test.com 28 | ``` -------------------------------------------------------------------------------- /docs/config/proxy-providers/content.md: -------------------------------------------------------------------------------- 1 | # proxy-providers 文件内容 2 | 3 | === "yaml" 4 | ```{.yaml linenums="1"} 5 | proxies: 6 | - name: "ss1" 7 | type: ss 8 | server: server 9 | port: 443 10 | cipher: chacha20-ietf-poly1305 11 | password: "password" 12 | - name: "ss2" 13 | type: ss 14 | server: server 15 | port: 443 16 | cipher: chacha20-ietf-poly1305 17 | password: "password" 18 | ``` 19 | 20 | === "uri" 21 | ```{.yaml linenums="1"} 22 | ss://YWVzLTI1Ni1nY206bWV0YUAxMjcuMC4wLjE6NDQz#home 23 | vmess://eyJhZGQiOiIxMjcuMC4wLjEiLCJhaWQiOiIwIiwiYWxwbiI6IiIsImZwIjoiIiwiaG9zdCI6IiIsImlkIjoiMTIyMzQ1Njc4OSIsIm5ldCI6InRjcCIsInBhdGgiOiIiLCJwb3J0IjoiNDQzIiwicHMiOiJ2bWVzcyIsInNjeSI6ImF1dG8iLCJzbmkiOiIiLCJ0bHMiOiIiLCJ0eXBlIjoibm9uZSIsInYiOiIyIn0= 24 | ``` 25 | 26 | === "base64" 27 | ```{.text linenums="1"} 28 | c3M6Ly9ZV1Z6TFRJMU5pMW5ZMjA2YldWMFlVQXhNamN1TUM0d0xqRTZORFF6I2hvbWUKdm1lc3M6Ly9leUpoWkdRaU9pSXhNamN1TUM0d0xqRWlMQ0poYVdRaU9pSXdJaXdpWVd4d2JpSTZJaUlzSW1ad0lqb2lJaXdpYUc5emRDSTZJaUlzSW1sa0lqb2lNVEl5TXpRMU5qYzRPU0lzSW01bGRDSTZJblJqY0NJc0luQmhkR2dpT2lJaUxDSndiM0owSWpvaU5EUXpJaXdpY0hNaU9pSjJiV1Z6Y3lJc0luTmplU0k2SW1GMWRHOGlMQ0p6Ym1raU9pSWlMQ0owYkhNaU9pSWlMQ0owZVhCbElqb2libTl1WlNJc0luWWlPaUl5SW4wPQ== 29 | ``` 30 | 31 | !!! note 32 | base64 的 uri 通常为提供商提供给 v2ray/xray 的订阅链接内容 33 | 34 | `YAML`/`uri`/`base64`不可写在同一文件,`uri`/`base64`不需要`proxies:`字段,直接书写即可 35 | -------------------------------------------------------------------------------- /docs/config/rule-providers/content.en.md: -------------------------------------------------------------------------------- 1 | # Contents of the rule-providers file 2 | 3 | ## classical 4 | 5 | The `classical` type supports all types of [routing rules](../rules/index.md) (except for rule-set/sub-rule). 6 | 7 | === "yaml" 8 | ```{.yaml linenums="1"} 9 | payload: 10 | - DOMAIN-SUFFIX,google.com 11 | - DOMAIN-KEYWORD,google 12 | - DOMAIN,ad.com 13 | - SRC-IP-CIDR,192.168.1.201/32 14 | - IP-CIDR,127.0.0.0/8 15 | - GEOIP,CN 16 | - DST-PORT,80 17 | - SRC-PORT,7777 18 | ``` 19 | 20 | === "text" 21 | ```text 22 | DOMAIN-SUFFIX,google.com 23 | DOMAIN-KEYWORD,google 24 | DOMAIN,ad.com 25 | SRC-IP-CIDR,192.168.1.201/32 26 | IP-CIDR,127.0.0.0/8 27 | GEOIP,CN 28 | DST-PORT,80 29 | SRC-PORT,7777 30 | ``` 31 | 32 | ## domain 33 | 34 | The content of the `domain` rule set must adhere to the [clash wildcard](../../handbook/syntax.md#domain-wildcards). 35 | 36 | === "yaml" 37 | ```{.yaml linenums="1"} 38 | payload: 39 | - '.blogger.com' 40 | - '*.*.microsoft.com' 41 | - 'books.itunes.apple.com' 42 | ``` 43 | 44 | === "text" 45 | ```text 46 | .blogger.com 47 | *.*.microsoft.com 48 | books.itunes.apple.com 49 | ``` 50 | 51 | ## ipcidr 52 | 53 | === "yaml" 54 | ```{.yaml linenums="1"} 55 | payload: 56 | - '192.168.1.0/24' 57 | - '10.0.0.0.1/32' 58 | ``` 59 | 60 | === "text" 61 | ```text 62 | 192.168.1.0/24 63 | 10.0.0.0.1/32 64 | ``` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Meta-Docs 2 | 3 | [mihomo](https://github.com/MetaCubeX/mihomo/tree/Alpha) 的文档 4 | 5 | ## 使用方法 6 | 7 | ### 设置虚拟环境 8 | 9 | 部分操作系统 python3.11 以上依赖虚拟环境运行,不能直接运行 10 | 11 | ##### 安装 virtualenv 12 | 13 | * debian 14 | * bash/zsh/fish 15 | 16 | ```bash 17 | apt update && apt install virtualenv 18 | ``` 19 | 20 | * nushell 21 | 22 | ```nushell 23 | apt update ; apt install virtualenv 24 | ``` 25 | 26 | * archlinux 27 | 28 | ```bash 29 | pacman -Syu python-virtualenv 30 | ``` 31 | 32 | ##### 创建虚拟环境 33 | 34 | ```bash 35 | virtualenv venv 36 | ``` 37 | 38 | ##### 使用虚拟环境 39 | 40 | * bash/zsh 41 | 42 | ```bash 43 | source venv/bin/activate 44 | ``` 45 | 46 | * nushell 47 | 48 | ```nushell 49 | use venv/bin/activate.nu 50 | ``` 51 | 52 | * fish 53 | 54 | ```bash 55 | source venv/bin/activate.fish 56 | ``` 57 | 58 | ##### 退出虚拟环境 59 | 60 | ```bash 61 | deactivate 62 | ``` 63 | 64 | ##### 确认是否处于虚拟环境 65 | 66 | ```bash 67 | which python3 68 | ``` 69 | 70 | ### 设置源 71 | 72 | ```bash 73 | pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 74 | ``` 75 | 76 | ### 安装依赖 77 | 78 | ```bash 79 | pip install -r requirements.txt 80 | ``` 81 | 82 | ### 预览修改 83 | 84 | ```bash 85 | mkdocs serve 86 | ``` 87 | 88 | ### 参考文档 89 | 90 | 91 | 92 | 93 | 推荐使用 [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) 对文档进行格式化。 94 | -------------------------------------------------------------------------------- /docs/startup/faq.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | # - navigation 4 | - toc 5 | --- 6 | # 常见问题 7 | 8 | ## alpha 和 meta 分支的区别 9 | 10 | alpha 分支为最新提交分支,meta 分支每隔一段时间合并 alpha 分支的代码,meta 分支不一定比 alpha 分支更稳定。 11 | 12 | ## 我应该下载哪一个文件? 13 | 14 | release 中,包的文件名中包含了多个信息,包括 15 | 16 | * 程序名称 (`mihomo`) 17 | * 操作系统(如 android、darwin、freebsd、linux、windows 等) 18 | * 架构(如 386、amd64、arm32v7、arm64 等) 19 | * 编译方式 20 | > 21 | > * `v1/2/3`:仅适用于AMD64平台,用于标记[CPU指令集等级](https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels) 22 | > * ~~`默认(无额外标识)`: 使用 GOAMD64=v3 标签编译的默认版本~~ 23 | > * ~~`compatible`: 使用 GOAMD64=v1 标签进行编译。该版本是为了兼容特定的操作系统或架构而编译的。~~ 24 | > * `go120`: 使用 Golang1.20 版本进行编译。该版本是为了兼容特定的操作系统或架构而编译的。 25 | > * `abi1/2`: `loongarch64`的 abi 版本 26 | > 27 | * 分支(alpha) 28 | * 提交的 git hash 值(如 f90066f) 29 | 30 | 可以根据这些信息选择你需要下载的可执行文件。 31 | 32 | 👉[在此了解](https://go.dev/wiki/MinimumRequirements#amd64)更多关于 GOAMD64 标签的信息 33 | 34 | 👉[在此了解](https://go.dev/doc/go1.20#ports)更多关于 Golang1.20 版本的系统兼容性信息 35 | 36 | 👉[在此了解](http://www.loongnix.cn/zh/toolchain/Golang/downloads-Go1.21/index.html)更多关于`loongarch64`abi 版本的信息 37 | 38 | 对于macos用户:根据[go wiki](https://go.dev/doc/go1.25#darwin),go1.25开始不再支持macos11,请macos11用户下载带有`go124`标签的二进制文件,macos10.15用户下载带有`go122`标签的二进制文件,macoc10.13用户下载带有`go120`标签的二进制文件 39 | 40 | 对于windows用户:目前官方构建的所有版本均支持win7及更高版本的系统(非官方构建不保证这一点,我们通过维护[自己fork版本的golang](https://github.com/MetaCubeX/go)来编译) 41 | 42 | 对于linux用户:根据[go wiki](https://go.dev/doc/go1.24#linux),go1.24开始仅支持3.2+版本内核,请2.6.32~3.1版本内核用户下载带有`go123`标签的二进制文件 43 | -------------------------------------------------------------------------------- /docs/config/rule-providers/content.ru.md: -------------------------------------------------------------------------------- 1 | # Содержимое файла rule-providers 2 | 3 | ## classical 4 | 5 | Тип `classical` поддерживает все типы [правил маршрутизации](../rules/index.md) (кроме rule-set/sub-rule). 6 | 7 | === "yaml" 8 | ```{.yaml linenums="1"} 9 | payload: 10 | - DOMAIN-SUFFIX,google.com 11 | - DOMAIN-KEYWORD,google 12 | - DOMAIN,ad.com 13 | - SRC-IP-CIDR,192.168.1.201/32 14 | - IP-CIDR,127.0.0.0/8 15 | - GEOIP,CN 16 | - DST-PORT,80 17 | - SRC-PORT,7777 18 | ``` 19 | 20 | === "text" 21 | ```text 22 | DOMAIN-SUFFIX,google.com 23 | DOMAIN-KEYWORD,google 24 | DOMAIN,ad.com 25 | SRC-IP-CIDR,192.168.1.201/32 26 | IP-CIDR,127.0.0.0/8 27 | GEOIP,CN 28 | DST-PORT,80 29 | SRC-PORT,7777 30 | ``` 31 | 32 | ## domain 33 | 34 | Содержимое набора правил `domain` должно соответствовать [подстановочным знакам clash](../../handbook/syntax.ru.md#подстановочные-знаки-для-доменов). 35 | 36 | === "yaml" 37 | ```{.yaml linenums="1"} 38 | payload: 39 | - '.blogger.com' 40 | - '*.*.microsoft.com' 41 | - 'books.itunes.apple.com' 42 | ``` 43 | 44 | === "text" 45 | ```text 46 | .blogger.com 47 | *.*.microsoft.com 48 | books.itunes.apple.com 49 | ``` 50 | 51 | ## ipcidr 52 | 53 | === "yaml" 54 | ```{.yaml linenums="1"} 55 | payload: 56 | - '192.168.1.0/24' 57 | - '10.0.0.0.1/32' 58 | ``` 59 | 60 | === "text" 61 | ```text 62 | 192.168.1.0/24 63 | 10.0.0.0.1/32 64 | ``` -------------------------------------------------------------------------------- /docs/config/proxies/hysteria2.ru.md: -------------------------------------------------------------------------------- 1 | # Hysteria2 2 | 3 | [Справочная конфигурация](https://hysteria.network/zh/docs/advanced-usage/#%e5%ae%a2%e6%88%b7%e7%ab%af) 4 | 5 | ```{.yaml linenums="1"} 6 | proxies: 7 | - name: "hysteria2" 8 | type: hysteria2 9 | server: server.com 10 | port: 443 11 | ports: 443-8443 12 | password: yourpassword 13 | up: "30 Mbps" 14 | down: "200 Mbps" 15 | obfs: salamander # по умолчанию пусто, если указать - включается obfs, в настоящее время поддерживается только salamander 16 | obfs-password: yourpassword 17 | 18 | sni: server.com 19 | skip-cert-verify: false 20 | fingerprint: xxxx 21 | alpn: 22 | - h3 23 | ###специальные настройки quic-go, не изменяйте без необходимости, если не знаете, что делаете### 24 | # initial-stream-receive-window: 8388608 25 | # max-stream-receive-window: 8388608 26 | # initial-connection-receive-window: 20971520 27 | # max-connection-receive-window: 20971520 28 | ``` 29 | 30 | [Общие поля](./index.md) 31 | 32 | [Поля TLS](./tls.md) 33 | 34 | ## ports 35 | 36 | При настройке включает прыжки по портам, игнорирует `port`, формат описан в [диапазон портов](../../handbook/syntax.md#_14) 37 | 38 | ## password 39 | 40 | Пароль аутентификации 41 | 42 | ## up/down 43 | 44 | Управление скоростью brutal, если единица измерения не указана, по умолчанию в Mbps 45 | 46 | ## obfs 47 | 48 | Тип маскировки трафика QUIC, можно установить только `salamander`, если пусто, то отключено 49 | 50 | ## obfs-password 51 | 52 | Пароль для маскировки трафика QUIC 53 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/vless.ru.md: -------------------------------------------------------------------------------- 1 | # VLESS 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: vless-in-1 6 | type: vless 7 | port: 10817 # поддерживает формат ports, например 200,302 или 200,204,401-429,501-503 8 | listen: 0.0.0.0 9 | # rule: sub-rule-name1 # по умолчанию использует rules, если sub-rule не найдено, то напрямую использует rules 10 | # proxy: proxy # если не пусто, то входящий трафик напрямую передается указанному proxy (когда proxy не пусто, имя proxy должно быть корректным, иначе возникнет ошибка) 11 | users: 12 | - username: 1 13 | uuid: 9d0cb9d0-964f-4ef6-897d-6c6b3ccf9e68 14 | flow: xtls-rprx-vision 15 | # ws-path: "/" # если не пусто, то включается транспортный уровень websocket 16 | # grpc-service-name: "GunService" # если не пусто, то включается транспортный уровень grpc 17 | # следующие два параметра, если заполнены, включают tls (необходимо заполнить оба) 18 | # certificate: ./server.crt 19 | # private-key: ./server.key 20 | # если заполнен reality-config, то включается reality (не может использоваться одновременно с certificate и private-key) 21 | reality-config: 22 | dest: test.com:443 23 | private-key: jNXHt1yRo0vDuchQlIP6Z0ZvjT3KtzVI-T4E7RoLJS0 # можно сгенерировать командой mihomo generate reality-keypair 24 | short-id: 25 | - 0123456789abcdef 26 | server-names: 27 | - test.com 28 | ### Примечание: для vless listener необходимо заполнить по крайней мере один из параметров: "certificate и private-key" или "reality-config" ### 29 | ``` -------------------------------------------------------------------------------- /docs/config/proxy-providers/content.en.md: -------------------------------------------------------------------------------- 1 | # Content of the proxy-providers file 2 | 3 | === "yaml" 4 | ```{.yaml linenums="1"} 5 | proxies: 6 | - name: "ss1" 7 | type: ss 8 | server: server 9 | port: 443 10 | cipher: chacha20-ietf-poly1305 11 | password: "password" 12 | - name: "ss2" 13 | type: ss 14 | server: server 15 | port: 443 16 | cipher: chacha20-ietf-poly1305 17 | password: "password" 18 | ``` 19 | 20 | === "uri" 21 | ```{.yaml linenums="1"} 22 | ss://YWVzLTI1Ni1nY206bWV0YUAxMjcuMC4wLjE6NDQz#home 23 | vmess://eyJhZGQiOiIxMjcuMC4wLjEiLCJhaWQiOiIwIiwiYWxwbiI6IiIsImZwIjoiIiwiaG9zdCI6IiIsImlkIjoiMTIyMzQ1Njc4OSIsIm5ldCI6InRjcCIsInBhdGgiOiIiLCJwb3J0IjoiNDQzIiwicHMiOiJ2bWVzcyIsInNjeSI6ImF1dG8iLCJzbmkiOiIiLCJ0bHMiOiIiLCJ0eXBlIjoibm9uZSIsInYiOiIyIn0= 24 | ``` 25 | 26 | === "base64" 27 | ```{.text linenums="1"} 28 | c3M6Ly9ZV1Z6TFRJMU5pMW5ZMjA2YldWMFlVQXhNamN1TUM0d0xqRTZORFF6I2hvbWUKdm1lc3M6Ly9leUpoWkdRaU9pSXhNamN1TUM0d0xqRWlMQ0poYVdRaU9pSXdJaXdpWVd4d2JpSTZJaUlzSW1ad0lqb2lJaXdpYUc5emRDSTZJaUlzSW1sa0lqb2lNVEl5TXpRMU5qYzRPU0lzSW01bGRDSTZJblJqY0NJc0luQmhkR2dpT2lJaUxDSndiM0owSWpvaU5EUXpJaXdpY0hNaU9pSjJiV1Z6Y3lJc0luTmplU0k2SW1GMWRHOGlMQ0p6Ym1raU9pSWlMQ0owYkhNaU9pSWlMQ0owZVhCbElqb2libTl1WlNJc0luWWlPaUl5SW4wPQ== 29 | ``` 30 | 31 | !!! note 32 | The base64 URI is typically the subscription link content provided by the provider for v2ray/xray. 33 | 34 | `YAML`/`uri`/`base64` cannot be written in the same file; `uri`/`base64` do not require the `proxies:` field and can be written directly. -------------------------------------------------------------------------------- /docs/config/proxy-providers/content.ru.md: -------------------------------------------------------------------------------- 1 | # Содержимое файла proxy-providers 2 | 3 | === "yaml" 4 | ```{.yaml linenums="1"} 5 | proxies: 6 | - name: "ss1" 7 | type: ss 8 | server: server 9 | port: 443 10 | cipher: chacha20-ietf-poly1305 11 | password: "password" 12 | - name: "ss2" 13 | type: ss 14 | server: server 15 | port: 443 16 | cipher: chacha20-ietf-poly1305 17 | password: "password" 18 | ``` 19 | 20 | === "uri" 21 | ```{.yaml linenums="1"} 22 | ss://YWVzLTI1Ni1nY206bWV0YUAxMjcuMC4wLjE6NDQz#home 23 | vmess://eyJhZGQiOiIxMjcuMC4wLjEiLCJhaWQiOiIwIiwiYWxwbiI6IiIsImZwIjoiIiwiaG9zdCI6IiIsImlkIjoiMTIyMzQ1Njc4OSIsIm5ldCI6InRjcCIsInBhdGgiOiIiLCJwb3J0IjoiNDQzIiwicHMiOiJ2bWVzcyIsInNjeSI6ImF1dG8iLCJzbmkiOiIiLCJ0bHMiOiIiLCJ0eXBlIjoibm9uZSIsInYiOiIyIn0= 24 | ``` 25 | 26 | === "base64" 27 | ```{.text linenums="1"} 28 | c3M6Ly9ZV1Z6TFRJMU5pMW5ZMjA2YldWMFlVQXhNamN1TUM0d0xqRTZORFF6I2hvbWUKdm1lc3M6Ly9leUpoWkdRaU9pSXhNamN1TUM0d0xqRWlMQ0poYVdRaU9pSXdJaXdpWVd4d2JpSTZJaUlzSW1ad0lqb2lJaXdpYUc5emRDSTZJaUlzSW1sa0lqb2lNVEl5TXpRMU5qYzRPU0lzSW01bGRDSTZJblJqY0NJc0luQmhkR2dpT2lJaUxDSndiM0owSWpvaU5EUXpJaXdpY0hNaU9pSjJiV1Z6Y3lJc0luTmplU0k2SW1GMWRHOGlMQ0p6Ym1raU9pSWlMQ0owYkhNaU9pSWlMQ0owZVhCbElqb2libTl1WlNJc0luWWlPaUl5SW4wPQ== 29 | ``` 30 | 31 | !!! note 32 | URI в формате base64 обычно является содержимым ссылки подписки, предоставляемой провайдером для v2ray/xray. 33 | 34 | `YAML`/`uri`/`base64` не могут быть записаны в одном файле; `uri`/`base64` не требуют поля `proxies:` и могут быть записаны напрямую. -------------------------------------------------------------------------------- /docs/config/proxies/tuic.md: -------------------------------------------------------------------------------- 1 | # TUIC 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: tuic 6 | server: www.example.com 7 | port: 10443 8 | type: tuic 9 | token: TOKEN 10 | uuid: 00000000-0000-0000-0000-000000000001 11 | password: PASSWORD_1 12 | # ip: 127.0.0.1 13 | # heartbeat-interval: 10000 14 | # alpn: [h3] 15 | disable-sni: true 16 | reduce-rtt: true 17 | request-timeout: 8000 18 | udp-relay-mode: native 19 | # congestion-controller: bbr 20 | # max-udp-relay-packet-size: 1500 21 | # fast-open: true 22 | # skip-cert-verify: true 23 | # max-open-streams: 20 24 | # sni: example.com 25 | ``` 26 | 27 | [通用字段](./index.md) 28 | 29 | [TLS 字段](./tls.md) 30 | 31 | ## token 32 | 33 | 必须,用于 TUIC V4 的用户标识,使用 TUIC V5 时不可书写 34 | 35 | ## uuid 36 | 37 | 必须,用于 TUICV5 的用户唯一识别码,使用 TUIC V4 时不可书写 38 | 39 | ## password 40 | 41 | 必须,用于 TUICV5 的用户密码,使用 TUIC V4 时不可书写 42 | 43 | ## ip 44 | 45 | 用于覆盖“server”选项中设置的服务器地址的 DNS 查找结果 46 | 47 | ## heartbeat-interval 48 | 49 | 发送保持连接活动的心跳包的间隔时间,单位为毫秒 50 | 51 | ## disable-sni 52 | 53 | 设置是否在 TLS 握手中禁用 SNI(服务器名称指示)SNI 用于在同一 IP 地址上承载多个 HTTPS 站点 54 | 55 | ## reduce-rtt 56 | 57 | 设置是否在客户端启用 QUIC 的 0-RTT 握手这可以减少连接建立时间,但可能增加重放攻击的风险 58 | 59 | ## request-timeout 60 | 61 | 设置建立到 TUIC 代理服务器的连接的超时时间,单位为毫秒 62 | 63 | ## udp-relay-mode 64 | 65 | 设置 UDP 数据包中继模式,可以是 `native`/`quic` 66 | 67 | ## congestion-controller 68 | 69 | 设置拥塞控制算法,可选项为 `cubic`/`new_reno`/`bbr` 70 | 71 | ## max-udp-relay-packet-size 72 | 73 | 设置最大的 UDP 数据包中继大小,单位为字节 74 | 75 | ## fast-open 76 | 77 | 设置是否启用 Fast Open,这可以减少连接建立时间 78 | 79 | ## max-open-streams 80 | 81 | 设置最大打开流的数量过多的打开流可能会影响性能 82 | -------------------------------------------------------------------------------- /docs/config/proxies/vmess.ru.md: -------------------------------------------------------------------------------- 1 | # VMess 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "vmess" 6 | type: vmess 7 | server: server 8 | port: 443 9 | udp: true 10 | uuid: uuid 11 | alterId: 0 12 | cipher: auto 13 | packet-encoding: packetaddr 14 | global-padding: false 15 | authenticated-length: false 16 | 17 | tls: true 18 | servername: example.com 19 | alpn: 20 | - h2 21 | - http/1.1 22 | fingerprint: xxxx 23 | client-fingerprint: chrome 24 | skip-cert-verify: true 25 | reality-opts: 26 | public-key: xxxx 27 | short-id: xxxx 28 | 29 | network: tcp 30 | 31 | smux: 32 | enabled: false 33 | ``` 34 | 35 | [Общие поля](./index.md) 36 | 37 | [Поля TLS](./tls.md) 38 | 39 | ## uuid 40 | 41 | Обязательно, ID пользователя VMess 42 | 43 | ## alterId 44 | 45 | Обязательно, если не 0, активирует старый протокол 46 | 47 | ## cipher 48 | 49 | Обязательно, метод шифрования, поддерживает `auto`/`none`/`zero`/`aes-128-gcm`/`chacha20-poly1305` 50 | 51 | ## packet-encoding 52 | 53 | Кодирование UDP-пакетов, если пусто, используется оригинальное кодирование. Возможные значения: `packetaddr` (поддерживается `v2ray 5+`) / `xudp` (поддерживается `xray`) 54 | 55 | ## global-padding 56 | 57 | Параметр протокола. Если включен, случайным образом расходует трафик (в v2ray включен по умолчанию и не может быть отключен). 58 | 59 | ## authenticated-length 60 | 61 | Параметр протокола. Включает шифрование блоков длины 62 | 63 | ## network 64 | 65 | Транспортный уровень, поддерживает ws/http/h2/grpc, если не настроен или настроен с другим значением, используется tcp 66 | 67 | См. [Конфигурация транспортного уровня](./transport.md) -------------------------------------------------------------------------------- /docs/config/inbound/listeners/trojan.ru.md: -------------------------------------------------------------------------------- 1 | # Trojan 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: trojan-in-1 6 | type: trojan 7 | port: 10819 # поддерживает формат ports, например 200,302 или 200,204,401-429,501-503 8 | listen: 0.0.0.0 9 | # rule: sub-rule-name1 # по умолчанию использует rules, если sub-rule не найдено, то напрямую использует rules 10 | # proxy: proxy # если не пусто, то входящий трафик напрямую передается указанному proxy (когда proxy не пусто, имя proxy должно быть корректным, иначе возникнет ошибка) 11 | users: 12 | - username: 1 13 | password: 9d0cb9d0-964f-4ef6-897d-6c6b3ccf9e68 14 | # ws-path: "/" # если не пусто, то включается транспортный уровень websocket 15 | # grpc-service-name: "GunService" # если не пусто, то включается транспортный уровень grpc 16 | # следующие два параметра, если заполнены, включают tls (необходимо заполнить оба) 17 | certificate: ./server.crt 18 | private-key: ./server.key 19 | # если заполнен reality-config, то включается reality (не может использоваться одновременно с certificate и private-key) 20 | # reality-config: 21 | # dest: test.com:443 22 | # private-key: jNXHt1yRo0vDuchQlIP6Z0ZvjT3KtzVI-T4E7RoLJS0 # можно сгенерировать командой mihomo generate reality-keypair 23 | # short-id: 24 | # - 0123456789abcdef 25 | # server-names: 26 | # - test.com 27 | # ss-option: # аналогично настройке `shadowsocks` в trojan-go 28 | # enabled: false 29 | # method: aes-128-gcm # aes-128-gcm/aes-256-gcm/chacha20-ietf-poly1305 30 | # password: "example" 31 | ### Примечание: для trojan listener необходимо заполнить по крайней мере один из параметров: "certificate и private-key" или "reality-config" или "ss-option" ### 32 | ``` -------------------------------------------------------------------------------- /docs/startup/service/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | # - navigation 4 | - toc 5 | --- 6 | 7 | ## 使用 systemd 8 | 9 | - 下载二进制可执行文件 [releases](https://github.com/MetaCubeX/mihomo/releases) 10 | 11 | - 将下载的二进制可执行文件重名名为 `mihomo` 并移动到 `/usr/local/bin/` 12 | 13 | - 以守护进程的方式,运行 mihomo。 14 | 15 | 使用以下命令将 mihomo 二进制文件复制到 /usr/local/bin, 配置文件复制到 /etc/mihomo: 16 | 17 | ```shell 18 | cp mihomo /usr/local/bin 19 | cp config.yaml /etc/mihomo 20 | ``` 21 | 22 | 创建 systemd 配置文件 `/etc/systemd/system/mihomo.service`: 23 | 24 | ```ini 25 | [Unit] 26 | Description=mihomo Daemon, Another Clash Kernel. 27 | After=network.target NetworkManager.service systemd-networkd.service iwd.service 28 | 29 | [Service] 30 | Type=simple 31 | LimitNPROC=500 32 | LimitNOFILE=1000000 33 | CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE 34 | AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE 35 | Restart=always 36 | ExecStartPre=/usr/bin/sleep 1s 37 | ExecStart=/usr/local/bin/mihomo -d /etc/mihomo 38 | ExecReload=/bin/kill -HUP $MAINPID 39 | 40 | [Install] 41 | WantedBy=multi-user.target 42 | ``` 43 | 44 | 使用以下命令重新加载 systemd: 45 | 46 | ```shell 47 | systemctl daemon-reload 48 | ``` 49 | 50 | 启用 mihomo 服务: 51 | 52 | ```shell 53 | systemctl enable mihomo 54 | ``` 55 | 56 | 使用以下命令立即启动 mihomo: 57 | 58 | ```shell 59 | systemctl start mihomo 60 | ``` 61 | 62 | 使用以下命令使 mihomo 重新加载: 63 | 64 | ```shell 65 | systemctl reload mihomo 66 | ``` 67 | 68 | 使用以下命令检查 mihomo 的运行状况: 69 | 70 | ```shell 71 | systemctl status mihomo 72 | ``` 73 | 74 | 使用以下命令检查 mihomo 的运行日志: 75 | 76 | ```shell 77 | journalctl -u mihomo -o cat -e 78 | ``` 79 | 80 | 或 81 | 82 | ```shell 83 | journalctl -u mihomo -o cat -f 84 | ``` 85 | -------------------------------------------------------------------------------- /docs/config/sniff/index.ru.md: -------------------------------------------------------------------------------- 1 | # Обнаружение доменов 2 | 3 | ```{.yaml linenums="1"} 4 | sniffer: 5 | enable: false 6 | force-dns-mapping: true 7 | parse-pure-ip: true 8 | override-destination: false 9 | sniff: 10 | HTTP: 11 | ports: [80, 8080-8880] 12 | override-destination: true 13 | TLS: 14 | ports: [443, 8443] 15 | QUIC: 16 | ports: [443, 8443] 17 | force-domain: 18 | - +.v2ex.com 19 | skip-domain: 20 | - Mijia Cloud 21 | skip-src-address: 22 | - 192.168.0.3/32 23 | skip-dst-address: 24 | - 192.168.0.3/32 25 | ``` 26 | 27 | ## enable 28 | 29 | Включить или отключить sniffer. 30 | 31 | ## force-dns-mapping 32 | 33 | Принудительное обнаружение для трафика типа `redir-host`. 34 | 35 | ## parse-pure-ip 36 | 37 | Принудительное обнаружение для всего трафика, для которого не удалось получить доменное имя. 38 | 39 | ## override-destination 40 | 41 | Использовать ли результат обнаружения в качестве фактического адреса доступа, по умолчанию true. 42 | 43 | ## sniff 44 | 45 | Настройки протоколов для обнаружения, поддерживаются только `HTTP`/`TLS`/`QUIC`. 46 | 47 | - `ports`: [диапазоны портов](../../handbook/syntax.ru.md#диапазоны-портов) 48 | - `override-destination`: переопределяет глобальную настройку `override-destination` 49 | 50 | ## force-domain 51 | 52 | Список доменов для принудительного обнаружения, использует [подстановочные знаки доменов](../../handbook/syntax.ru.md#подстановочные-знаки-для-доменов). 53 | 54 | ## skip-domain 55 | 56 | Список доменов для пропуска обнаружения, использует [подстановочные знаки доменов](../../handbook/syntax.ru.md#подстановочные-знаки-для-доменов). 57 | 58 | ## skip-src-address 59 | 60 | Список диапазонов исходных IP-адресов для пропуска обнаружения. 61 | 62 | ## skip-dst-address 63 | 64 | Список диапазонов целевых IP-адресов для пропуска обнаружения. -------------------------------------------------------------------------------- /docs/config/proxies/vless.md: -------------------------------------------------------------------------------- 1 | # VLESS 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "vless" 6 | type: vless 7 | server: server 8 | port: 443 9 | udp: true 10 | uuid: uuid 11 | flow: xtls-rprx-vision 12 | packet-encoding: xudp 13 | 14 | tls: true 15 | servername: example.com 16 | alpn: 17 | - h2 18 | - http/1.1 19 | fingerprint: xxxx 20 | client-fingerprint: chrome 21 | skip-cert-verify: true 22 | reality-opts: 23 | public-key: xxxx 24 | short-id: xxxx 25 | encryption: "" 26 | 27 | network: tcp 28 | 29 | smux: 30 | enabled: false 31 | ``` 32 | 33 | !!! note 34 | Meta 的 `xtls-*` 流控实际上与 Xray-core 中的 `xtls-*-udp443` 等效,如需拦截 443 端口的 UDP 流量,请使用逻辑规则:`AND,((NETWORK,UDP),(DST-PORT,443)),REJECT` 35 | 36 | [通用字段](./index.md) 37 | 38 | [TLS 字段](./tls.md) 39 | 40 | ## uuid 41 | 42 | 必须,VLESS 用户 ID 43 | 44 | ## flow 45 | 46 | VLESS 子协议,可用值为 `xtls-rprx-vision` 47 | 48 | ## packet-encoding 49 | 50 | UDP 包编码,为空则使用原始编码,可选 `packetaddr` (由 `v2ray 5+` 支持)/ `xudp` (由 `xray` 支持) 51 | 52 | ## encryption 53 | 54 | vless encryption客户端配置: 55 | 56 | `encryption: "mlkem768x25519plus.native/xorpub/random.1rtt/0rtt.(padding len).(padding gap).(X25519 Password).(ML-KEM-768 Client)..."` 57 | 58 | (native/xorpub 的 XTLS Vision 可以 Splice。只使用 1-RTT 模式 / 若服务端发的 ticket 中秒数不为零则 0-RTT 复用) 59 | 60 | / 是只能选一个,后面 base64 至少一个,无限串联,使用 `mihomo generate vless-x25519` 和 `mihomo generate vless-mlkem768` 生成,替换值时需去掉括号 61 | 62 | Padding 是可选的参数,仅作用于 1-RTT 以消除握手的长度特征,双端默认值均为 "100-111-1111.75-0-111.50-0-3333": 63 | 64 | * 在 1-RTT client/server hello 后以 100% 的概率粘上随机 111 到 1111 字节的 padding 65 | 66 | * 以 75% 的概率等待随机 0 到 111 毫秒("probability-from-to") 67 | 68 | * 再次以 50% 的概率发送随机 0 到 3333 字节的 padding(若为 0 则不 Write()) 69 | 70 | * 服务端、客户端可以设置不同的 padding 参数,按 len、gap 的顺序无限串联,第一个 padding 需概率 100%、至少 35 字节 71 | 72 | ## network 73 | 74 | 传输层,支持 ws/http/h2/grpc,不配置或配置其他值则为 tcp 75 | 76 | 参阅 [传输层配置](./transport.md) 77 | 78 | -------------------------------------------------------------------------------- /docs/config/proxies/dialer-proxy.md: -------------------------------------------------------------------------------- 1 | # dialer-proxy 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "ss1" 6 | dialer-proxy: dialer 7 | ... 8 | 9 | - name: "ss2" 10 | ... 11 | 12 | proxy-groups: 13 | - name: dialer 14 | type: select 15 | proxies: 16 | - ss2 17 | ``` 18 | 19 | 指定当前 `proxies` 通过 `dialer-proxy` 建立网络连接,值可以为[策略组](../proxy-groups/index.md)/[出站代理](../proxies/index.md)的 `name` 20 | 21 | 上述示例中,ss1 通过 ss2 建立连接 22 | 23 | 当通过 ss1 代理时,就组成了一条 `內核 ---ss1--> ss2包裝器 ===ss2==> ss2服務端 ---ss1--> ss1服務端 --> 目标` 的代理链 24 | 25 | 最终表现: 26 | 27 | * 浏览器访问IP查询网站时只会显示ss1的IP(即目标网站不知道ss2的存在) 28 | * 内核对外看起来只是在访问ss2(即你的宽带运营商不知道ss1的存在) 29 | * 只有ss2的服务端知道在访问ss1(ss2的服务端也只知道在访问ss1,并不知道在访问什么目标网站) 30 | 31 | ## relay迁移 32 | 33 | relay类型的proxy-group将被废弃,而proxy-group并不直接支持dialer-proxy,因此针对部分使用场景,给出参考方案 34 | 35 | ### relay中包含多个select 36 | 37 | 有如下配置 38 | 39 | ```{.yaml linenums="1"} 40 | proxies: 41 | - { name: "proxy1", type: "socks" } 42 | - { name: "proxy2", type: "socks" } 43 | - { name: "proxy3", type: "socks" } 44 | - { name: "proxy4", type: "socks" } 45 | proxy-groups: 46 | - { name: "relay-proxy", type: relay, proxies: ["select1", "select2"] } 47 | - { name: "select1", type: select, proxies: ["proxy1", "proxy2"] } 48 | - { name: "select2", type: select, proxies: ["proxy3", "proxy4"] } 49 | rules: 50 | - MATCH,relay-proxy 51 | ``` 52 | 53 | 迁移到dialer-proxy方案时,需要将proxy3和proxy4定义到proxy-provider中,并通过override设置该provider中所有proxy的dialer-proxy,如下所示: 54 | 55 | ```{.yaml linenums="1"} 56 | proxies: 57 | - { name: "proxy1", type: "socks" } 58 | - { name: "proxy2", type: "socks" } 59 | proxy-groups: 60 | - { name: "select1", type: select, proxies: ["proxy1", "proxy2"] } 61 | - { name: "select2", type: select, use: ["provider1"] } 62 | proxy-providers: 63 | provider1: 64 | type: inline 65 | override: 66 | dialer-proxy: select1 67 | payload: 68 | - { name: "proxy3", type: "socks" } 69 | - { name: "proxy4", type: "socks" } 70 | rules: 71 | - MATCH,select2 72 | ``` 73 | -------------------------------------------------------------------------------- /docs/config/rule-providers/index.en.md: -------------------------------------------------------------------------------- 1 | # rule-provider 2 | 3 | ```{.yaml linenums="1"} 4 | rule-providers: 5 | google: 6 | type: http 7 | path: ./rule1.yaml 8 | url: "https://raw.githubusercontent.com/../Google.yaml" 9 | interval: 600 10 | proxy: DIRECT 11 | behavior: classical 12 | format: yaml 13 | size-limit: 0 14 | ``` 15 | 16 | ## name 17 | 18 | Required, such as `google`, must be unique. 19 | 20 | ## type 21 | 22 | Required, `provider` type, options are `http` / `file` / `inline`. 23 | 24 | ## url 25 | 26 | Must be configured if the type is `http`. 27 | 28 | ## path 29 | 30 | Optional, file path, must be unique. If not provided, the MD5 of the URL will be used as the filename. 31 | 32 | For security reasons, this path is restricted to only allow locations within `HomeDir` (configured with the -d startup parameter). If you want to store it in other locations, please specify additional safe paths by setting the `SAFE_PATHS` environment variable. The syntax of this environment variable is the same as the PATH environment variable parsing rules of this operating system (that is, it is separated by semicolons in Windows and by colons in other systems). 33 | 34 | ## interval 35 | 36 | The update interval for the `provider`, in seconds. 37 | 38 | ## proxy 39 | 40 | Download/update through the specified proxy. 41 | 42 | ## behavior 43 | 44 | Behavior, options are `domain` / `ipcidr` / `classical`, corresponding to different formats of rule-provider files. Please fill in according to the actual format. 45 | 46 | ## format 47 | 48 | Format, options are `yaml` / `text` / `mrs`, default is `yaml`. 49 | 50 | Currently, `mrs` behavior only supports `domain` / `ipcidr`. You can convert using `mihomo convert-ruleset domain/ipcidr yaml/text XXX.yaml XXX.mrs`. 51 | 52 | ## size-limit 53 | 54 | The maximum size of downloadable files is restricted, with the default being 0, which means no size limit; the unit is bytes (`b`) 55 | 56 | ## payload 57 | 58 | Content, only effective when `type` is `inline` 59 | -------------------------------------------------------------------------------- /docs/config/dns/diagram.md: -------------------------------------------------------------------------------- 1 | # 解析流程 2 | 3 | ## 示例配置 4 | 5 | ```{.yaml linenums="1"} 6 | dns: 7 | nameserver: 8 | - https://doh.pub/dns-query 9 | fallback: 10 | - https://8.8.8.8/dns-query 11 | direct-nameserver: 12 | - system 13 | nameserver-policy: 14 | "geosite:cn,private": 15 | - https://doh.pub/dns-query 16 | - https://dns.alidns.com/dns-query 17 | fallback-filter: 18 | geoip: true 19 | geoip-code: CN 20 | geosite: 21 | - gfw 22 | ipcidr: 23 | - 240.0.0.0/4 24 | domain: 25 | - '+.google.com' 26 | - '+.facebook.com' 27 | - '+.youtube.com' 28 | 29 | rules: 30 | - DOMAIN-SUFFIX,google.com,PROXY 31 | - GEOIP,CN,DIRECT 32 | - MATCH,PROXY 33 | ``` 34 | 35 | ## 流程 36 | 37 | !!! note "" 38 | 此部分仅说明 dns 模块的处理过程 39 | 40 | !!! warning "" 41 | ~~direct-nameserver 重新解析仅限 tcp 连接~~ 42 | direct-nameserver 重新解析在v1.19.10后同样应用于 UDP 连接(对于Tun入站仅限Fakeip模式下) 43 | 44 | ```mermaid 45 | flowchart TD 46 | Rule[匹配规则] 47 | Domain[匹配到域名规则] 48 | IP[匹配到目标 IP 规则] 49 | Resolve[解析域名] 50 | 51 | NameServer[使用 nameserver 查询] 52 | Policy[匹配 nameserver-policy] 53 | Concurrent[使用 nameserver 和 fallback 并发查询] 54 | Filter[匹配 fallback-filter] 55 | DirectNS[使用 direct-nameserver 重新解析] 56 | 57 | GetIP[查询得到IP] 58 | 59 | Proxy[发送域名给代理] 60 | Direct[使用 IP 直接连接] 61 | 62 | Rule --> Domain 63 | Rule --> IP 64 | 65 | Domain -- 域名匹配到直连 --> Resolve 66 | Domain -- 域名匹配到直连并配置了 direct-nameserver --> DirectNS 67 | 68 | IP --> Resolve 69 | 70 | Resolve -- 配置了 nameserver-policy --> Policy 71 | Policy -- 未匹配到 --> NameServer 72 | Policy --> GetIP 73 | Resolve -- 未配置 nameserver-policy --> NameServer 74 | 75 | NameServer -- 配置了 fallback --> Concurrent 76 | Concurrent --> Filter 77 | Filter --> GetIP 78 | NameServer -- 未配置 fallback --> GetIP 79 | 80 | GetIP -- 匹配到直连并配置了 direct-nameserver --> DirectNS 81 | DirectNS --> Direct 82 | 83 | GetIP -- IP 匹配到代理 --> Proxy[发送域名给代理] 84 | Domain -- 域名匹配到代理 --> Proxy 85 | 86 | GetIP -- IP 匹配到直连 --> Direct 87 | ``` 88 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/vmess.md: -------------------------------------------------------------------------------- 1 | # VMESS 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: vmess-in-1 6 | type: vmess 7 | port: 10814 # 支持使用ports格式,例如200,302 or 200,204,401-429,501-503 8 | listen: 0.0.0.0 9 | # rule: sub-rule-name1 # 默认使用 rules,如果未找到 sub-rule 则直接使用 rules 10 | # proxy: proxy # 如果不为空则直接将该入站流量交由指定 proxy 处理 (当 proxy 不为空时,这里的 proxy 名称必须合法,否则会出错) 11 | users: 12 | - username: 1 13 | uuid: 9d0cb9d0-964f-4ef6-897d-6c6b3ccf9e68 14 | alterId: 1 15 | # ws-path: "/" # 如果不为空则开启 websocket 传输层 16 | # grpc-service-name: "GunService" # 如果不为空则开启 grpc 传输层 17 | # 下面两项如果填写则开启 tls(需要同时填写) 18 | # certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径 19 | # private-key: ./server.key # 证书对应的私钥 PEM 格式,或者私钥路径 20 | # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空 21 | # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify" 22 | # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径 23 | # 如果填写则开启ech(可由 mihomo generate ech-keypair <明文域名> 生成) 24 | # ech-key: | 25 | # -----BEGIN ECH KEYS----- 26 | # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK 27 | # madSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz 28 | # dC5jb20AAA== 29 | # -----END ECH KEYS----- 30 | # 如果填写reality-config则开启reality(注意不可与certificate和private-key同时填写) 31 | # reality-config: 32 | # dest: test.com:443 33 | # private-key: jNXHt1yRo0vDuchQlIP6Z0ZvjT3KtzVI-T4E7RoLJS0 # 可由 mihomo generate reality-keypair 命令生成 34 | # short-id: 35 | # - 0123456789abcdef 36 | # server-names: 37 | # - test.com 38 | # #下列两个 limit 为选填,可对未通过验证的回落连接限速,bytesPerSec 默认为 0 即不启用 39 | # #回落限速是一种特征,不建议启用,如果您是面板/一键脚本开发者,务必让这些参数随机化 40 | # limit-fallback-upload: 41 | # after-bytes: 0 # 传输指定字节后开始限速 42 | # bytes-per-sec: 0 # 基准速率(字节/秒) 43 | # burst-bytes-per-sec: 0 # 突发速率(字节/秒),大于 bytesPerSec 时生效 44 | # limit-fallback-download: 45 | # after-bytes: 0 # 传输指定字节后开始限速 46 | # bytes-per-sec: 0 # 基准速率(字节/秒) 47 | # burst-bytes-per-sec: 0 # 突发速率(字节/秒),大于 bytesPerSec 时生效 48 | ``` 49 | -------------------------------------------------------------------------------- /docs/startup/service/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | # - navigation 4 | - toc 5 | --- 6 | 7 | ## Using systemd 8 | 9 | - Download the binary executable file from [releases](https://github.com/MetaCubeX/mihomo/releases). 10 | 11 | - Rename the downloaded binary executable file to `mihomo` and move it to `/usr/local/bin/`. 12 | 13 | - Run Mihomo as a daemon. 14 | 15 | Use the following commands to copy the Mihomo binary file to /usr/local/bin and the configuration file to /etc/mihomo: 16 | 17 | ```shell 18 | cp mihomo /usr/local/bin 19 | cp config.yaml /etc/mihomo 20 | ``` 21 | 22 | Create a systemd configuration file `/etc/systemd/system/mihomo.service`: 23 | 24 | ```ini 25 | [Unit] 26 | Description=mihomo Daemon, Another Clash Kernel. 27 | After=network.target NetworkManager.service systemd-networkd.service iwd.service 28 | 29 | [Service] 30 | Type=simple 31 | LimitNPROC=500 32 | LimitNOFILE=1000000 33 | CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE 34 | AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE 35 | Restart=always 36 | ExecStartPre=/usr/bin/sleep 1s 37 | ExecStart=/usr/local/bin/mihomo -d /etc/mihomo 38 | ExecReload=/bin/kill -HUP $MAINPID 39 | 40 | [Install] 41 | WantedBy=multi-user.target 42 | ``` 43 | 44 | Reload systemd using the following command: 45 | 46 | ```shell 47 | systemctl daemon-reload 48 | ``` 49 | 50 | Enable the Mihomo service: 51 | 52 | ```shell 53 | systemctl enable mihomo 54 | ``` 55 | 56 | Start Mihomo immediately with the following command: 57 | 58 | ```shell 59 | systemctl start mihomo 60 | ``` 61 | 62 | Reload Mihomo with the following command: 63 | 64 | ```shell 65 | systemctl reload mihomo 66 | ``` 67 | 68 | Check the status of Mihomo with the following command: 69 | 70 | ```shell 71 | systemctl status mihomo 72 | ``` 73 | 74 | Check the running logs of Mihomo with the following command: 75 | 76 | ```shell 77 | journalctl -u mihomo -o cat -e 78 | ``` 79 | 80 | Or 81 | 82 | ```shell 83 | journalctl -u mihomo -o cat -f 84 | ``` 85 | -------------------------------------------------------------------------------- /docs/config/proxies/tls.md: -------------------------------------------------------------------------------- 1 | # TLS 配置 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "tls-example" 6 | tls: true 7 | sni: example.com 8 | servername: example.com 9 | fingerprint: xxx 10 | alpn: 11 | - h2 12 | - http/1.1 13 | skip-cert-verify: true 14 | # certificate: xxxx 15 | # private-key: xxx 16 | client-fingerprint: random 17 | reality-opts: 18 | public-key: xxxx 19 | short-id: xxxx 20 | support-x25519mlkem768: true 21 | ech-opts: 22 | enable: true 23 | config: base64_encoded_config 24 | ``` 25 | 26 | ## tls 27 | 28 | 启用 tls,仅适用于使用 `tls` 的协议,`trojan` 协议强制启用 29 | 30 | ## sni/servername 31 | 32 | 服务器名称指示,在 [`VMess`](./vmess.md)/[`VLESS`](./vless.md) 中为 `servername`,如果为空,则为 `server` 中的地址 33 | 34 | ## fingerprint 35 | 36 | 证书指纹,仅适用于使用 `tls` 的协议,可使用 37 | ```bash 38 | openssl x509 -noout -fingerprint -sha256 -inform pem -in yourcert.pem 39 | ``` 40 | 获取 41 | 42 | ## alpn 43 | 44 | 支持的应用层协议协商列表,按优先顺序排列。 45 | 46 | 如果两个对等点都支持 ALPN,则选择的协议将是此列表中的一个,如果没有相互支持的协议则连接将失败。 47 | 48 | 参阅 [Application-Layer Protocol Negotiation](https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation) 49 | 50 | ## skip-cert-verify 51 | 52 | 跳过证书验证,仅适用于使用 `tls` 的协议 53 | 54 | ## certificate 55 | 56 | 如果填写则开启 [mTLS](https://www.cloudflare.com/learning/access-management/what-is-mutual-tls/)(需要和private-key同时填写),内容为证书 PEM 格式,或者 证书的路径 57 | 58 | ## private-key 59 | 60 | 如果填写则开启 [mTLS](https://www.cloudflare.com/learning/access-management/what-is-mutual-tls/)(需要和certificate同时填写),内容为证书对应的私钥 PEM 格式,或者私钥路径 61 | 62 | ## client-fingerprint 63 | 64 | 客户端 utls 指纹,仅适用于 [`VMess`](./vmess.md)/[`VLESS`](./vless.md)/[`Trojan`](./trojan.md) 协议,可选项参阅[全局客户端指纹](../general.md#_14) 65 | 66 | ## reality-opts 67 | 68 | reality 配置,如果不为空,则启用 reality 69 | 70 | ### reality-opts.public-key 71 | 72 | reality 服务端私钥对应的公钥 73 | 74 | ### reality-opts.short-id 75 | 76 | 服务端 short id 之一 77 | 78 | ### reality-opts.support-x25519mlkem768 79 | 80 | 支持 X25519-MLKEM768 密钥交换 81 | 82 | ## ech-opts 83 | 84 | ### ech-opts.enable 85 | 86 | 启用 ECH(Encrypted Client Hello),如果不为空,则启用 ECH 87 | 88 | ### ech-opts.config 89 | 90 | ECH 配置,base64 编码的配置内容 91 | 92 | -------------------------------------------------------------------------------- /docs/config/rule-providers/index.ru.md: -------------------------------------------------------------------------------- 1 | # rule-provider 2 | 3 | ```{.yaml linenums="1"} 4 | rule-providers: 5 | google: 6 | type: http 7 | path: ./rule1.yaml 8 | url: "https://raw.githubusercontent.com/../Google.yaml" 9 | interval: 600 10 | proxy: DIRECT 11 | behavior: classical 12 | format: yaml 13 | size-limit: 0 14 | payload: 15 | - 'DOMAIN-SUFFIX,google.com' 16 | ``` 17 | 18 | ## name 19 | 20 | Обязательное поле, например `google`, должно быть уникальным. 21 | 22 | ## type 23 | 24 | Обязательное поле, тип `provider`, возможные значения: `http` / `file` / `inline`. 25 | 26 | ## url 27 | 28 | Должно быть настроено, если тип `http`. 29 | 30 | ## path 31 | 32 | Необязательно, путь к файлу, должен быть уникальным. Если не указан, для имени файла будет использован MD5 от URL. 33 | 34 | По соображениям безопасности этот путь ограничен и допускается только в пределах `HomeDir` (настраивается параметром запуска -d). Если вы хотите сохранить его в других местах, укажите дополнительные безопасные пути, установив переменную среды `SAFE_PATHS`. Синтаксис этой переменной среды такой же, как правила разбора переменной среды PATH этой операционной системы (то есть, он разделяется точкой с запятой в Windows и двоеточием в других системах). 35 | 36 | ## interval 37 | 38 | Интервал обновления для `provider`, в секундах. 39 | 40 | ## proxy 41 | 42 | Загрузка/обновление через указанный прокси. 43 | 44 | ## behavior 45 | 46 | Поведение, возможные значения: `domain` / `ipcidr` / `classical`, соответствуют различным форматам файлов rule-provider. Пожалуйста, заполните в соответствии с фактическим форматом. 47 | 48 | ## format 49 | 50 | Формат, возможные значения: `yaml` / `text` / `mrs`, по умолчанию `yaml`. 51 | 52 | В настоящее время `mrs` поддерживает только поведение `domain` / `ipcidr`. Вы можете конвертировать, используя `mihomo convert-ruleset domain/ipcidr yaml/text XXX.yaml XXX.mrs`. 53 | 54 | ## size-limit 55 | 56 | Ограничение максимального размера загружаемых файлов, по умолчанию 0, что означает отсутствие ограничения размера; единица измерения - байты (`b`) 57 | 58 | ## payload 59 | 60 | Содержимое, действует только когда `type` имеет значение `inline` 61 | -------------------------------------------------------------------------------- /docs/startup/service/index.ru.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | # - navigation 4 | - toc 5 | --- 6 | 7 | ## Использование systemd 8 | 9 | - Скачайте исполняемый двоичный файл из раздела [releases](https://github.com/MetaCubeX/mihomo/releases) 10 | 11 | - Переименуйте скачанный двоичный файл в `mihomo` и переместите его в `/usr/local/bin/` 12 | 13 | - Запустите mihomo в режиме демона. 14 | 15 | Используйте следующие команды, чтобы скопировать бинарный файл mihomo в /usr/local/bin, а конфигурационный файл в /etc/mihomo: 16 | 17 | ```shell 18 | cp mihomo /usr/local/bin 19 | cp config.yaml /etc/mihomo 20 | ``` 21 | 22 | Создайте файл конфигурации systemd `/etc/systemd/system/mihomo.service`: 23 | 24 | ```ini 25 | [Unit] 26 | Description=mihomo Daemon, Another Clash Kernel. 27 | After=network.target NetworkManager.service systemd-networkd.service iwd.service 28 | 29 | [Service] 30 | Type=simple 31 | LimitNPROC=500 32 | LimitNOFILE=1000000 33 | CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE 34 | AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE 35 | Restart=always 36 | ExecStartPre=/usr/bin/sleep 1s 37 | ExecStart=/usr/local/bin/mihomo -d /etc/mihomo 38 | ExecReload=/bin/kill -HUP $MAINPID 39 | 40 | [Install] 41 | WantedBy=multi-user.target 42 | ``` 43 | 44 | Используйте следующую команду для перезагрузки systemd: 45 | 46 | ```shell 47 | systemctl daemon-reload 48 | ``` 49 | 50 | Включите сервис mihomo: 51 | 52 | ```shell 53 | systemctl enable mihomo 54 | ``` 55 | 56 | Используйте следующую команду, чтобы немедленно запустить mihomo: 57 | 58 | ```shell 59 | systemctl start mihomo 60 | ``` 61 | 62 | Используйте следующую команду для перезагрузки конфигурации mihomo: 63 | 64 | ```shell 65 | systemctl reload mihomo 66 | ``` 67 | 68 | Используйте следующую команду для проверки состояния mihomo: 69 | 70 | ```shell 71 | systemctl status mihomo 72 | ``` 73 | 74 | Используйте следующую команду для просмотра журнала работы mihomo: 75 | 76 | ```shell 77 | journalctl -u mihomo -o cat -e 78 | ``` 79 | 80 | Или 81 | 82 | ```shell 83 | journalctl -u mihomo -o cat -f 84 | ``` -------------------------------------------------------------------------------- /docs/config/inbound/listeners/hysteria2.md: -------------------------------------------------------------------------------- 1 | # Hysteria2 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: hy-in 6 | type: hysteria2 7 | port: 8443 8 | listen: 0.0.0.0 9 | users: 10 | user1: password1 11 | user2: password2 12 | up: 1000 13 | down: 1000 14 | ignore-client-bandwidth: false 15 | obfs: salamander 16 | obfs-password: password 17 | masquerade: "" 18 | alpn: 19 | - h3 20 | certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径 21 | private-key: ./server.key # 证书对应的私钥 PEM 格式,或者私钥路径 22 | # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空 23 | # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify" 24 | # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径 25 | # 如果填写则开启ech(可由 mihomo generate ech-keypair <明文域名> 生成) 26 | # ech-key: | 27 | # -----BEGIN ECH KEYS----- 28 | # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK 29 | # madSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz 30 | # dC5jb20AAA== 31 | # -----END ECH KEYS----- 32 | ``` 33 | 34 | ## [通用字段](./index.md) 35 | 36 | ## 协议配置 37 | 38 | ### users 39 | 40 | Hysteria 用户以及认证密码,格式为`用户名: 密码` 41 | 42 | !!! note "" 43 | 用户名不参与认证,仅用于[入站规则](../../rules/index.md#in-user)匹配 44 | 45 | ### up/down 46 | 47 | Hysteria 速率设置,默认 Mbps,具体可参考 [Hysteria 文档](https://v2.hysteria.network/zh/docs/advanced/Full-Server-Config/#_4) 48 | 49 | ### ignore-client-bandwidth 50 | 51 | 可用值:`true/false` 52 | 53 | 启用后,服务器将忽略客户端设置的任何带宽,永远使用传统的拥塞控制算法 (BBR) 54 | 55 | ### obfs 56 | 57 | QUIC 流量混淆器,仅可设为 `salamander`,如果为空则禁用 58 | 59 | !!! warning "" 60 | 启用混淆将使服务器与标准的 QUIC 连接不兼容,失去 HTTP/3 伪装的能力 61 | 62 | ### obfs-password 63 | 64 | QUIC 流量混淆器密码 65 | 66 | ### masquerade 67 | 68 | 伪装 HTTP/3 流量,仅支持`file`和`http/https`,如果为空,则始终返回 404 Not Found 69 | 70 | 具体可参考 [Hysteria 文档](https://v2.hysteria.network/zh/docs/advanced/Full-Server-Config/#masquerade) 71 | 72 | | | 示例 | 描述 | 73 | |--------------|-------------------------|--------------| 74 | | `file` | `file:///var/www` | 作为文件服务器 | 75 | | `http/https` | `http://127.0.0.1:8080` | 作为反向代理 | 76 | 77 | ### alpn 78 | 79 | TLS 应用层协议协商列表,客户端需写入服务端 alpn 列表中的一个,否则将认证失败,默认为`h3` 80 | 81 | ### certificate/private-key 82 | 83 | TLS 证书文件路径 84 | -------------------------------------------------------------------------------- /docs/config/proxies/transport.md: -------------------------------------------------------------------------------- 1 | # 传输层配置 2 | 3 | === "http" 4 | ```{.yaml linenums="1"} 5 | proxies: 6 | - name: "http-opts-example" 7 | type: xxxxx 8 | network: http 9 | http-opts: 10 | method: "GET" 11 | path: 12 | - '/' 13 | - '/video' 14 | headers: 15 | Connection: 16 | - keep-alive 17 | ``` 18 | 19 | === "h2" 20 | ```{.yaml linenums="1"} 21 | proxies: 22 | - name: "h2-opts-example" 23 | type: xxxxx 24 | network: h2 25 | h2-opts: 26 | host: 27 | - example.com 28 | path: / 29 | ``` 30 | 31 | === "grpc" 32 | ```{.yaml linenums="1"} 33 | proxies: 34 | - name: "grpc-opts-example" 35 | type: xxxxx 36 | network: grpc 37 | grpc-opts: 38 | grpc-service-name: example 39 | ``` 40 | === "ws" 41 | ```{.yaml linenums="1"} 42 | proxies: 43 | - name: "ws-opts-example" 44 | type: xxxxx 45 | network: ws 46 | ws-opts: 47 | path: /path 48 | headers: 49 | Host: example.com 50 | max-early-data: 51 | early-data-header-name: 52 | v2ray-http-upgrade: false 53 | v2ray-http-upgrade-fast-open: false 54 | ``` 55 | 56 | ## http-opts 57 | 58 | `http` 传输层设置,仅传输层为 `http` 时生效 59 | 60 | ### http-opts.method 61 | 62 | http 请求方法 63 | 64 | ### http-opts.path 65 | 66 | http 请求路径 67 | 68 | ### http-opts.headers 69 | 70 | http 请求头 71 | 72 | !!! note 73 | Mihomo 的 H2 传输层未实现多路复用功能,如果需要使用多路复用,在 Mihomo 中更建议使用 gRPC 协议,或者 sing-mux 74 | 75 | ## h2-opts 76 | 77 | `h2` 传输层设置,仅传输层为 `h2` 时生效 78 | 79 | ### h2-opts.host 80 | 81 | 主机域名列表,如果设置,客户端将随机选择,服务器将验证 82 | 83 | ### h2-opts.path 84 | 85 | http 请求路径 86 | 87 | ## grpc-opts 88 | 89 | `grpc` 传输层设置,仅传输层为 `grpc` 时生效 90 | 91 | ### grpc-opts.grpc-service-name 92 | 93 | gRPC 服务名称 94 | 95 | ## ws-opts 96 | 97 | `ws` 传输层设置,仅传输层为 `ws` 时生效 98 | 99 | ### ws-opts.path 100 | 101 | 请求路径 102 | 103 | ### ws-opts.headers 104 | 105 | 请求头 106 | 107 | ### ws-opts.max-early-data 108 | 109 | Early Data 首包长度阈值 110 | 111 | ### ws-opts.early-data-header-name 112 | 113 | ### ws-opts.v2ray-http-upgrade 114 | 115 | 使用 http upgrade 116 | 117 | ### ws-opts.v2ray-http-upgrade-fast-open 118 | 119 | 启用 http upgrade 的 fast open 120 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/trojan.md: -------------------------------------------------------------------------------- 1 | # Trojan 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: trojan-in-1 6 | type: trojan 7 | port: 10819 # 支持使用ports格式,例如200,302 or 200,204,401-429,501-503 8 | listen: 0.0.0.0 9 | # rule: sub-rule-name1 # 默认使用 rules,如果未找到 sub-rule 则直接使用 rules 10 | # proxy: proxy # 如果不为空则直接将该入站流量交由指定 proxy 处理 (当 proxy 不为空时,这里的 proxy 名称必须合法,否则会出错) 11 | users: 12 | - username: 1 13 | password: 9d0cb9d0-964f-4ef6-897d-6c6b3ccf9e68 14 | # ws-path: "/" # 如果不为空则开启 websocket 传输层 15 | # grpc-service-name: "GunService" # 如果不为空则开启 grpc 传输层 16 | # 下面两项如果填写则开启 tls(需要同时填写) 17 | certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径 18 | private-key: ./server.key # 证书对应的私钥 PEM 格式,或者私钥路径 19 | # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空 20 | # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify" 21 | # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径 22 | # 如果填写则开启ech(可由 mihomo generate ech-keypair <明文域名> 生成) 23 | # ech-key: | 24 | # -----BEGIN ECH KEYS----- 25 | # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK 26 | # madSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz 27 | # dC5jb20AAA== 28 | # -----END ECH KEYS----- 29 | # 如果填写reality-config则开启reality(注意不可与certificate和private-key同时填写) 30 | # reality-config: 31 | # dest: test.com:443 32 | # private-key: jNXHt1yRo0vDuchQlIP6Z0ZvjT3KtzVI-T4E7RoLJS0 # 可由 mihomo generate reality-keypair 命令生成 33 | # short-id: 34 | # - 0123456789abcdef 35 | # server-names: 36 | # - test.com 37 | # #下列两个 limit 为选填,可对未通过验证的回落连接限速,bytesPerSec 默认为 0 即不启用 38 | # #回落限速是一种特征,不建议启用,如果您是面板/一键脚本开发者,务必让这些参数随机化 39 | # limit-fallback-upload: 40 | # after-bytes: 0 # 传输指定字节后开始限速 41 | # bytes-per-sec: 0 # 基准速率(字节/秒) 42 | # burst-bytes-per-sec: 0 # 突发速率(字节/秒),大于 bytesPerSec 时生效 43 | # limit-fallback-download: 44 | # after-bytes: 0 # 传输指定字节后开始限速 45 | # bytes-per-sec: 0 # 基准速率(字节/秒) 46 | # burst-bytes-per-sec: 0 # 突发速率(字节/秒),大于 bytesPerSec 时生效 47 | # ss-option: # like trojan-go's `shadowsocks` config 48 | # enabled: false 49 | # method: aes-128-gcm # aes-128-gcm/aes-256-gcm/chacha20-ietf-poly1305 50 | # password: "example" 51 | ### 注意,对于trojan listener, 至少需要填写 “certificate和private-key” 或 “reality-config” 或 “ss-option” 的其中一项 ### 52 | ``` 53 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/hysteria2.ru.md: -------------------------------------------------------------------------------- 1 | # Hysteria2 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: hy-in 6 | type: hysteria2 7 | port: 8443 8 | listen: 0.0.0.0 9 | users: 10 | user1: password1 11 | user2: password2 12 | up: 1000 13 | down: 1000 14 | ignore-client-bandwidth: false 15 | obfs: salamander 16 | obfs-password: password 17 | masquerade: "" 18 | alpn: 19 | - h3 20 | certificate: ./server.crt 21 | private-key: ./server.key 22 | ``` 23 | 24 | ## [Общие поля](./index.md) 25 | 26 | ## Настройка протокола 27 | 28 | ### users 29 | 30 | Пользователи Hysteria и пароли для аутентификации, формат: `имя_пользователя: пароль` 31 | 32 | !!! note "" 33 | Имя пользователя не участвует в аутентификации, используется только для сопоставления с [правилами входящих соединений](../../rules/index.md#in-user) 34 | 35 | ### up/down 36 | 37 | Настройки скорости Hysteria, по умолчанию в Mbps, подробнее см. [документацию Hysteria](https://v2.hysteria.network/zh/docs/advanced/Full-Server-Config/#_4) 38 | 39 | ### ignore-client-bandwidth 40 | 41 | Возможные значения: `true/false` 42 | 43 | При включении сервер будет игнорировать любые настройки пропускной способности клиента и всегда использовать традиционный алгоритм контроля перегрузки (BBR) 44 | 45 | ### obfs 46 | 47 | Маскировка трафика QUIC, можно установить только `salamander`, если пусто, то отключено 48 | 49 | !!! warning "" 50 | Включение маскировки сделает сервер несовместимым со стандартными QUIC-соединениями, что приведет к потере возможности маскироваться под HTTP/3 51 | 52 | ### obfs-password 53 | 54 | Пароль для маскировки трафика QUIC 55 | 56 | ### masquerade 57 | 58 | Маскировка трафика под HTTP/3, поддерживает только `file` и `http/https`, если пусто, всегда возвращает 404 Not Found 59 | 60 | Подробнее см. [документацию Hysteria](https://v2.hysteria.network/zh/docs/advanced/Full-Server-Config/#masquerade) 61 | 62 | | | Пример | Описание | 63 | |--------------|-------------------------|----------------| 64 | | `file` | `file:///var/www` | Файловый сервер | 65 | | `http/https` | `http://127.0.0.1:8080` | Обратный прокси | 66 | 67 | ### alpn 68 | 69 | Список протоколов согласования прикладного уровня TLS, клиент должен указать один из протоколов из списка сервера, иначе аутентификация не пройдет. По умолчанию `h3` 70 | 71 | ### certificate/private-key 72 | 73 | Пути к файлам сертификата TLS -------------------------------------------------------------------------------- /docs/config/proxies/tuic.ru.md: -------------------------------------------------------------------------------- 1 | # TUIC 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: tuic 6 | server: www.example.com 7 | port: 10443 8 | type: tuic 9 | token: TOKEN 10 | uuid: 00000000-0000-0000-0000-000000000001 11 | password: PASSWORD_1 12 | # ip: 127.0.0.1 13 | # heartbeat-interval: 10000 14 | # alpn: [h3] 15 | disable-sni: true 16 | reduce-rtt: true 17 | request-timeout: 8000 18 | udp-relay-mode: native 19 | # congestion-controller: bbr 20 | # max-udp-relay-packet-size: 1500 21 | # fast-open: true 22 | # skip-cert-verify: true 23 | # max-open-streams: 20 24 | # sni: example.com 25 | ``` 26 | 27 | [Общие поля](./index.md) 28 | 29 | [Поля TLS](./tls.md) 30 | 31 | ## token 32 | 33 | Обязательно, идентификатор пользователя для TUIC V4, не может быть указан при использовании TUIC V5 34 | 35 | ## uuid 36 | 37 | Обязательно, уникальный идентификационный код пользователя для TUIC V5, не может быть указан при использовании TUIC V4 38 | 39 | ## password 40 | 41 | Обязательно, пароль пользователя для TUIC V5, не может быть указан при использовании TUIC V4 42 | 43 | ## ip 44 | 45 | Используется для переопределения результатов DNS-поиска адреса сервера, указанного в опции "server" 46 | 47 | ## heartbeat-interval 48 | 49 | Интервал отправки пакетов активности соединения, в миллисекундах 50 | 51 | ## disable-sni 52 | 53 | Указывает, отключать ли SNI (Server Name Indication) в TLS-рукопожатии. SNI используется для размещения нескольких HTTPS-сайтов на одном IP-адресе 54 | 55 | ## reduce-rtt 56 | 57 | Указывает, включать ли рукопожатие QUIC 0-RTT на клиенте. Это может сократить время установки соединения, но может увеличить риск атак повторного воспроизведения 58 | 59 | ## request-timeout 60 | 61 | Устанавливает время ожидания для установки соединения с прокси-сервером TUIC, в миллисекундах 62 | 63 | ## udp-relay-mode 64 | 65 | Устанавливает режим ретрансляции UDP-пакетов, может быть `native` или `quic` 66 | 67 | ## congestion-controller 68 | 69 | Устанавливает алгоритм контроля перегрузки, доступные варианты: `cubic`/`new_reno`/`bbr` 70 | 71 | ## max-udp-relay-packet-size 72 | 73 | Устанавливает максимальный размер ретранслируемого UDP-пакета, в байтах 74 | 75 | ## fast-open 76 | 77 | Указывает, включать ли Fast Open, что может сократить время установки соединения 78 | 79 | ## max-open-streams 80 | 81 | Устанавливает максимальное количество открытых потоков. Слишком много открытых потоков может повлиять на производительность -------------------------------------------------------------------------------- /docs/startup/faq.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | # - navigation 4 | - toc 5 | --- 6 | # FAQ 7 | 8 | ## Alpha and Meta Branch Differences 9 | 10 | The Alpha branch is the latest commit branch, while the Meta branch merges the code from the Alpha branch at regular intervals. The Meta branch is not necessarily more stable than the Alpha branch. 11 | 12 | ## Which file should I download? 13 | 14 | In`release`, the filename of each package includes several pieces of information, including: 15 | 16 | * Program name (`mihomo`) 17 | * Operating system (e.g., `android`, `darwin`, `freebsd`, `linux`, `windows`, etc.) 18 | * Architecture (e.g., `386`, `amd64`, `arm32v7`, `arm64`, etc.) 19 | * Compilation method: 20 | > 21 | > * `v1/2/3`: only for AMD64 platforms, used to mark [CPU instruction set level](https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels) 22 | > * ~~`default(not specified in file name)`: Default version compiled with GOAMD64=v3 tag.~~ 23 | > * ~~`compatible`: Compiled with GOAMD64=v1 tag for compatibility with specific OS or architecture.~~ 24 | > * `go120`: Compiled with Golang1.20 for compatibility with specific OS or architecture. 25 | > * `abi1/2`: ABI version for `loongarch64`, specific details can be found at 26 | > 27 | * Compile branch (e.g., `alpha`) 28 | * Git hash value of the commit (e.g., `f90066f`) 29 | 30 | You can choose the executable file you need based on these pieces of information. 31 | 32 | Check details between different architectural levels [here](https://go.dev/wiki/MinimumRequirements#amd64). 33 | 34 | Check details of system compatibility information about Golang version 1.20 [here](https://go.dev/doc/go1.20#ports). 35 | 36 | For macOS users: According to the [Go wiki](https://go.dev/doc/go1.25#darwin), Go 1.25 no longer supports macOS 11. macOS 11 users are advised to download the binary with the `go124` tag, macOS 10.15 users are advised to download the binary with the `go122` tag, and macOS 10.13 users are advised to download the binary with the `go120` tag. 37 | 38 | For Windows users: Currently, all official builds support Windows 7 and higher. (Unofficial builds are not guaranteed to support this; we maintain [our own forked version of Golang](https://github.com/MetaCubeX/go) for compiling.) 39 | 40 | For Linux users: According to the [go wiki](https://go.dev/doc/go1.24#linux), Go 1.24 only supports kernels 3.2 and higher. For kernels 2.6.32 to 3.1, please download the binary tagged `go123`. 41 | -------------------------------------------------------------------------------- /docs/startup/faq.ru.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | # - navigation 4 | - toc 5 | --- 6 | # Часто задаваемые вопросы 7 | 8 | ## Разница между ветками alpha и meta 9 | 10 | Ветка alpha - это ветка с последними коммитами. Ветка meta периодически объединяет код из ветки alpha. Ветка meta не обязательно стабильнее, чем ветка alpha. 11 | 12 | ## Какой файл мне скачать? 13 | 14 | В релизах имена пакетов содержат несколько параметров, включая: 15 | 16 | * Название программы (`mihomo`) 17 | * Операционная система (например, android, darwin, freebsd, linux, windows и т.д.) 18 | * Архитектура (например, 386, amd64, arm32v7, arm64 и т.д.) 19 | * Метод компиляции 20 | > 21 | > * `v1/2/3`: только для платформ AMD64, используется для обозначения [уровня набора инструкций ЦП](https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels) 22 | > * ~~`По умолчанию (без дополнительных отметок)`: версия по умолчанию, скомпилированная с тегом GOAMD64=v3~~ 23 | > * ~~`compatible`: скомпилирована с тегом GOAMD64=v1. Эта версия предназначена для совместимости с определенными операционными системами или архитектурами.~~ 24 | > * `go120`: скомпилирована с использованием Golang1.20. Эта версия предназначена для совместимости с определенными операционными системами или архитектурами. 25 | > * `abi1/2`: версия abi для `loongarch64` 26 | > 27 | * Ветка (alpha) 28 | * Значение git hash коммита (например, f90066f) 29 | 30 | Вы можете выбрать нужный исполняемый файл на основе этой информации. 31 | 32 | 👉[Узнайте больше](https://go.dev/wiki/MinimumRequirements#amd64) о тегах GOAMD64 33 | 34 | 👉[Узнайте больше](https://go.dev/doc/go1.20#ports) о системной совместимости версии Golang1.20 35 | 36 | 👉[Узнайте больше](http://www.loongnix.cn/zh/toolchain/Golang/downloads-Go1.21/index.html) о версиях abi для `loongarch64` 37 | 38 | Для пользователей macOS: согласно [Go wiki](https://go.dev/doc/go1.25#darwin), Go 1.25 больше не поддерживает macOS 11. Пользователям macOS 11 рекомендуется загрузить двоичный файл с тегом `go124`, пользователям macOS 10.15 рекомендуется загрузить двоичный файл с тегом `go122`, а пользователям macOS 10.13 рекомендуется загрузить двоичный файл с тегом `go120`. 39 | 40 | Для пользователей Windows: В настоящее время все официальные сборки поддерживают Windows 7 и выше. (Поддержка неофициальных сборок не гарантируется; мы используем [собственную форк-версию Golang](https://github.com/MetaCubeX/go) для компиляции.) 41 | 42 | Для пользователей Linux: Согласно [go wiki](https://go.dev/doc/go1.24#linux), Go 1.24 поддерживает только ядра версии 3.2 и выше. Для ядер версий 2.6.32–3.1, пожалуйста, загрузите исполняемый файл с тегом `go123`. 43 | -------------------------------------------------------------------------------- /docs/config/dns/diagram.ru.md: -------------------------------------------------------------------------------- 1 | # Процесс разрешения 2 | 3 | ## Пример конфигурации 4 | 5 | ```{.yaml linenums="1"} 6 | dns: 7 | nameserver: 8 | - https://doh.pub/dns-query 9 | fallback: 10 | - https://8.8.8.8/dns-query 11 | direct-nameserver: 12 | - system 13 | nameserver-policy: 14 | "geosite:cn,private": 15 | - https://doh.pub/dns-query 16 | - https://dns.alidns.com/dns-query 17 | fallback-filter: 18 | geoip: true 19 | geoip-code: CN 20 | geosite: 21 | - gfw 22 | ipcidr: 23 | - 240.0.0.0/4 24 | domain: 25 | - '+.google.com' 26 | - '+.facebook.com' 27 | - '+.youtube.com' 28 | 29 | rules: 30 | - DOMAIN-SUFFIX,google.com,PROXY 31 | - GEOIP,CN,DIRECT 32 | - MATCH,PROXY 33 | ``` 34 | 35 | ## Процесс 36 | 37 | !!! note "" 38 | Эта часть описывает только процесс обработки в модуле dns 39 | 40 | !!! warning "" 41 | ~~Повторное разрешение через direct-nameserver раньше работало только для TCP-соединений~~ 42 | Начиная с v1.19.10, повторное разрешение через direct-nameserver также применяется к UDP-соединениям (для входящих Tun только в режиме Fakeip) 43 | 44 | ```mermaid 45 | flowchart TD 46 | Rule[Сопоставление правил] 47 | Domain[Сопоставление с правилами для доменов] 48 | IP[Сопоставление с правилами для целевых IP] 49 | Resolve[Разрешение домена] 50 | 51 | NameServer[Использование nameserver для запроса] 52 | Policy[Сопоставление с nameserver-policy] 53 | Concurrent[Параллельный запрос с nameserver и fallback] 54 | Filter[Сопоставление с fallback-filter] 55 | DirectNS[Повторное разрешение с direct-nameserver] 56 | 57 | GetIP[Получение IP из запроса] 58 | 59 | Proxy[Отправка домена прокси] 60 | Direct[Прямое подключение с использованием IP] 61 | 62 | Rule --> Domain 63 | Rule --> IP 64 | 65 | Domain -- Домен соответствует правилу DIRECT --> Resolve 66 | Domain -- Домен соответствует правилу DIRECT и настроен direct-nameserver --> DirectNS 67 | 68 | IP --> Resolve 69 | 70 | Resolve -- Настроен nameserver-policy --> Policy 71 | Policy -- Нет соответствия --> NameServer 72 | Policy --> GetIP 73 | Resolve -- Не настроен nameserver-policy --> NameServer 74 | 75 | NameServer -- Настроен fallback --> Concurrent 76 | Concurrent --> Filter 77 | Filter --> GetIP 78 | NameServer -- Не настроен fallback --> GetIP 79 | 80 | GetIP -- Соответствует DIRECT и настроен direct-nameserver --> DirectNS 81 | DirectNS --> Direct 82 | 83 | GetIP -- IP соответствует правилу для прокси --> Proxy[Отправка домена прокси] 84 | Domain -- Домен соответствует правилу для прокси --> Proxy 85 | 86 | GetIP -- IP соответствует правилу DIRECT --> Direct 87 | ``` -------------------------------------------------------------------------------- /docs/config/proxies/dialer-proxy.ru.md: -------------------------------------------------------------------------------- 1 | # dialer-proxy 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "ss1" 6 | dialer-proxy: dialer 7 | ... 8 | 9 | - name: "ss2" 10 | ... 11 | 12 | proxy-groups: 13 | - name: dialer 14 | type: select 15 | proxies: 16 | - ss2 17 | ``` 18 | 19 | Указывает, что текущий `proxies` устанавливает сетевые соединения через `dialer-proxy`. Значение может быть `name` из [группы политик](../proxy-groups/index.md) или [исходящих прокси](../proxies/index.md) 20 | 21 | В приведенном примере ss1 устанавливает соединение через ss2 22 | 23 | При использовании ss1 в качестве прокси образуется цепочка `ядро ---ss1--> обертка ss2 ===ss2==> сервер ss2 ---ss1--> сервер ss1 --> цель` 24 | 25 | Итоговые результаты: 26 | 27 | * Когда браузер обращается к сайту по IP-запросу, отображается только IP-адрес ss1 (это означает, что целевой сайт не знает о существовании ss2). 28 | * Для внешнего мира ядро, по всей видимости, обращается только к ss2 (это означает, что ваш провайдер широкополосного доступа не знает о существовании ss1). 29 | * Только сервер ss2 знает, что происходит обращение к ss1 (и сервер ss2 также знает, что происходит обращение только к ss1, а не к целевому сайту). 30 | 31 | ## Миграция relay 32 | 33 | Тип proxy-group `relay` будет устаревшим, а proxy-group напрямую не поддерживает dialer-proxy. Поэтому для некоторых сценариев использования приведён следующий пример перехода. 34 | 35 | ### Вариант: relay с несколькими select 36 | 37 | Исходная конфигурация: 38 | 39 | ```{.yaml linenums="1"} 40 | proxies: 41 | - { name: "proxy1", type: "socks" } 42 | - { name: "proxy2", type: "socks" } 43 | - { name: "proxy3", type: "socks" } 44 | - { name: "proxy4", type: "socks" } 45 | proxy-groups: 46 | - { name: "relay-proxy", type: relay, proxies: ["select1", "select2"] } 47 | - { name: "select1", type: select, proxies: ["proxy1", "proxy2"] } 48 | - { name: "select2", type: select, proxies: ["proxy3", "proxy4"] } 49 | rules: 50 | - MATCH,relay-proxy 51 | ``` 52 | 53 | При миграции на схему с dialer-proxy необходимо определить proxy3 и proxy4 через proxy-provider, а также с помощью override задать для всех прокси этого провайдера dialer-proxy, как показано ниже: 54 | 55 | ```{.yaml linenums="1"} 56 | proxies: 57 | - { name: "proxy1", type: "socks" } 58 | - { name: "proxy2", type: "socks" } 59 | proxy-groups: 60 | - { name: "select1", type: select, proxies: ["proxy1", "proxy2"] } 61 | - { name: "select2", type: select, use: ["provider1"] } 62 | proxy-providers: 63 | provider1: 64 | type: inline 65 | override: 66 | dialer-proxy: select1 67 | payload: 68 | - { name: "proxy3", type: "socks" } 69 | - { name: "proxy4", type: "socks" } 70 | rules: 71 | - MATCH,select2 72 | ``` 73 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/ss.md: -------------------------------------------------------------------------------- 1 | # ShadowSocks 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: ss-in 6 | type: shadowsocks 7 | port: 10001 8 | listen: 0.0.0.0 9 | cipher: 2022-blake3-aes-256-gcm 10 | password: vlmpIPSyHH6f4S8WVPdRIHIlzmB+GIRfoH3aNJ/t9Gg= 11 | udp: true 12 | # shadow-tls: 13 | # enable: false # 设置为true时开启 14 | # version: 3 # 支持v1/v2/v3 15 | # password: password # v2设置项 16 | # users: # v3设置项 17 | # - name: 1 18 | # password: password 19 | # handshake: 20 | # dest: test.com:443 21 | # kcp-tun: 22 | # enable: false 23 | # key: it's a secrect # pre-shared secret between client and server 24 | # crypt: aes # aes, aes-128, aes-192, salsa20, blowfish, twofish, cast5, 3des, tea, xtea, xor, none, null 25 | # mode: fast # profiles: fast3, fast2, fast, normal, manual 26 | # conn: 1 # set num of UDP connections to server 27 | # autoexpire: 0 # set auto expiration time(in seconds) for a single UDP connection, 0 to disable 28 | # scavengettl: 600 # set how long an expired connection can live (in seconds) 29 | # mtu: 1350 # set maximum transmission unit for UDP packets 30 | # sndwnd: 128 # set send window size(num of packets) 31 | # rcvwnd: 512 # set receive window size(num of packets) 32 | # datashard: 10 # set reed-solomon erasure coding - datashard 33 | # parityshard: 3 # set reed-solomon erasure coding - parityshard 34 | # dscp: 0 # set DSCP(6bit) 35 | # nocomp: false # disable compression 36 | # acknodelay: false # flush ack immediately when a packet is received 37 | # nodelay: 0 38 | # interval: 50 39 | # resend: 0 40 | # sockbuf: 4194304 # per-socket buffer in bytes 41 | # smuxver: 1 # specify smux version, available 1,2 42 | # smuxbuf: 4194304 # the overall de-mux buffer in bytes 43 | # streambuf: 2097152 # per stream receive buffer in bytes, smux v2+ 44 | # keepalive: 10 # seconds between heartbeats 45 | ``` 46 | 47 | ## [通用字段](./index.md) 48 | 49 | ## 协议配置 50 | 51 | ### cipher 52 | 53 | 加密方法 54 | 55 | | 方法 | 密码长度 | 56 | | ----------------------------- | -------- | 57 | | 2022-blake3-aes-128-gcm | 16 | 58 | | 2022-blake3-aes-256-gcm | 32 | 59 | | 2022-blake3-chacha20-poly1305 | 32 | 60 | | none | / | 61 | | aes-128-gcm | / | 62 | | aes-192-gcm | / | 63 | | aes-256-gcm | / | 64 | | chacha20-ietf-poly1305 | / | 65 | | xchacha20-ietf-poly1305 | / | 66 | 67 | ### password 68 | 69 | | 方法 | 密码格式 | 70 | | ---- | ------------------------------------ | 71 | | none | / | 72 | | 2022 | `openssl rand --base64 <密码长度>` | 73 | | 其他 | 任意字符串 | 74 | 75 | ### udp 76 | 77 | 是否监听 UDP 78 | -------------------------------------------------------------------------------- /docs/config/proxies/tls.en.md: -------------------------------------------------------------------------------- 1 | # TLS Configuration 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "tls-example" 6 | tls: true 7 | sni: example.com 8 | servername: example.com 9 | fingerprint: xxx 10 | alpn: 11 | - h2 12 | - http/1.1 13 | skip-cert-verify: true 14 | # certificate: xxxx 15 | # private-key: xxx 16 | client-fingerprint: random 17 | reality-opts: 18 | public-key: xxxx 19 | short-id: xxxx 20 | support-x25519mlkem768: true 21 | ech-opts: 22 | enable: true 23 | config: base64_encoded_config 24 | ``` 25 | 26 | ## tls 27 | 28 | Enables TLS, applicable only to protocols that use `tls`, with the `trojan` protocol requiring it to be enabled. 29 | 30 | ## sni/servername 31 | 32 | The server name indication, referred to as `servername` in [`VMess`](./vmess.md)/[`VLESS`](./vless.md). If left empty, it defaults to the address in `server`. 33 | 34 | ## fingerprint 35 | 36 | Certificate fingerprint, applicable only to protocols that use `tls`. 37 | 38 | ## alpn 39 | 40 | List of supported Application Layer Protocol Negotiation options, arranged in order of priority. 41 | 42 | If both peers support ALPN, the selected protocol will be one from this list; if there are no mutually supported protocols, the connection will fail. 43 | 44 | Refer to [Application-Layer Protocol Negotiation](https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation) 45 | 46 | ## skip-cert-verify 47 | 48 | Bypasses certificate verification, applicable only to protocols that use `tls`. 49 | 50 | ## certificate 51 | 52 | If filled, this enables [mTLS](https://www.cloudflare.com/learning/access-management/what-is-mutual-tls/) (must be filled in with private-key). The content is the certificate in PEM format or the path to the certificate. 53 | 54 | ## private-key 55 | 56 | If filled, this enables [mTLS](https://www.cloudflare.com/learning/access-management/what-is-mutual-tls/) (must be filled in with certificate). The content is the private key corresponding to the certificate in PEM format or the path to the private key. 57 | 58 | ## client-fingerprint 59 | 60 | Client uTLS fingerprint, applicable only to [`VMess`](./vmess.md)/[`VLESS`](./vless.md)/[`Trojan`](./trojan.md) protocols. For optional details, refer to [Global Client Fingerprint](../general.md#global-client-fingerprint). 61 | 62 | ## reality-opts 63 | 64 | Configuration for reality; if not empty, reality will be enabled. 65 | 66 | ### reality-opts.public-key 67 | 68 | Public key corresponding to the reality server's private key. 69 | 70 | ### reality-opts.short-id 71 | 72 | One of the server's short IDs. 73 | 74 | ### reality-opts.support-x25519mlkem768 75 | 76 | Support for X25519-MLKEM768 key exchange. 77 | 78 | ## ech-opts 79 | 80 | ### ech-opts.enable 81 | 82 | Enables ECH (Encrypted Client Hello). If not empty, ECH will be enabled. 83 | 84 | ### ech-opts.config 85 | 86 | Base64-encoded configuration for ECH. 87 | 88 | -------------------------------------------------------------------------------- /docs/config/proxies/vless.ru.md: -------------------------------------------------------------------------------- 1 | # VLESS 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "vless" 6 | type: vless 7 | server: server 8 | port: 443 9 | udp: true 10 | uuid: uuid 11 | flow: xtls-rprx-vision 12 | packet-encoding: xudp 13 | 14 | tls: true 15 | servername: example.com 16 | alpn: 17 | - h2 18 | - http/1.1 19 | fingerprint: xxxx 20 | client-fingerprint: chrome 21 | skip-cert-verify: true 22 | reality-opts: 23 | public-key: xxxx 24 | short-id: xxxx 25 | encryption: "" 26 | 27 | network: tcp 28 | 29 | smux: 30 | enabled: false 31 | ``` 32 | 33 | !!! note 34 | Контроль потока `xtls-*` в Meta фактически эквивалентен `xtls-*-udp443` в Xray-core. Если нужно перехватывать UDP-трафик на порту 443, используйте логическое правило: `AND,((NETWORK,UDP),(DST-PORT,443)),REJECT` 35 | 36 | [Общие поля](./index.md) 37 | 38 | [Поля TLS](./tls.md) 39 | 40 | ## uuid 41 | 42 | Обязательно, ID пользователя VLESS 43 | 44 | ## flow 45 | 46 | Подпротокол VLESS, доступное значение - `xtls-rprx-vision` 47 | 48 | ## packet-encoding 49 | 50 | Кодирование UDP-пакетов, если пусто, используется оригинальное кодирование. Возможные значения: `packetaddr` (поддерживается `v2ray 5+`) / `xudp` (поддерживается `xray`) 51 | 52 | ## encryption 53 | 54 | Конфигурация клиента шифрования Vless: 55 | 56 | `encryption: "mlkem768x25519plus.native/xorpub/random.1rtt/0rtt.(длина заполнения).(пробел заполнения).(Пароль X25519).(Клиент ML-KEM-768)..."` 57 | 58 | (XTLS Vision в native/xorpub может быть разделен. Используется только режим 1-RTT. / Если количество секунд в тикете, отправленном сервером, не равно нулю, используется мультиплексирование 0-RTT.) 59 | 60 | / Можно выбрать только один вариант. Далее следует как минимум одна строка base64. Разрешено неограниченное количество конкатенаций. Для генерации значения используйте `mihomo generate vless-x25519` и `mihomo generate vless-mlkem768`. При замене значения удалите скобки. 61 | 62 | Заполнение — необязательный параметр, применяемый только к 1-RTT для устранения влияния длины рукопожатия. Значение по умолчанию для обоих вариантов — . "100-111-1111.75-0-111.50-0-3333": 63 | 64 | * После приветствия клиент/сервер с 1-RTT добавить случайное дополнение длиной от 111 до 1111 байт с вероятностью 100%. 65 | 66 | * Ожидать в течение случайного времени от 0 до 111 миллисекунд («вероятность от-до») с вероятностью 75%. 67 | 68 | * Повторно отправить случайное дополнение длиной от 0 до 3333 байт с вероятностью 50% (если дополнение равно 0, не использовать Write()). 69 | 70 | * Сервер и клиент могут задавать различные параметры дополнения, которые можно объединять неограниченное количество раз в порядке len и gap. Первое дополнение должно иметь 100% вероятность и быть не менее 35 байт. 71 | 72 | ## network 73 | 74 | Транспортный уровень, поддерживает ws/http/h2/grpc, если не настроен или настроен с другим значением, используется tcp 75 | 76 | См. [Конфигурация транспортного уровня](./transport.md) 77 | -------------------------------------------------------------------------------- /docs/config/proxies/transport.ru.md: -------------------------------------------------------------------------------- 1 | # Конфигурация транспортного уровня 2 | 3 | === "http" 4 | ```{.yaml linenums="1"} 5 | proxies: 6 | - name: "http-opts-example" 7 | type: xxxxx 8 | network: http 9 | http-opts: 10 | method: "GET" 11 | path: 12 | - '/' 13 | - '/video' 14 | headers: 15 | Connection: 16 | - keep-alive 17 | ``` 18 | 19 | === "h2" 20 | ```{.yaml linenums="1"} 21 | proxies: 22 | - name: "h2-opts-example" 23 | type: xxxxx 24 | network: h2 25 | h2-opts: 26 | host: 27 | - example.com 28 | path: / 29 | ``` 30 | 31 | === "grpc" 32 | ```{.yaml linenums="1"} 33 | proxies: 34 | - name: "grpc-opts-example" 35 | type: xxxxx 36 | network: grpc 37 | grpc-opts: 38 | grpc-service-name: example 39 | ``` 40 | === "ws" 41 | ```{.yaml linenums="1"} 42 | proxies: 43 | - name: "ws-opts-example" 44 | type: xxxxx 45 | network: ws 46 | ws-opts: 47 | path: /path 48 | headers: 49 | Host: example.com 50 | max-early-data: 51 | early-data-header-name: 52 | v2ray-http-upgrade: false 53 | v2ray-http-upgrade-fast-open: false 54 | ``` 55 | 56 | ## http-opts 57 | 58 | Настройки транспортного уровня `http`, действуют только когда транспортный уровень - `http` 59 | 60 | ### http-opts.method 61 | 62 | Метод HTTP-запроса 63 | 64 | ### http-opts.path 65 | 66 | Путь HTTP-запроса 67 | 68 | ### http-opts.headers 69 | 70 | Заголовки HTTP-запроса 71 | 72 | !!! note 73 | Транспортный уровень H2 в Mihomo не реализует функцию мультиплексирования. Если вам нужно мультиплексирование, в Mihomo рекомендуется использовать протокол gRPC или sing-mux 74 | 75 | ## h2-opts 76 | 77 | Настройки транспортного уровня `h2`, действуют только когда транспортный уровень - `h2` 78 | 79 | ### h2-opts.host 80 | 81 | Список доменных имен хостов, если указан, клиент выберет случайным образом, сервер будет проверять 82 | 83 | ### h2-opts.path 84 | 85 | Путь HTTP-запроса 86 | 87 | ## grpc-opts 88 | 89 | Настройки транспортного уровня `grpc`, действуют только когда транспортный уровень - `grpc` 90 | 91 | ### grpc-opts.grpc-service-name 92 | 93 | Имя сервиса gRPC 94 | 95 | ## ws-opts 96 | 97 | Настройки транспортного уровня `ws`, действуют только когда транспортный уровень - `ws` 98 | 99 | ### ws-opts.path 100 | 101 | Путь запроса 102 | 103 | ### ws-opts.headers 104 | 105 | Заголовки запроса 106 | 107 | ### ws-opts.max-early-data 108 | 109 | Порог длины первого пакета Early Data 110 | 111 | ### ws-opts.early-data-header-name 112 | 113 | Имя заголовка для Early Data 114 | 115 | ### ws-opts.v2ray-http-upgrade 116 | 117 | Использовать HTTP upgrade 118 | 119 | ### ws-opts.v2ray-http-upgrade-fast-open 120 | 121 | Включить fast open для HTTP upgrade -------------------------------------------------------------------------------- /docs/config/proxies/index.md: -------------------------------------------------------------------------------- 1 | # 通用字段 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "ss" 6 | type: ss 7 | server: server 8 | port: 443 9 | ip-version: ipv4 10 | udp: true 11 | interface-name: eth0 12 | routing-mark: 1234 13 | tfo: false 14 | mptcp: false 15 | 16 | dialer-proxy: ss1 17 | 18 | smux: 19 | enabled: true 20 | protocol: smux 21 | max-connections: 4 22 | min-streams: 4 23 | max-streams: 0 24 | statistic: false 25 | only-tcp: false 26 | padding: true 27 | brutal-opts: 28 | enabled: true 29 | up: 50 30 | down: 100 31 | ``` 32 | 33 | 代理节点,内容为数组 34 | 35 | ## name 36 | 37 | 必须,代理名称,不可重复 38 | 39 | ## type 40 | 41 | 必须,代理节点类型 42 | 43 | ## server 44 | 45 | 必须,代理节点服务器 (域名/ip) 46 | 47 | ## port 48 | 49 | 必须项,代理节点端口 50 | 51 | ## ip-version 52 | 53 | 代理软件出站使用的 ip 版本,如果不是 direct,则会影响 server 为域名时使用的 ip 地址 54 | 55 | 可选:`dual`/`ipv4`/`ipv6`/`ipv4-prefer`/`ipv6-prefer` ,默认使用 `dual` 56 | 57 | * ipv4: 仅使用 IPv4 58 | * ipv6: 仅使用 IPv6 59 | * ipv4-prefer: 优先使用 IPv4,对于 TCP 会进行双栈解析,并发链接但是优先使用 IPv4 链接,UDP 则为双栈解析,获取结果中的第一个 IPv4 60 | * ipv6-prefer:优先使用 IPv6,对于 TCP 会进行双栈解析,并发链接但是优先使用 IPv6 链接,UDP 则为双栈解析,获取结果中的第一个 IPv6 61 | 62 | ## udp 63 | 64 | 是否允许 UDP 通过代理,默认为 `false` 65 | 66 | !!! note 67 | 此选项在 `TUIC` 等基于 `UDP` 的协议以及 `direct` 和 `dns` 类型中默认开启 68 | 69 | ## interface-name 70 | 71 | 指定节点绑定的接口,从此接口发起连接 72 | 73 | ## routing-mark 74 | 75 | 节点发起连接时附加的路由标记 76 | 77 | ## tfo 78 | 79 | 启用 `TCP Fast Open`, 仅生效于 `TCP` 协议 80 | 81 | ## mptcp 82 | 83 | 启用 `TCP Multi Path`, 仅生效于 `TCP` 协议 84 | 85 | ## dialer-proxy 86 | 87 | 指定当前 `proxies` 通过 `dialer-proxy` 建立网络连接,值可以为[策略组](../proxy-groups/index.md)/[出站代理](../proxies/index.md)的 `name`,用法可参考[dialer-proxy文档](../proxies/dialer-proxy.md) 88 | 89 | ## smux 90 | 91 | sing-mux,仅限使用 tcp 传输的协议 92 | 93 | ### smux.enabled 94 | 95 | 是否启用多路复用 96 | 97 | ### smux.protocol 98 | 99 | 多路复用协议,支持如下协议,默认使用 `h2mux` 100 | 101 | | 协议 | 描述 | 102 | |---------|--------------------------------------| 103 | | `smux` | | 104 | | `yamux` | | 105 | | `h2mux` | | 106 | 107 | ### smux.max-connections 108 | 109 | 最大连接数量 110 | 111 | 与 `max-streams` 冲突 112 | 113 | ### smux.min-streams 114 | 115 | 在打开新连接之前,连接中的最小多路复用流数量 116 | 117 | 与 `max-streams` 冲突 118 | 119 | ### smux.max-streams 120 | 121 | 在打开新连接之前,连接中的最大多路复用流数量 122 | 123 | 与 `max-connections` 和 `min-streams` 冲突 124 | 125 | ### smux.statistic 126 | 127 | 控制是否将底层连接显示在面板中,方便打断底层连接 128 | 129 | ### smux.only-tcp 130 | 131 | 仅允许 tcp,如果设置为 true,smux 的设置将不会对 udp 生效,udp 连接会直接走节点默认 udp 协议传输 132 | 133 | ### smux.padding 134 | 135 | 启用填充 136 | 137 | ### smux.brutal-opts 138 | 139 | TCP Brutal 设置 140 | 141 | #### smux.brutal-opts.enabled 142 | 143 | 启用 TCP Brutal 拥塞控制算法 144 | 145 | #### smux.brutal-opts.up/down 146 | 147 | 上传和下载带宽,以默认以 Mbps 为单位 148 | -------------------------------------------------------------------------------- /docs/config/inbound/listeners/vless.md: -------------------------------------------------------------------------------- 1 | # VLESS 2 | 3 | ```{.yaml linenums="1"} 4 | listeners: 5 | - name: vless-in-1 6 | type: vless 7 | port: 10817 # 支持使用ports格式,例如200,302 or 200,204,401-429,501-503 8 | listen: 0.0.0.0 9 | # rule: sub-rule-name1 # 默认使用 rules,如果未找到 sub-rule 则直接使用 rules 10 | # proxy: proxy # 如果不为空则直接将该入站流量交由指定 proxy 处理 (当 proxy 不为空时,这里的 proxy 名称必须合法,否则会出错) 11 | users: 12 | - username: 1 13 | uuid: 9d0cb9d0-964f-4ef6-897d-6c6b3ccf9e68 14 | flow: xtls-rprx-vision 15 | # ws-path: "/" # 如果不为空则开启 websocket 传输层 16 | # grpc-service-name: "GunService" # 如果不为空则开启 grpc 传输层 17 | # ------------------------- 18 | # vless encryption服务端配置: 19 | # (原生外观 / 只 XOR 公钥 / 全随机数。1-RTT 每次下发随机 300 到 600 秒的 ticket 以便 0-RTT 复用 / 只允许 1-RTT) 20 | # 填写 "600s" 会每次随机取 50% 到 100%,即相当于填写 "300-600s" 21 | # / 是只能选一个,后面 base64 至少一个,无限串联,使用 mihomo generate vless-x25519 和 mihomo generate vless-mlkem768 生成,替换值时需去掉括号 22 | # 23 | # Padding 是可选的参数,仅作用于 1-RTT 以消除握手的长度特征,双端默认值均为 "100-111-1111.75-0-111.50-0-3333": 24 | # 在 1-RTT client/server hello 后以 100% 的概率粘上随机 111 到 1111 字节的 padding 25 | # 以 75% 的概率等待随机 0 到 111 毫秒("probability-from-to") 26 | # 再次以 50% 的概率发送随机 0 到 3333 字节的 padding(若为 0 则不 Write()) 27 | # 服务端、客户端可以设置不同的 padding 参数,按 len、gap 的顺序无限串联,第一个 padding 需概率 100%、至少 35 字节 28 | # ------------------------- 29 | # decryption: "mlkem768x25519plus.native/xorpub/random.600s(300-600s)/0s.(padding len).(padding gap).(X25519 PrivateKey).(ML-KEM-768 Seed)..." 30 | # 下面两项如果填写则开启 tls(需要同时填写) 31 | # certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径 32 | # private-key: ./server.key # 证书对应的私钥 PEM 格式,或者私钥路径 33 | # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空 34 | # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify" 35 | # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径 36 | # 如果填写则开启ech(可由 mihomo generate ech-keypair <明文域名> 生成) 37 | # ech-key: | 38 | # -----BEGIN ECH KEYS----- 39 | # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK 40 | # madSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz 41 | # dC5jb20AAA== 42 | # -----END ECH KEYS----- 43 | # 如果填写reality-config则开启reality(注意不可与certificate和private-key同时填写) 44 | reality-config: 45 | dest: test.com:443 46 | private-key: jNXHt1yRo0vDuchQlIP6Z0ZvjT3KtzVI-T4E7RoLJS0 # 可由 mihomo generate reality-keypair 命令生成 47 | short-id: 48 | - 0123456789abcdef 49 | server-names: 50 | - test.com 51 | #下列两个 limit 为选填,可对未通过验证的回落连接限速,bytesPerSec 默认为 0 即不启用 52 | #回落限速是一种特征,不建议启用,如果您是面板/一键脚本开发者,务必让这些参数随机化 53 | limit-fallback-upload: 54 | after-bytes: 0 # 传输指定字节后开始限速 55 | bytes-per-sec: 0 # 基准速率(字节/秒) 56 | burst-bytes-per-sec: 0 # 突发速率(字节/秒),大于 bytesPerSec 时生效 57 | limit-fallback-download: 58 | after-bytes: 0 # 传输指定字节后开始限速 59 | bytes-per-sec: 0 # 基准速率(字节/秒) 60 | burst-bytes-per-sec: 0 # 突发速率(字节/秒),大于 bytesPerSec 时生效 61 | ### 注意,对于vless listener, 至少需要填写 “certificate和private-key” 或 “reality-config” 或 “decryption” 的其中一项 ### 62 | ``` 63 | -------------------------------------------------------------------------------- /docs/config/proxies/tls.ru.md: -------------------------------------------------------------------------------- 1 | # Конфигурация TLS 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "tls-example" 6 | tls: true 7 | sni: example.com 8 | servername: example.com 9 | fingerprint: xxx 10 | alpn: 11 | - h2 12 | - http/1.1 13 | skip-cert-verify: true 14 | # certificate: xxxx 15 | # private-key: xxx 16 | client-fingerprint: random 17 | reality-opts: 18 | public-key: xxxx 19 | short-id: xxxx 20 | support-x25519mlkem768: true 21 | ech-opts: 22 | enable: true 23 | config: base64_encoded_config 24 | ``` 25 | 26 | ## tls 27 | 28 | Включить tls, применяется только к протоколам, использующим `tls`, протокол `trojan` принудительно включает 29 | 30 | ## sni/servername 31 | 32 | Server Name Indication, в [`VMess`](./vmess.md)/[`VLESS`](./vless.md) - `servername`, если пусто, то используется адрес из поля `server` 33 | 34 | ## fingerprint 35 | 36 | Отпечаток сертификата, применяется только к протоколам, использующим `tls`, можно получить с помощью 37 | ```bash 38 | openssl x509 -noout -fingerprint -sha256 -inform pem -in yourcert.pem 39 | ``` 40 | 41 | ## alpn 42 | 43 | Список поддерживаемых протоколов согласования прикладного уровня, расположенных в порядке приоритета. 44 | 45 | Если обе стороны поддерживают ALPN, выбранный протокол будет одним из этого списка, если нет взаимно поддерживаемых протоколов, соединение не будет установлено. 46 | 47 | См. [Application-Layer Protocol Negotiation](https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation) 48 | 49 | ## skip-cert-verify 50 | 51 | Пропустить проверку сертификата, применяется только к протоколам, использующим `tls` 52 | 53 | ## certificate 54 | 55 | Если заполнено, включает [mTLS](https://www.cloudflare.com/learning/access-management/what-is-mutual-tls/) (необходимо указать private-key). Содержимое — сертификат в формате PEM или путь к сертификату. 56 | 57 | ## private-key 58 | 59 | Если заполнено, включает [mTLS](https://www.cloudflare.com/learning/access-management/what-is-mutual-tls/) (необходимо указать certificate). Содержимое — закрытый ключ, соответствующий сертификату в формате PEM, или путь к закрытому ключу. 60 | 61 | ## client-fingerprint 62 | 63 | Отпечаток клиента utls, применяется только к протоколам [`VMess`](./vmess.md)/[`VLESS`](./vless.md)/[`Trojan`](./trojan.md), возможные значения см. [глобальный отпечаток клиента](../general.md#_14) 64 | 65 | ## reality-opts 66 | 67 | Настройки reality, если не пусто, включает reality 68 | 69 | ### reality-opts.public-key 70 | 71 | Публичный ключ, соответствующий приватному ключу сервера reality 72 | 73 | ### reality-opts.short-id 74 | 75 | Один из short id сервера 76 | 77 | ### reality-opts.support-x25519mlkem768 78 | 79 | Поддержка обмена ключами X25519-MLKEM768. 80 | 81 | ## ech-opts 82 | 83 | Настройки ECH (Encrypted Client Hello), если `enable` установлено в `true`, то ECH будет включен. 84 | 85 | ### ech-opts.enable 86 | 87 | Включает ECH (Encrypted Client Hello). Если не пусто, то ECH будет включен. 88 | 89 | ### ech-opts.config 90 | 91 | Конфигурация ECH в base64 формате, которая будет использоваться для установления защищенного соединения. 92 | -------------------------------------------------------------------------------- /docs/startup/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | # - navigation 4 | - toc 5 | --- 6 | 7 | To start using Mihomo, you can choose one of the following installation methods for your current system. 8 | 9 | ## Using Precompiled Binary Files 10 | 11 | Please select and download the binary file corresponding to your common operating system from the options below. 12 | 13 | === "Windows" 14 | === "amd64/x86_64" 15 |
    加载中...
16 | === "386/x86_32" 17 |
    加载中...
18 | === "arm64/armv8" 19 |
    加载中...
20 | === "armv7" 21 |
    加载中...
22 | 23 | === "Linux" 24 | === "amd64/x86_64" 25 |
    加载中...
26 | === "386/x86_32" 27 |
    加载中...
28 | === "arm64/armv8" 29 |
    加载中...
30 | === "armv7" 31 |
    加载中...
32 | === "riscv64" 33 |
    加载中...
34 | === "mips" 35 |
    加载中...
36 | 37 | === "MacOS" 38 | === "amd64/x86_64" 39 |
    加载中...
40 | === "arm64/armv8" 41 |
    加载中...
42 | 43 | === "FreeBSD" 44 | === "amd64/x86_64" 45 |
    加载中...
46 | === "386/x86_32" 47 |
    加载中...
48 | === "arm64/armv8" 49 |
    加载中...
50 | 51 | === "Android" 52 | === "arm64" 53 |
    加载中...
54 | 55 | 89 | -------------------------------------------------------------------------------- /docs/config/proxy-groups/index.md: -------------------------------------------------------------------------------- 1 | # 通用字段 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-groups: 5 | - name: "proxy" 6 | type: select 7 | proxies: 8 | - DIRECT 9 | - ss 10 | use: 11 | - provider1 12 | - provider1 13 | 14 | url: 'https://www.gstatic.com/generate_204' 15 | interval: 300 16 | lazy: true 17 | timeout: 5000 18 | max-failed-times: 5 19 | 20 | disable-udp: true 21 | interface-name: en0 22 | routing-mark: 11451 23 | include-all: false 24 | include-all-proxies: false 25 | include-all-providers: false 26 | filter: "(?i)港|hk|hongkong|hong kong" 27 | exclude-filter: "美|日" 28 | exclude-type: "Shadowsocks|Http" 29 | expected-status: 204 30 | hidden: true 31 | icon: xxx 32 | ``` 33 | 34 | ## name 35 | 36 | 必须,策略组的名字 37 | 38 | !!! note 39 | 如有特殊符号,应当使用引号将其包裹 40 | 41 | ## type 42 | 43 | 必须,策略组的类型 44 | 45 | ## proxies 46 | 47 | 引入[出站代理](../proxies/index.md)或其他策略组 48 | 49 | ## use 50 | 51 | 引入[代理集合](../proxy-providers/index.md) 52 | 53 | ## url 54 | 55 | 健康检查测试地址 56 | 57 | !!! note 58 | 只会检查代理组的 proxies 字段的代理,不会检查代理集合(proxy-providers)的代理(通过 use 引入的)。 59 | 60 | ## interval 61 | 62 | 健康检查间隔,如不为 0 则启用定时测试,单位为秒 63 | 64 | ## lazy 65 | 66 | 懒惰状态,默认为`true`,未选择到当前策略组时,不进行测试 67 | 68 | ## timeout 69 | 70 | 健康检查超时时间,单位为毫秒 71 | 72 | ## max-failed-times 73 | 74 | 最大失败次数,超过则触发一次强制健康检查,默认 5 75 | 76 | ## disable-udp 77 | 78 | 禁用该策略组的`UDP` 79 | 80 | ## interface-name 81 | 82 | !!! warning 83 | 代理组中的 interface-name 已弃用,请使用代理节点中的[interface-name](../proxies/index.md#interface-name) 84 | 85 | 指定策略组的[出站接口](../general.md#_11) 86 | 87 | !!! info "" 88 | 优先级: 代理节点 > 代理策略 > 全局 89 | 90 | ## routing-mark 91 | 92 | !!! warning 93 | 代理组中的 routing-mark 已弃用,请使用代理节点中的[routing-mark](../proxies/index.md#routing-mark) 94 | 95 | 策略组出站时附带[路由标记](../general.md#_12) 96 | 97 | !!! info "" 98 | 优先级: 代理节点 > 代理策略 > 全局 99 | 100 | ## include-all 101 | 102 | 引入所有[出站代理](../proxies/index.md)以及[代理集合](../proxy-providers/index.md),顺序将按照名称排序 103 | 104 | !!! info "" 105 | 引入不包含策略组,可在[proxies](./index.md#proxies)引入其他策略组 106 | 107 | ## include-all-proxies 108 | 109 | 引入所有[出站代理](../proxies/index.md),顺序将按照名称排序 110 | 111 | !!! info "" 112 | 引入不包含策略组,可在[`proxies`](./index.md#proxies)引入其他策略组 113 | 114 | ## include-all-providers 115 | 116 | 引入所有[代理集合](../proxy-providers/index.md),顺序将按照名称排序 117 | 118 | !!! info "" 119 | 会使[引入代理集合](./index.md#use)失效 120 | 121 | ## filter 122 | 123 | 筛选满足关键词或[正则表达式](https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md)的节点,可以使用 ` 区分多个正则表达式 124 | 125 | !!! info "" 126 | 仅作用于引入代理集合以及[引入所有出站代理](./index.md#include-all-proxies) 127 | 128 | ## exclude-filter 129 | 130 | 排除满足关键词或[正则表达式](https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md)的节点,可以使用 ` 区分多个正则表达式 131 | 132 | ## exclude-type 133 | 134 | 不支持正则表达式,通过 `|` 分割,根据节点类型排除,仅排除[引入出站代理](#proxies) 135 | 136 | 支持类型请参阅[Adapter Type](https://github.com/MetaCubeX/mihomo/blob/fbead56ec97ae93f904f4476df1741af718c9c2a/constant/adapters.go#L18-L45),无视大小写 137 | 138 | ## expected-status 139 | 140 | 健康检查时期望的 HTTP 响应状态码。若配置了该字段,则只有当响应状态码与期望状态一致时才认为节点可用。默认为 `*`,表示对响应状态不做要求 141 | 142 | ### 写法 143 | 144 | 可使用 `/` 匹配多个状态码,使用 `-` 匹配状态范围,可混合书写 145 | 146 | #### 示例 147 | 148 | 匹配 200 和 302 状态码 149 | 150 | ```{.yaml linenums="1"} 151 | expected-status: 200/302 152 | ``` 153 | 154 | 匹配 400 到 503 状态码 155 | 156 | ```{.yaml linenums="1"} 157 | expected-status: 400-503 158 | ``` 159 | 160 | 匹配 200 和 302 以及 400 到 503 状态码 161 | 162 | ```{.yaml linenums="1"} 163 | expected-status: 200/302/400-503 164 | ``` 165 | 166 | ## hidden 167 | 168 | 在 api 返回`hidden`状态,以隐藏该策略组展示 (需要使用 api 的前端适配) 169 | 170 | ## icon 171 | 172 | 在 api 返回`icon`所输入的字符串,以在该策略组显示 (需要使用 api 的前端适配) 173 | -------------------------------------------------------------------------------- /docs/config/proxies/wg.md: -------------------------------------------------------------------------------- 1 | # WireGuard 2 | 3 | ## 简化写法 4 | 5 | 如果只有一个 peer,可以使用简化写法。 6 | 7 | ```{.yaml linenums="1"} 8 | proxies: 9 | - name: "wg" 10 | type: wireguard 11 | private-key: eCtXsJZ27+4PbhDkHnB923tkUn2Gj59wZw5wFA75MnU= 12 | server: 162.159.192.1 13 | port: 2480 14 | ip: 172.16.0.2 15 | ipv6: fd01:5ca1:ab1e:80fa:ab85:6eea:213f:f4a5 16 | public-key: Cr8hWlKvtDt7nrvf+f0brNQQzabAqrjfBvas9pmowjo= 17 | allowed-ips: ['0.0.0.0/0'] 18 | # pre-shared-key: 31aIhAPwktDGpH4JDhA8GNvjFXEf/a6+UaQRyOAiyfM= 19 | # reserved: [209,98,59] # 字符串格式也是合法的,如"U4An" 20 | udp: true 21 | # mtu: 1408 22 | # dialer-proxy: "ss1" # 一个出站代理的标识。当值不为空时,将使用指定的 proxy/proxy-group 发出连接 23 | # remote-dns-resolve: true # 强制dns远程解析,默认值为false 24 | # dns: [ 1.1.1.1, 8.8.8.8 ] # 仅在remote-dns-resolve为true时生效 25 | # 如果存在则开启AmneziaWG功能 26 | # amnezia-wg-option: 27 | # jc: 5 28 | # jmin: 500 29 | # jmax: 501 30 | # s1: 30 31 | # s2: 40 32 | # h1: 123456 33 | # h2: 67543 34 | # h4: 32345 35 | # h3: 123123 36 | # # AmneziaWG v1.5 37 | # i1: 38 | # i2: 39 | # i3: "" 40 | # i4: "" 41 | # i5: "" 42 | # j1: 43 | # j2: 44 | # j3: 45 | # itime: 60 46 | ``` 47 | 48 | ## 完整写法 49 | 50 | 完整写法可以指定多个 peer。 51 | 52 | 如果使用多个 peer,每一个 peer 的`allowed-ips`需要做区分;此时顶层段落的`server, port, public-key, pre-shared-key, reserved`等字段均会被忽略,不过`private-key`仍然在顶层指定。 53 | 54 | ```{.yaml linenums="1"} 55 | proxies: 56 | - name: "wg" 57 | type: wireguard 58 | ip: 172.16.0.2 59 | ipv6: fd01:5ca1:ab1e:80fa:ab85:6eea:213f:f4a5 60 | private-key: eCtXsJZ27+4PbhDkHnB923tkUn2Gj59wZw5wFA75MnU= 61 | peers: 62 | - server: 162.159.192.1 63 | port: 2480 64 | public-key: Cr8hWlKvtDt7nrvf+f0brNQQzabAqrjfBvas9pmowjo= 65 | allowed-ips: ['0.0.0.0/0'] 66 | # pre-shared-key: 31aIhAPwktDGpH4JDhA8GNvjFXEf/a6+UaQRyOAiyfM= 67 | # reserved: [209,98,59] # 字符串格式也是合法的,如"U4An" 68 | udp: true 69 | # mtu: 1408 70 | # dialer-proxy: "ss1" # 一个出站代理的标识。当值不为空时,将使用指定的 proxy/proxy-group 发出连接 71 | # remote-dns-resolve: true # 强制dns远程解析,默认值为false 72 | # dns: [ 1.1.1.1, 8.8.8.8 ] # 仅在remote-dns-resolve为true时生效 73 | ``` 74 | 75 | [通用字段](./index.md) 76 | 77 | ### ip 78 | 79 | 本机在 Wireguard 网络中使用的 IPv4 地址 80 | 81 | ### ipv6 82 | 83 | 可选字段,本机在 Wireguard 网络中使用的 IPv6 地址 84 | 85 | ### private-key 86 | 87 | base64 编码的 Wireguard 客户端私钥 88 | 89 | 可以使用`wg genkey | tee privatekey | wg pubkey > publickey`命令生成一对可用的公私钥文件 90 | 91 | ### public-key 92 | 93 | base64 编码的 Wireguard 服务端公钥 94 | 95 | ### allowed-ips 96 | 97 | 可选字段,限制客户端的哪些 IP 段的流量由服务端进行转发。一般情况下可填`['0.0.0.0/0']` 98 | 99 | ### pre-shared-key 100 | 101 | 可选字段,预共享密钥 102 | 103 | ### reserved 104 | 105 | 可选字段,Wireguard 协议保留字段的值,部分 WARP 节点需要使用 106 | 107 | ### mtu 108 | 109 | 可选字段,设置 MTU 值 110 | 111 | ### remote-dns-resolve 112 | 113 | 可选字段,是否强制 dns 远程解析,默认值为 false 114 | 115 | ### dns 116 | 117 | 可选字段,当`remote-dns-resolve`为 true 时生效,指定远程解析使用的 dns 服务器 118 | 119 | ## 从 Wireguard 标准配置文件翻译 120 | 121 | 假设有如下 Wireguard 标准配置文件: 122 | 123 | ```ini 124 | [Interface] 125 | Address = <本机组网IP> 126 | ListenPort = <本地监听端口> 127 | PrivateKey = <本机私钥> 128 | DNS = <使用的DNS> 129 | MTU = <预设MTU> 130 | 131 | [Peer] 132 | AllowedIPs = <转发IP段> 133 | Endpoint = <远端地址>:<远端端口> 134 | PublicKey = <远端公钥> 135 | ``` 136 | 137 | 对应的 clash 节点配置为: 138 | 139 | ```{.yaml linenums="1"} 140 | - name: "wg" 141 | type: wireguard 142 | ip: <本机组网IP,IPv4往这里填> 143 | ipv6: <本机组网IP,IPv6往这里填> # 没有v6地址直接删除 144 | private-key: <本机私钥> 145 | peers: 146 | - server: <远端地址> 147 | port: <远端端口> 148 | public-key: <远端公钥> 149 | allowed-ips: ['0.0.0.0/0'] # 分流由clash处理 150 | # reserved: [209,98,59] # 如果需要自己填 151 | udp: true 152 | mtu: <预设MTU> # 按需设置,不用直接删除 153 | remote-dns-resolve: true # 按需设置,不用直接删除 154 | dns: <使用的DNS> # 按需设置,不用直接删除 155 | ``` 156 | -------------------------------------------------------------------------------- /docs/handbook/syntax.md: -------------------------------------------------------------------------------- 1 | # 语法 2 | 3 | mihomo 使用 `yaml` 作为配置文件格式 4 | 5 | `yaml` 大小写敏感,使用缩进表示层级关系,缩进不允许使用 tab, 只允许空格,缩进的空格数不重要,只要相同层级的元素左对齐即可 6 | 7 | ## 注释 8 | 9 | 在 `yaml` 格式的文件中,以"#"作为注释开头,行尾为结尾,"#"必须在行头或者必须在前方有空格,否则不视为注释 10 | 11 | ```{.yaml linenums="1"} 12 | port: 7890 # http 代理端口 13 | socks-port: 7891 14 | # socks 代理端口 15 | ``` 16 | 17 | ## 对象 18 | 19 | 对象键值对使用冒号结构表示`key: value`,冒号后面要加一个空格,使用缩进表示层级关系 20 | 21 | 因`yaml`格式为`json`的超集,所以可以直接使用`json`的写法 22 | 23 | ### 多行 24 | 25 | ```{.yaml linenums="1"} 26 | tun: 27 | enable: true 28 | stack: system 29 | auto-route: true 30 | auto-detect-interface: true 31 | ``` 32 | 33 | ### 多行 json 34 | 35 | ```{.yaml linenums="1"} 36 | tun: { 37 | enable: true, 38 | stack: system, 39 | auto-route: true, 40 | auto-detect-interface: true 41 | } 42 | ``` 43 | 44 | ### 单行 json 45 | 46 | ```{.yaml linenums="1"} 47 | tun: { enable: true, stack: system, auto-route: true, auto-detect-interface: true} 48 | ``` 49 | 50 | ### 全 json 51 | 52 | ```{.json linenums="1"} 53 | { 54 | "tun": { 55 | "enable": true, 56 | "stack": "system", 57 | "auto-route": true, 58 | "auto-detect-interface": true 59 | } 60 | } 61 | ``` 62 | 63 | ## 数组 64 | 65 | 以`-`开头的行表示构成一个数组,用于一个对象内的多个值 66 | 67 | ### 多行数组 68 | 69 | ```{.yaml linenums="1"} 70 | a: 71 | - b 72 | - c 73 | - d 74 | ``` 75 | 76 | ### 单行 json 数组 77 | 78 | ```{.yaml linenums="1"} 79 | a: [b, c, d] 80 | ``` 81 | 82 | ## 引用 83 | 84 | `&` 锚点和 `*` 别名,可以用来引用,`&` 用来建立锚点,`<<`表示合并到当前数据,`*` 用来引用锚点 85 | 86 | 如下示例中,因`p`这个键在`mihomo`中不存在,所以在`mihomo`解析配置会被忽视 87 | 88 | 如合并时有重复的项,则不会去合并 89 | 90 | ```{.yaml linenums="1"} 91 | p: &p 92 | type: http 93 | interval: 3600 94 | health-check: 95 | enable: true 96 | url: https://www.gstatic.com/generate_204 97 | interval: 300 98 | 99 | proxy-providers: 100 | provider1: 101 | <<: *p 102 | url: "" 103 | path: ./proxy_providers/provider1.yaml 104 | 105 | provider2: 106 | <<: *p 107 | type: file 108 | path: ./proxy_providers/provider2.yaml 109 | ``` 110 | 111 | 等同于 112 | 113 | ```{.yaml linenums="1"} 114 | proxy-providers: 115 | provider1: 116 | type: http 117 | interval: 3600 118 | health-check: 119 | enable: true 120 | url: https://www.gstatic.com/generate_204 121 | interval: 300 122 | url: "" 123 | path: ./proxy_providers/provider1.yaml 124 | 125 | provider2: 126 | interval: 3600 127 | health-check: 128 | enable: true 129 | url: https://www.gstatic.com/generate_204 130 | interval: 300 131 | type: file 132 | path: ./proxy_providers/provider2.yaml 133 | ``` 134 | 135 | ## 域名通配符 136 | 137 | !!! note 138 | 本节中的域名通配符与[路由规则中的`DOMAIN-WILDCARD`](../config/rules/#domain-wildcard)并不相同 139 | 140 | ### 通配符 `*` 141 | 142 | Clash 的通配符 `*` 一次只能匹配一级域名 143 | 144 | `*.baidu.com` 只匹配 `tieba.baidu.com` 而不匹配 `123.tieba.baidu.com` 或者 `baidu.com` 145 | 146 | `*`只匹配 localhost 等没有`.`的主机名 147 | 148 | ### 通配符 `+` 149 | 150 | 通配符 + 类似 DOMAIN-SUFFIX, 可以一次性匹配多个级别 151 | 152 | `+.baidu.com` 匹配 `tieba.baidu.com` 和 `123.tieba.baidu.com` 或者 `baidu.com` 153 | 154 | 通配符 `+` 只能用于域名前缀匹配 155 | 156 | ### 通配符 `.` 157 | 158 | 通配符 . 可以一次性匹配多个级别 159 | 160 | `.baidu.com` 匹配 `tieba.baidu.com` 和 `123.tieba.baidu.com`, 但不能匹配 `baidu.com` 161 | 162 | 通配符 `.` 只能用于域名前缀匹配 163 | 164 | ### 使用示例 165 | 166 | 使用通配符时,应当使用引号 `' '`或 `" "`将内容包裹起来 167 | 168 | ```{.yaml linenums="1"} 169 | fake-ip-filter: 170 | - ".lan" 171 | - "xbox.*.microsoft.com" 172 | - "+.xboxlive.com" 173 | - localhost.ptlogin2.qq.com 174 | ``` 175 | 176 | ## 引入域名集合 177 | 178 | !!! warning 179 | rule-set 仅支持 behavior 为 domain/classical 180 | 181 | ```{.yaml linenums="1"} 182 | fake-ip-filter: 183 | - "rule-set:xxx" 184 | - "geosite:xxx" 185 | ``` 186 | 187 | ## 端口范围 188 | 189 | mihomo 可以使用 `-` 来匹配端口范围,使用 `/` 或者 `,` 来区分多个端口/端口范围 190 | 191 | ### 示例 192 | 193 | 匹配 114 到 514 和 810 到 1919 端口,以及 65530 端口 194 | 195 | ```{.yaml linenums="1"} 196 | 114-514/810-1919,65530 197 | ``` 198 | 199 | 214 | -------------------------------------------------------------------------------- /docs/config/rules/index.md: -------------------------------------------------------------------------------- 1 | # 路由规则 2 | 3 | ```{.yaml linenums="1"} 4 | rules: 5 | - DOMAIN,ad.com,REJECT 6 | - DOMAIN-SUFFIX,google.com,auto 7 | - DOMAIN-KEYWORD,google,auto 8 | - DOMAIN-WILDCARD,*.google.com,auto 9 | - DOMAIN-REGEX,^abc.*com,PROXY 10 | - GEOSITE,youtube,PROXY 11 | 12 | - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve 13 | - IP-CIDR6,2620:0:2d0:200::7/32,auto 14 | - IP-SUFFIX,8.8.8.8/24,PROXY 15 | - IP-ASN,13335,DIRECT 16 | - GEOIP,CN,DIRECT 17 | 18 | - SRC-GEOIP,cn,DIRECT 19 | - SRC-IP-ASN,9808,DIRECT 20 | - SRC-IP-CIDR,192.168.1.201/32,DIRECT 21 | - SRC-IP-SUFFIX,192.168.1.201/8,DIRECT 22 | 23 | - DST-PORT,80,DIRECT 24 | - SRC-PORT,7777,DIRECT 25 | 26 | - IN-PORT,7890,PROXY 27 | - IN-TYPE,SOCKS/HTTP,PROXY 28 | - IN-USER,mihomo,PROXY 29 | - IN-NAME,ss,PROXY 30 | 31 | - PROCESS-PATH,/usr/bin/wget,PROXY 32 | - PROCESS-PATH,C:\Program Files\Google\Chrome\Application\chrome.exe,PROXY 33 | - PROCESS-PATH-REGEX,.*bin/wget,PROXY 34 | - PROCESS-PATH-REGEX,(?i).*Application\\chrome.*,PROXY 35 | 36 | - PROCESS-NAME,curl,PROXY 37 | - PROCESS-NAME,chrome.exe,PROXY 38 | - PROCESS-NAME,com.termux,PROXY 39 | - PROCESS-NAME-REGEX,curl$,PROXY 40 | - PROCESS-NAME-REGEX,(?i)Telegram,PROXY 41 | - PROCESS-NAME-REGEX,.*telegram.*,PROXY 42 | - UID,1001,DIRECT 43 | 44 | - NETWORK,udp,DIRECT 45 | - DSCP,4,DIRECT 46 | 47 | - RULE-SET,providername,proxy 48 | - AND,((DOMAIN,baidu.com),(NETWORK,UDP)),DIRECT 49 | - OR,((NETWORK,UDP),(DOMAIN,baidu.com)),REJECT 50 | - NOT,((DOMAIN,baidu.com)),PROXY 51 | - SUB-RULE,(NETWORK,tcp),sub-rule 52 | 53 | - MATCH,auto 54 | ``` 55 | 56 | ## 优先级 57 | 58 | 规则将按照从上到下的顺序匹配,列表顶部的规则优先级高于其底下的规则 59 | 60 | !!! warning "" 61 | 如请求为 udp,而代理节点没有 udp 支持 (例如`ss`节点没写`udp: true`),则会继续向下匹配 62 | 63 | ### DOMAIN 64 | 65 | 匹配完整域名 66 | 67 | ### DOMAIN-SUFFIX 68 | 69 | 匹配域名后缀 70 | 71 | 例:`google.com`匹配`www.google.com`/`mail.google.com`和`google.com`,但不匹配`content-google.com` 72 | 73 | ### DOMAIN-KEYWORD 74 | 75 | 域名关键字匹配 76 | 77 | ### DOMAIN-WILDCARD 78 | 79 | 通配符匹配,仅支持`*`和`?`通配符 80 | 81 | ### DOMAIN-REGEX 82 | 83 | 域名正则表达式匹配 84 | 85 | ### GEOSITE 86 | 87 | 匹配 Geosite 内的域名,部分内容参考 [v2fly/domain-list-community](https://github.com/v2fly/domain-list-community/tree/master/data) 88 | 89 | ### IP-CIDR & IP-CIDR6 90 | 91 | 匹配 IP 地址范围,`IP-CIDR`和`IP-CIDR6`效果是一样的,`IP-CIDR6`只是一个别名 92 | 93 | ### IP-SUFFIX 94 | 95 | 匹配 IP 后缀范围 96 | 97 | ### IP-ASN 98 | 99 | 匹配 IP 所属 ASN 100 | 101 | ### GEOIP 102 | 103 | 匹配 IP 所属国家代码 104 | 105 | ### SRC-GEOIP 106 | 107 | 匹配来源 IP 所属国家代码 108 | 109 | ### SRC-IP-ASN 110 | 111 | 匹配来源 IP 所属 ASN 112 | 113 | ### SRC-IP-CIDR 114 | 115 | 匹配来源 IP 地址范围 116 | 117 | ### SRC-IP-SUFFIX 118 | 119 | 匹配来源 IP 后缀范围 120 | 121 | ### DST-PORT 122 | 123 | 匹配请求目标[端口范围](../../handbook/syntax.md#_14) 124 | 125 | ### SRC-PORT 126 | 127 | 匹配请求来源[端口范围](../../handbook/syntax.md#_14) 128 | 129 | ### IN-PORT 130 | 131 | 匹配[入站端口](../inbound/listeners/index.md#port),可用[端口范围](../../handbook/syntax.md#_14) 132 | 133 | ### IN-TYPE 134 | 135 | 匹配[入站类型](../inbound/listeners/index.md#type) 136 | 137 | ### IN-USER 138 | 139 | 匹配[入站](../inbound/listeners/index.md)用户名,支持使用 `/` 分隔多个用户名 140 | 141 | ### IN-NAME 142 | 143 | 匹配[入站名称](../inbound/listeners/index.md#name) 144 | 145 | ### PROCESS-PATH 146 | 147 | 使用完整进程路径匹配 148 | 149 | ### PROCESS-PATH-REGEX 150 | 151 | 使用进程路径正则表达式匹配 152 | 153 | ### PROCESS-NAME 154 | 155 | 使用进程匹配,在`Android`平台可以匹配包名 156 | 157 | ### PROCESS-NAME-REGEX 158 | 159 | 使用进程名称正则表达式匹配,在`Android`平台可以匹配包名 160 | 161 | ### UID 162 | 163 | 匹配 Linux USER ID 164 | 165 | ### NETWORK 166 | 167 | 匹配`tcp`或者`udp` 168 | 169 | ### DSCP 170 | 171 | 匹配`DSCP`标记 (仅限 tproxy udp 入站) 172 | 173 | ### RULE-SET 174 | 175 | 引用规则集合,需配置[rule-providers](../rule-providers/index.md) 176 | 177 | ### AND & OR & NOT 178 | 179 | `LOGIC_TYPE,((payload1),(payload2)),Proxy` 180 | 181 | *payload1*、*payload2* 为 规则类型和其他 payload,如:`DOMAIN,google.com` 182 | 183 | 逻辑规则,需要**注意括号**的使用 184 | 185 | ### SUB-RULE 186 | 187 | 匹配至[子规则](../sub-rule.md),需要注意括号的使用 188 | 189 | ### MATCH 190 | 191 | 匹配所有请求,无需条件 192 | 193 | ## 附加参数 194 | 195 | ### no-resolve 196 | 197 | 仅支持关于 `目标IP` 的规则 198 | 199 | 域名开始匹配关于 `目标IP` 规则时,mihomo 将触发 dns 解析来检查域名的 `目标IP` 是否匹配规则,可以选择 `no-resolve` 选项以跳过 dns 解析 200 | 201 | 如在更早的匹配中触发了 dns 解析,则依旧会匹配到添加了 `no-resolve` 选项的 `目标IP` 类规则 202 | 203 | ### src 204 | 205 | 仅支持关于 `目标IP` 的规则 206 | 207 | 将 `目标IP` 匹配转为 `来源IP` 匹配 208 | -------------------------------------------------------------------------------- /docs/config/proxy-providers/index.md: -------------------------------------------------------------------------------- 1 | # 代理集合 2 | 3 | ```{.yaml linenums="1"} 4 | proxy-providers: 5 | provider1: 6 | type: http 7 | url: "http://test.com" 8 | path: ./proxy_providers/provider1.yaml 9 | interval: 3600 10 | proxy: DIRECT 11 | size-limit: 0 12 | header: 13 | User-Agent: 14 | - "Clash/v1.18.0" 15 | - "mihomo/1.18.3" 16 | Authorization: 17 | - 'token 1231231' 18 | health-check: 19 | enable: true 20 | url: https://www.gstatic.com/generate_204 21 | interval: 300 22 | timeout: 5000 23 | lazy: true 24 | expected-status: 204 25 | override: 26 | tfo: false 27 | mptcp: false 28 | udp: true 29 | udp-over-tcp: false 30 | down: "50 Mbps" 31 | up: "10 Mbps" 32 | skip-cert-verify: true 33 | dialer-proxy: proxy 34 | interface-name: tailscale0 35 | routing-mark: 233 36 | ip-version: ipv4-prefer 37 | additional-prefix: "provider1 prefix |" 38 | additional-suffix: "| provider1 suffix" 39 | proxy-name: 40 | - pattern: "IPLC-(.*?)倍" 41 | target: "iplc x $1" 42 | filter: "(?i)港|hk|hongkong|hong kong" 43 | exclude-filter: "xxx" 44 | exclude-type: "ss|http" 45 | payload: 46 | - name: "ss1" 47 | type: ss 48 | server: server 49 | port: 443 50 | cipher: chacha20-ietf-poly1305 51 | password: "password" 52 | ``` 53 | 54 | ## name 55 | 56 | 必须,如`provider1`,不能重复,建议不要和[策略组](../proxy-groups/index.md#name)名称重复 57 | 58 | ## type 59 | 60 | 必须,`provider`类型,可选`http` / `file` / `inline` 61 | 62 | ## url 63 | 64 | 类型为`http`是则需要配置 65 | 66 | ## path 67 | 68 | 可选,文件路径,不可重复,不填写时会使用 url 的 MD5 作为此文件的文件名 69 | 70 | 由于安全问题,此路径将限制只允许在 `HomeDir`(有启动参数 -d 配置) 中,如果想存储到其他位置,请通过设置 `SAFE_PATHS` 环境变量指定额外的安全路径。该环境变量的语法同本操作系统的 PATH 环境变量解析规则(即 Windows 下以分号分割,其他系统下以冒号分割) 71 | 72 | ## interval 73 | 74 | 更新`provider`的时间,单位为秒 75 | 76 | ## proxy 77 | 78 | 经过指定代理进行下载/更新 79 | 80 | ## size-limit 81 | 82 | 限制下载文件的最大大小,默认为 0 即不限制文件大小,单位为字节 (`b`) 83 | 84 | ## header 85 | 86 | 自定义 http 请求头 87 | 88 | ## health-check 89 | 90 | 健康检查 (延迟测试) 91 | 92 | ### health-check.enable 93 | 94 | 是否启用,可选 `true/false` 95 | 96 | ### health-check.url 97 | 98 | 健康检查地址,推荐使用以下地址之一 99 | 100 | === "Cloudflare" 101 | ```yaml 102 | https://cp.cloudflare.com 103 | ``` 104 | 105 | === "Google" 106 | ```yaml 107 | https://www.gstatic.com/generate_204 108 | ``` 109 | 110 | ### health-check.interval 111 | 112 | 健康检查间隔时间,单位为秒 113 | 114 | ### health-check.timeout 115 | 116 | 健康检查超时时间,单位为毫秒 117 | 118 | ### health-check.lazy 119 | 120 | 懒惰状态,默认为`true`,不使用该集合节点时,不进行测试 121 | 122 | ### health-check.expected-status 123 | 124 | 参阅 [期望状态](../proxy-groups/index.md#expected-status) 125 | 126 | ## override 127 | 128 | 覆写节点内容,以下为支持的字段 129 | 130 | ### override.additional-prefix 131 | 132 | 为节点名称添加固定前缀 133 | 134 | ### override.additional-suffix 135 | 136 | 为节点名称添加固定后缀 137 | 138 | ### override.proxy-name 139 | 140 | 对节点名称内容进行替换,支持正则表达式,pattern 为替换内容,target 为替换目标 141 | 142 | ### override.其余配置项 143 | 144 | 参阅通用字段 [tfo](../proxies/index.md#tfo) 145 | 146 | 参阅通用字段 [mptcp](../proxies/index.md#mptcp) 147 | 148 | 参阅通用字段 [udp](../proxies/index.md#udp) 149 | 150 | 参阅`Shadowsocks` [udp-over-tcp](../proxies/ss.md#udp-over-tcp) 151 | 152 | 参阅`Hysteria`/`Hysteria2` [up](../proxies/hysteria2.md#updown) 153 | 154 | 参阅`Hysteria`/`Hysteria2` [down](../proxies/hysteria2.md#updown) 155 | 156 | 参阅通用字段 [skip-cert-verify](../proxies/tls.md#skip-cert-verify) 157 | 158 | 参阅通用字段 [dialer-proxy](../proxies/index.md#dialer-proxy) 159 | 160 | 参阅通用字段 [interface-name](../proxies/index.md#interface-name) 161 | 162 | 参阅通用字段 [routing-mark](../proxies/index.md#routing-mark) 163 | 164 | 参阅通用字段 [ip-version](../proxies/index.md#ip-version) 165 | 166 | ## filter 167 | 168 | 筛选满足关键词或[正则表达式](https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md)的节点,可以使用 ` 区分多个正则表达式 169 | 170 | ## exclude-filter 171 | 172 | 排除满足关键词或[正则表达式](https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md)的节点,可以使用 ` 区分多个正则表达式 173 | 174 | ## exclude-type 175 | 176 | 不支持正则表达式,通过 `|` 分割,根据节点类型排除 177 | 178 | provider 的 `exclude-type` 使用配置文件中的 `type` 类型进行排除 179 | 180 | ## payload 181 | 182 | 内容,仅 `type` 为 `inline` 时生效 183 | 184 | 当 `http` 或 `file` 解析失败时,也可以使用 payload 作为备用代理 185 | -------------------------------------------------------------------------------- /docs/config/proxies/index.ru.md: -------------------------------------------------------------------------------- 1 | # Общие поля 2 | 3 | ```{.yaml linenums="1"} 4 | proxies: 5 | - name: "ss" 6 | type: ss 7 | server: server 8 | port: 443 9 | ip-version: ipv4 10 | udp: true 11 | interface-name: eth0 12 | routing-mark: 1234 13 | tfo: false 14 | mptcp: false 15 | 16 | dialer-proxy: ss1 17 | 18 | smux: 19 | enabled: true 20 | protocol: smux 21 | max-connections: 4 22 | min-streams: 4 23 | max-streams: 0 24 | statistic: false 25 | only-tcp: false 26 | padding: true 27 | brutal-opts: 28 | enabled: true 29 | up: 50 30 | down: 100 31 | ``` 32 | 33 | Прокси-узлы, содержимое в формате массива 34 | 35 | ## name 36 | 37 | Обязательно, имя прокси, не должно повторяться 38 | 39 | ## type 40 | 41 | Обязательно, тип прокси-узла 42 | 43 | ## server 44 | 45 | Обязательно, сервер прокси-узла (домен/ip) 46 | 47 | ## port 48 | 49 | Обязательно, порт прокси-узла 50 | 51 | ## ip-version 52 | 53 | Версия IP, используемая прокси для исходящих соединений. Если это не direct, влияет на IP-адрес, используемый при разрешении имени сервера. 54 | 55 | Допустимые значения: `dual`/`ipv4`/`ipv6`/`ipv4-prefer`/`ipv6-prefer`, по умолчанию `dual` 56 | 57 | * ipv4: Использовать только IPv4 58 | * ipv6: Использовать только IPv6 59 | * ipv4-prefer: Предпочитать IPv4, для TCP выполняется разрешение двойного стека, соединения устанавливаются параллельно, но соединение IPv4 имеет приоритет. Для UDP выполняется разрешение двойного стека и используется первый полученный IPv4 60 | * ipv6-prefer: Предпочитать IPv6, для TCP выполняется разрешение двойного стека, соединения устанавливаются параллельно, но соединение IPv6 имеет приоритет. Для UDP выполняется разрешение двойного стека и используется первый полученный IPv6 61 | 62 | ## udp 63 | 64 | Разрешить ли UDP через прокси, по умолчанию `false` 65 | 66 | !!! note 67 | Эта опция по умолчанию включена в протоколах на основе `UDP`, таких как `TUIC`, а также в типах `direct` и `dns` 68 | 69 | ## interface-name 70 | 71 | Указывает интерфейс, к которому привязывается узел, соединения будут устанавливаться через этот интерфейс 72 | 73 | ## routing-mark 74 | 75 | Метка маршрутизации, добавляемая при установке соединения узлом 76 | 77 | ## tfo 78 | 79 | Включить `TCP Fast Open`, действует только для протокола `TCP` 80 | 81 | ## mptcp 82 | 83 | Включить `TCP Multi Path`, действует только для протокола `TCP` 84 | 85 | ## dialer-proxy 86 | 87 | Указывает, через какой dialer-proxy текущий узел устанавливает соединение. Значение — имя [группы прокси](../proxy-groups/index.md) или [выходного прокси](../proxies/index.md). Подробнее см. в [документации по dialer-proxy](./dialer-proxy.md) 88 | 89 | ## smux 90 | 91 | sing-mux, доступно только для протоколов, использующих tcp-транспорт 92 | 93 | ### smux.enabled 94 | 95 | Включить ли мультиплексирование 96 | 97 | ### smux.protocol 98 | 99 | Протокол мультиплексирования, поддерживаются следующие протоколы, по умолчанию используется `h2mux` 100 | 101 | | Протокол | Описание | 102 | |----------|--------------------------------------| 103 | | `smux` | | 104 | | `yamux` | | 105 | | `h2mux` | | 106 | 107 | ### smux.max-connections 108 | 109 | Максимальное количество соединений 110 | 111 | Конфликтует с `max-streams` 112 | 113 | ### smux.min-streams 114 | 115 | Минимальное количество мультиплексированных потоков в соединении перед открытием нового соединения 116 | 117 | Конфликтует с `max-streams` 118 | 119 | ### smux.max-streams 120 | 121 | Максимальное количество мультиплексированных потоков в соединении перед открытием нового соединения 122 | 123 | Конфликтует с `max-connections` и `min-streams` 124 | 125 | ### smux.statistic 126 | 127 | Контролирует, отображается ли базовое соединение в панели, что упрощает разрыв базового соединения 128 | 129 | ### smux.only-tcp 130 | 131 | Разрешать только tcp, если установлено в true, настройки smux не будут применяться к udp, соединения udp будут использовать протокол udp по умолчанию 132 | 133 | ### smux.padding 134 | 135 | Включить заполнение 136 | 137 | ### smux.brutal-opts 138 | 139 | Настройки TCP Brutal 140 | 141 | #### smux.brutal-opts.enabled 142 | 143 | Включить алгоритм контроля перегрузки TCP Brutal 144 | 145 | #### smux.brutal-opts.up/down 146 | 147 | Пропускная способность для загрузки и скачивания, по умолчанию в Mbps 148 | -------------------------------------------------------------------------------- /docs/config/dns/index.md: -------------------------------------------------------------------------------- 1 | # DNS 2 | 3 | ```{.yaml linenums="1"} 4 | dns: 5 | enable: true 6 | cache-algorithm: arc 7 | prefer-h3: false 8 | use-hosts: true 9 | use-system-hosts: true 10 | respect-rules: false 11 | listen: 0.0.0.0:1053 12 | ipv6: false 13 | default-nameserver: 14 | - 223.5.5.5 15 | enhanced-mode: fake-ip 16 | fake-ip-range: 198.18.0.1/16 17 | # fake-ip-range6: fdfe:dcba:9876::1/64 18 | fake-ip-filter-mode: blacklist 19 | fake-ip-filter: 20 | - '*.lan' 21 | # fake-ip-ttl: 1 22 | nameserver-policy: 23 | '+.arpa': '10.0.0.1' 24 | 'rule-set:cn': 25 | - https://doh.pub/dns-query 26 | - https://dns.alidns.com/dns-query 27 | nameserver: 28 | - https://doh.pub/dns-query 29 | - https://dns.alidns.com/dns-query 30 | fallback: 31 | - tls://8.8.4.4 32 | - tls://1.1.1.1 33 | proxy-server-nameserver: 34 | - https://doh.pub/dns-query 35 | direct-nameserver: 36 | - system 37 | direct-nameserver-follow-policy: false 38 | fallback-filter: 39 | geoip: true 40 | geoip-code: CN 41 | geosite: 42 | - gfw 43 | ipcidr: 44 | - 240.0.0.0/4 45 | domain: 46 | - '+.google.com' 47 | - '+.facebook.com' 48 | - '+.youtube.com' 49 | ``` 50 | 51 | ## enable 52 | 53 | 是否启用,如为 false,则使用系统 DNS 解析 54 | 55 | ## cache-algorithm 56 | 57 | 支持的算法: 58 | 59 | - lru: Least Recently Used, 默认值 60 | - arc: Adaptive Replacement Cache 61 | 62 | ## prefer-h3 63 | 64 | DOH 优先使用 http/3 65 | 66 | ## listen 67 | 68 | DNS 服务监听,支持 udp, tcp 69 | 70 | ## IPV6 71 | 72 | 是否解析 IPV6, 如为 false, 则回应 AAAA 的空解析 73 | 74 | ## enhanced-mode 75 | 76 | 可选值 `fake-ip`/`redir-host`,默认`redir-host` 77 | 78 | mihomo 的 DNS 处理模式 79 | 80 | ## fake-ip-range 81 | 82 | fakeip 下的 IP 段设置,[tun](../inbound/tun.md) 的默认 IPV4 地址 也使用此值作为参考 83 | 84 | ## fake-ip-range6 85 | 86 | fakeip 下的 IPv6 段设置 87 | 88 | ## fake-ip-filter 89 | 90 | fakeip 过滤,以下地址不会下发 fakeip 映射用于连接 91 | 92 | 值支持[域名通配](../../handbook/syntax.md#_8)以及[引入域名集合](../../handbook/syntax.md#_13) 93 | 94 | ## fake-ip-filter-mode 95 | 96 | 可选 `blacklist`/`whitelist`,默认`blacklist`,`whitelist` 即只有匹配成功才返回 fake-ip 97 | 98 | ## fake-ip-ttl 99 | 100 | 配置fakeip查询返回的TTL,非必要情况下请勿修改 101 | 102 | ## use-hosts 103 | 104 | 是否回应配置中的 [hosts](./hosts.md),默认 true 105 | 106 | ## use-system-hosts 107 | 108 | 是否查询系统 hosts,默认 true 109 | 110 | ## respect-rules 111 | 112 | dns 连接遵守[路由规则](../rules/index.md),需配置 [proxy-server-nameserver](./index.md#proxy-server-nameserver) 113 | 114 | !!! note "" 115 | 强烈不建议和 `prefer-h3` 一起使用 116 | 117 | ## default-nameserver 118 | 119 | 默认 DNS, 用于解析 DNS 服务器 的域名 120 | 121 | !!! note "" 122 | 必须为 IP, 可为加密 DNS 123 | 124 | ## nameserver-policy 125 | 126 | 指定域名查询的解析服务器,可使用 geosite, 优先于 `nameserver/fallback 查询` 127 | 128 | 键支持[域名通配](../../handbook/syntax.md#_8) 129 | 130 | 值支持字符串/数组 131 | 132 | ## proxy-server-nameserver 133 | 134 | 代理节点域名解析服务器,仅用于解析代理节点的域名,如果不填则遵循 nameserver-policy、nameserver 和 fallback 的配置 135 | 136 | ## direct-nameserver 137 | 138 | 用于 direct 出口域名解析的 DNS 服务器,如果不填则遵循 nameserver-policy、nameserver 和 fallback 的配置 139 | 140 | ## direct-nameserver-follow-policy 141 | 142 | 是否遵循 nameserver-policy,默认为不遵守,仅当 direct-nameserver 不为空时生效 143 | 144 | ## nameserver 145 | 146 | 默认的域名解析服务器 147 | 148 | ## fallback 149 | 150 | 后备域名解析服务器,一般情况下使用境外 DNS, 保证结果可信 151 | 152 | 配置 `fallback`后默认启用 `fallback-filter`,`geoip-code`为 cn 153 | 154 | ## fallback-filter 155 | 156 | 后备域名解析服务器筛选,满足条件的将使用 `fallback`结果或只使用 `fallback`解析 157 | 158 | ### geoip 159 | 160 | 是否启用 geoip 判断 161 | 162 | ### geoip-code 163 | 164 | 可选值为 国家缩写,默认值为 `CN` 165 | 166 | 除了 `geoip-code` 配置的国家 IP, 其他的 IP 结果会被视为污染 167 | 168 | `geoip-code` 配置的国家的结果会直接采用,否则将采用 `fallback`结果 169 | 170 | ### geosite 171 | 172 | 可选值为对于的 geosite 内包含的集合 173 | 174 | geosite 列表的内容被视为已污染,匹配到 geosite 的域名,将只使用 `fallback`解析,不去使用 `nameserver` 175 | 176 | ### ipcidr 177 | 178 | 书写内容为 `IP/掩码` 179 | 180 | 这些网段的结果会被视为污染,`nameserver`解析出这些结果时将会采用 `fallback`的解析结果 181 | 182 | ### domain 183 | 184 | 这些域名被视为已污染,匹配到这些域名,会直接使用 `fallback`解析,不去使用 `nameserver` 185 | 186 | ## 附加参数 187 | 188 | 此部分可用于发向公网地址的 DNS 服务器,使用`#`附加,使用`&`连接不同的参数。 189 | 190 | 除了指定代理/接口和 ecs,其余项的值均为 bool(true/false) 191 | 192 | ### 示例 193 | 194 | ```{.yaml linenums="1"} 195 | dns: 196 | nameserver: 197 | - 'https://8.8.8.8/dns-query#proxy&ecs=1.1.1.1/24&ecs-override=true' 198 | proxies: 199 | - name: proxy 200 | type: ss 201 | ``` 202 | 203 | ### DNS 指定 代理/接口 进行连接 204 | 205 | 优先使用已有代理,如果不存在该名称的代理则指定接口连接 206 | 207 | `#RULES`为遵守路由规则进行连接,等同于[respect-rules](./index.md#respect-rules) 208 | 209 | 如需经过代理查询,应配置 `proxy-server-nameserver`, 以防出现鸡蛋问题 210 | 211 | ### h3 212 | 213 | 强制 HTTP/3 214 | 215 | 此选项与 `prefer-h3` 不冲突,填写后强制启用 HTTP/3 建立 DOH 连接,使用前需确保 DOH 服务器支持 HTTP/3 216 | 217 | ### skip-cert-verify 218 | 219 | 跳过 TLS 证书验证 220 | 221 | ### ecs 222 | 223 | 指定 dns 查询的 subnet 地址 224 | 225 | ### ecs-override 226 | 227 | 强制覆盖 dns 查询的 subnet 地址 228 | 229 | ### disable-ipv4 230 | 231 | 丢弃 A 回应 232 | 233 | ### disable-ipv6 234 | 235 | 丢弃 AAAA 回应 236 | -------------------------------------------------------------------------------- /docs/api/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | - navigation 4 | # - toc 5 | --- 6 | 7 | # API 8 | 9 | ## 请求示例 10 | 11 | curl 示例 `curl -H 'Authorization: Bearer ${secret}' http://${controller-api}/configs?force=true -d '{"path": "", "payload": ""}' -X PUT` 12 | 13 | 此请求附带 `'Authorization: Bearer ${secret}'` 请求头,其中: 14 | 15 | - `${secret}` 为配置文件设置的[api](../config/general.md#api)密钥 16 | - `${controller-api}` 为配置文件中设置的[api](../config/general.md#api)监听地址 17 | - `?force=true` 为携带参数,部分请求需携带 18 | - `'{"path": "", "payload": ""}'` 为要更新的资源的数据 19 | 20 | 大多数情况传入的数据都为`'{"path": "", "payload": ""}'`,可以附带新的配置文件路径 21 | 22 | !!! note 23 | 注意,如果路径不在 Clash 工作目录,请手动设置`SAFE_PATHS`环境变量将其加入安全路径,该环境变量的语法同本操作系统的PATH环境变量解析规则(即Windows下以分号分割,其他系统下以冒号分割)。 24 | 25 | ## 日志 26 | 27 | ### `/logs` 28 | 29 | 请求方法:`GET` 30 | 31 | - 获取实时日志 32 | 33 | ### `/logs?level=log_level` 34 | 35 | 请求方法:`GET` 36 | 37 | - 获取指定等级日志 可选值:info、debug、warning、error 38 | 39 | ## 流量信息 40 | 41 | ### `/traffic` 42 | 43 | 请求方法:`GET` 44 | 45 | - 获取实时流量,单位 kbps 46 | 47 | ## 内存信息 48 | 49 | ### `/memory` 50 | 51 | 请求方法:`GET` 52 | 53 | - 获取实时内存占用,单位 kb 54 | 55 | ## 版本信息 56 | 57 | ### `/version` 58 | 59 | 请求方法:`GET` 60 | 61 | - 获取 Clash 版本 62 | 63 | ## 缓存 64 | 65 | ### `/cache/fakeip/flush` 66 | 67 | 请求方法:`POST` 68 | 69 | - 清除 fakeip 缓存 70 | 71 | ## 运行配置 72 | 73 | ### `/configs` 74 | 75 | 请求方法:`GET` 76 | 77 | - 获取基本配置 78 | 79 | 请求方法:`PUT` 80 | 81 | - 重新加载基本配置,必须发送数据,URL 需携带 `?force=true` 强制执行 82 | 83 | 请求方法:`PATCH` 84 | 85 | - 更新基本配置,必须发送数据,格式为`'{"mixed-port": 7890}'`,按需修改为需要更新的配置项 86 | 87 | ### `/configs/geo` 88 | 89 | 请求方法:`POST` 90 | 91 | - 更新 GEO 数据库,必须发送数据 92 | 93 | ### `/restart` 94 | 95 | 请求方法:`POST` 96 | 97 | - 重启内核,必须发送数据 98 | 99 | ## 更新 100 | 101 | ### `/upgrade` 102 | 103 | 请求方法:`POST` 104 | 105 | - 更新内核,必须发送数据 106 | 107 | ### `/upgrade/ui` 108 | 109 | 请求方法:`POST` 110 | 111 | - 更新面板,须设置 [external-ui](../config/general.md#_7) 112 | 113 | ### `/upgrade/geo` 114 | 115 | 请求方法:`POST` 116 | 117 | - 更新 GEO 数据库,必须发送数据 118 | 119 | ## 策略组 120 | 121 | ### `/group` 122 | 123 | 请求方法:`GET` 124 | 125 | - 获取策略组信息 126 | 127 | ### `/group/group_name` 128 | 129 | 请求方法:`GET` 130 | 131 | - 获取具体的策略组信息 132 | 133 | 请求方法:`DELETE` 134 | 135 | - 清除自动策略组 fixed 选择 136 | 137 | ### `/group/group_name/delay` 138 | 139 | 请求方法:`GET` 140 | 141 | - 对指定策略组内的节点/策略组进行测试,返回新的延迟信息,,并清除自动策略组的 fixed 选择 142 | - URL 需携带`?url=xxx&timeout=5000`,按需修改 143 | 144 | ## 代理 145 | 146 | ### `/proxies` 147 | 148 | 请求方法:`GET` 149 | 150 | - 获取代理信息 151 | 152 | ### `/proxies/proxies_name` 153 | 154 | 请求方法:`GET` 155 | 156 | - 获取具体的代理信息 157 | 158 | 请求方法:`PUT` 159 | 160 | - 选择特定的代理,需携带数据,格式为`'{"name":"日本"}'` 161 | 162 | ### `/proxies/proxies_name/delay` 163 | 164 | 请求方法:`GET` 165 | 166 | - 对指定代理进行测试,并返回新的延迟信息 167 | - URL 需携带`?url=xxx&timeout=5000`,按需修改 168 | 169 | ## 代理集合 170 | 171 | ### `/providers/proxies` 172 | 173 | 请求方法:`GET` 174 | 175 | - 获取所有代理集合的所有信息 176 | 177 | ### `/providers/proxies/providers_name` 178 | 179 | 请求方法:`GET` 180 | 181 | - 获取特定代理集合的信息 182 | 183 | 请求方法:`PUT` 184 | 185 | - 更新代理集合 186 | 187 | ### `/providers/proxies/providers_name/healthcheck` 188 | 189 | 请求方法:`GET` 190 | 191 | - 触发特定代理集合的健康检查 192 | 193 | ### `/providers/proxies/providers_name/proxies_name/healthcheck` 194 | 195 | - 对代理集合内的指定代理进行测试,并返回新的延迟信息 196 | - URL 需携带`?url=xxx&timeout=5000`,按需修改 197 | 198 | ## 规则 199 | 200 | ### `/rules` 201 | 202 | 请求方法:`GET` 203 | 204 | - 获取规则信息 205 | 206 | ## 规则集合 207 | 208 | ### `/providers/rules` 209 | 210 | 请求方法:`GET` 211 | 212 | - 获取所有规则集合的所有信息 213 | 214 | ### `/providers/rules/providers_name` 215 | 216 | 请求方法:`PUT` 217 | 218 | - 更新规则集合 219 | 220 | ## 连接 221 | 222 | ### `/connections` 223 | 224 | 请求方法:`GET` 225 | 226 | - 获取连接信息 227 | 228 | 请求方法:`DELETE` 229 | 230 | - 关闭所有连接 231 | 232 | ### `/connections/:id` 233 | 234 | 请求方法:`DELETE` 235 | 236 | - 关闭特定连接 237 | 238 | ## 域名查询 239 | 240 | ### `/dns/query` 241 | 242 | 请求方法:`GET` 243 | 244 | - 获取指定名称和类型的 DNS 查询数据 245 | - URL 需携带`?name=example.com&type=A`,按需修改 246 | 247 | ## DEBUG 248 | 249 | `/debug` 需要内核启动时 [日志级别](../config/general.md#_5) 为 `debug` 250 | 251 | ### `/debug/gc` 252 | 253 | 请求方法:`PUT` 254 | 255 | - 进行主动 GC 256 | 257 | ### `/debug/pprof` 258 | 259 | 浏览器打开 `http://${controller-api}/debug/pprof` 可查看原始 DEBUG 信息,其中: 260 | 261 | - allocs 表示每个函数调用的内存分配情况,包括在堆栈上和堆上分配的内存大小以及内存分配次数。这个报告主要是为了帮助我们找到代码中存在的内存泄漏、内存频繁申请等问题。 262 | - heap 报告则给出了程序在堆上使用的内存的详细信息,其中包括被分配的内存块的大小、数量和地址,并且按照大小排序。这个报告主要是为了搜寻内存使用过高的地方,我们可以在 heap 报告中查看对象的大小,从而找到内存使用过高的地方。 263 | 264 | #### 安装 [Graphviz](https://graphviz.org/download/),可查看图形化的 debug 信息 265 | 266 | ##### 查看图形化 Heap 报告 267 | 268 | ```shell 269 | go tool pprof -http=:8080 http://127.0.0.1:xxxx/debug/pprof/heap 270 | ``` 271 | 272 | [Full image](../assets/image/api/heap.svg) 273 | 274 | ##### 查看图形化 Allocs 报告 275 | 276 | ```shell 277 | go tool pprof -http=:8080 http://127.0.0.1:xxxx/debug/pprof/allocs 278 | ``` 279 | 280 | [示例输出](../assets/image/api/allocs.svg) 281 | 282 | ##### 提交输出报告 283 | 284 | 浏览器访问 `http://${controller-api}/debug/pprof/heap?raw=true` 即可下载这个文件,通过上传到 [issues](https://github.com/MetaCubeX/mihomo/issues) 提交你遇到的问题。 285 | -------------------------------------------------------------------------------- /docs/example/geox: -------------------------------------------------------------------------------- 1 | # url 里填写自己的订阅,名称不能重复 2 | proxy-providers: 3 | provider1: 4 | url: "" 5 | type: http 6 | interval: 86400 7 | health-check: {enable: true,url: "https://www.gstatic.com/generate_204",interval: 300} 8 | override: 9 | additional-prefix: "[provider1]" 10 | 11 | provider2: 12 | url: "" 13 | type: http 14 | interval: 86400 15 | health-check: {enable: true,url: "https://www.gstatic.com/generate_204",interval: 300} 16 | override: 17 | additional-prefix: "[provider2]" 18 | 19 | proxies: 20 | - name: "直连" 21 | type: direct 22 | udp: true 23 | 24 | mixed-port: 7890 25 | ipv6: true 26 | allow-lan: true 27 | unified-delay: false 28 | tcp-concurrent: true 29 | external-controller: 127.0.0.1:9090 30 | external-ui: ui 31 | external-ui-url: "https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip" 32 | 33 | geodata-mode: true 34 | geox-url: 35 | geoip: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat" 36 | geosite: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat" 37 | mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb" 38 | asn: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/GeoLite2-ASN.mmdb" 39 | 40 | find-process-mode: strict 41 | global-client-fingerprint: chrome 42 | 43 | profile: 44 | store-selected: true 45 | store-fake-ip: true 46 | 47 | sniffer: 48 | enable: true 49 | sniff: 50 | HTTP: 51 | ports: [80, 8080-8880] 52 | override-destination: true 53 | TLS: 54 | ports: [443, 8443] 55 | QUIC: 56 | ports: [443, 8443] 57 | skip-domain: 58 | - "Mijia Cloud" 59 | - "+.push.apple.com" 60 | 61 | tun: 62 | enable: true 63 | stack: mixed 64 | dns-hijack: 65 | - "any:53" 66 | - "tcp://any:53" 67 | auto-route: true 68 | auto-redirect: true 69 | auto-detect-interface: true 70 | 71 | dns: 72 | enable: true 73 | ipv6: true 74 | enhanced-mode: fake-ip 75 | fake-ip-filter: 76 | - "*" 77 | - "+.lan" 78 | - "+.local" 79 | - "+.market.xiaomi.com" 80 | default-nameserver: 81 | - tls://223.5.5.5 82 | - tls://223.6.6.6 83 | nameserver: 84 | - https://doh.pub/dns-query 85 | - https://dns.alidns.com/dns-query 86 | 87 | proxy-groups: 88 | 89 | - name: 默认 90 | type: select 91 | proxies: [自动选择,直连,香港,台湾,日本,新加坡,美国,其它地区,全部节点] 92 | 93 | - name: Google 94 | type: select 95 | proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连] 96 | 97 | - name: Telegram 98 | type: select 99 | proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连] 100 | 101 | - name: Twitter 102 | type: select 103 | proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连] 104 | 105 | - name: 哔哩哔哩 106 | type: select 107 | proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连] 108 | 109 | - name: 巴哈姆特 110 | type: select 111 | proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连] 112 | 113 | - name: YouTube 114 | type: select 115 | proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连] 116 | 117 | - name: NETFLIX 118 | type: select 119 | proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连] 120 | 121 | - name: Spotify 122 | type: select 123 | proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连] 124 | 125 | - name: Github 126 | type: select 127 | proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连] 128 | 129 | - name: 国内 130 | type: select 131 | proxies: [直连,默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择] 132 | 133 | - name: 其他 134 | type: select 135 | proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连] 136 | 137 | #分隔,下面是地区分组 138 | - name: 香港 139 | type: select 140 | include-all: true 141 | exclude-type: direct 142 | filter: "(?i)港|hk|hongkong|hong kong" 143 | 144 | - name: 台湾 145 | type: select 146 | include-all: true 147 | exclude-type: direct 148 | filter: "(?i)台|tw|taiwan" 149 | 150 | - name: 日本 151 | type: select 152 | include-all: true 153 | exclude-type: direct 154 | filter: "(?i)日|jp|japan" 155 | 156 | - name: 美国 157 | type: select 158 | include-all: true 159 | exclude-type: direct 160 | filter: "(?i)美|us|unitedstates|united states" 161 | 162 | - name: 新加坡 163 | type: select 164 | include-all: true 165 | exclude-type: direct 166 | filter: "(?i)(新|sg|singapore)" 167 | 168 | - name: 其它地区 169 | type: select 170 | include-all: true 171 | exclude-type: direct 172 | filter: "(?i)^(?!.*(?:🇭🇰|🇯🇵|🇺🇸|🇸🇬|🇨🇳|港|hk|hongkong|台|tw|taiwan|日|jp|japan|新|sg|singapore|美|us|unitedstates)).*" 173 | 174 | - name: 全部节点 175 | type: select 176 | include-all: true 177 | exclude-type: direct 178 | 179 | - name: 自动选择 180 | type: url-test 181 | include-all: true 182 | exclude-type: direct 183 | tolerance: 10 184 | 185 | rules: 186 | - GEOIP,lan,直连,no-resolve 187 | - GEOSITE,github,Github 188 | - GEOSITE,twitter,Twitter 189 | - GEOSITE,youtube,YouTube 190 | - GEOSITE,google,Google 191 | - GEOSITE,telegram,Telegram 192 | - GEOSITE,netflix,NETFLIX 193 | - GEOSITE,bilibili,哔哩哔哩 194 | - GEOSITE,bahamut,巴哈姆特 195 | - GEOSITE,spotify,Spotify 196 | - GEOSITE,CN,国内 197 | - GEOSITE,geolocation-!cn,其他 198 | 199 | - GEOIP,google,Google 200 | - GEOIP,netflix,NETFLIX 201 | - GEOIP,telegram,Telegram 202 | - GEOIP,twitter,Twitter 203 | - GEOIP,CN,国内 204 | - MATCH,其他 205 | --------------------------------------------------------------------------------