Surge通过mihomo内核使用VLESS协议配置教程

一、 环境准备与安装

  1. 安装 mihomo

    使用 Homebrew 安装:

    brew install mihomo

  2. 建立符号链接

    将二进制文件链接至系统标准路径:

    sudo ln -s /opt/homebrew/bin/mihomo /usr/local/bin/mihomo

二、 配置 Surge 外部代理策略

在 Surge 配置文件的 [Proxy] 段落中添加以下内容。注意将 你的用户名 替换为实际的 macOS 用户名:

[Proxy]
mihomo = external, exec="/usr/local/bin/mihomo", local-port=65535, args="-d", args="/Users/你的用户名/.config/mihomo", args="-f", args="/Users/你的用户名/.config/mihomo/config.yaml", addresses=127.0.0.1

参数说明:

  • local-port:必须与下方 mihomo 配置文件中的 mixed-port 保持一致,且不能与 Surge 自身的监听端口(如 7890)冲突 。

  • args-d 指定工作目录,用于寻找 MMDB 数据库等资源;-f 指定配置文件绝对路径 。

  • addresses:ai建议在此填入代理服务器的真实 IP,可避免 Surge 增强模式对代理流量的二次拦截 。

  • 极简设置:实际使用只填写mihomo = external, exec="/usr/local/bin/mihomo", local-port=65535也可正常使用。

三、 编辑 mihomo 配置文件

配置文件路径:/Users/你的用户名/.config/mihomo/config.yaml

1. 极简配置

参考ACL4SSR Clash配置编写了一版配置,建议自行按需编辑,可以考虑提供节点和订阅信息让ai辅助编写。

mixed-port: 65535
allow-lan: true
mode: rule
auto-update: false
geodata-mode: false
external-controller: 127.0.0.1:9090
secret: "000000"
dns:
  enable: true
  ipv6: true
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  nameserver:
    - 119.29.29.29
    - 223.5.5.5
    - https://doh.pub/dns-query
    - https://223.5.5.5/dns-query
    - https://doh.360.cn/dns-query
    - https://dns.alidns.com/dns-query 

proxy-providers:
  Node:
    type: http
    url: "" 
    path: ./proxy_providers/node.yaml
    interval: 3600
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 300
    payload:
      - name: "Node"
        type: vless
        server: ""
        port: 0
        uuid: ""
        udp: true
        tls: true
        flow: xtls-rprx-vision
        servername: ""
        client-fingerprint: chrome
        reality-opts:
          public-key: ""
        encryption: none
        network: tcp

  Sub:
    type: http
    url: ""
    path: ./proxy_providers/sub.yaml
    interval: 3600
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 300

proxy-groups:
  - name: 🚀 节点选择
    type: select
    use:
      - Node
      - Sub
    proxies:
      - ♻️ 自动选择
      - 🔯 故障转移
      - 🔮 负载均衡
      - 🇭🇰 香港节点
      - 🇯🇵 日本节点
      - 🇺🇲 美国节点
      - 🇨🇳 台湾节点
      - 🇸🇬 狮城节点
      - 🇰🇷 韩国节点
      - DIRECT

  - name: ♻️ 自动选择
    type: url-test
    use:
      - Sub
    url: http://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50

  - name: 🔯 故障转移
    type: fallback
    use:
      - Sub
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: 🔮 负载均衡
    type: load-balance
    use:
      - Sub
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: 📲 电报消息
    type: select
    proxies:
      - ♻️ 自动选择
      - 🔯 故障转移
      - 🔮 负载均衡
      - 🇭🇰 香港节点
      - 🇯🇵 日本节点
      - 🇺🇲 美国节点
      - 🇨🇳 台湾节点
      - 🇸🇬 狮城节点
      - 🇰🇷 韩国节点

  - name: 📹 油管视频
    type: select
    proxies:
      - ♻️ 自动选择
      - 🔯 故障转移
      - 🔮 负载均衡
      - 🇭🇰 香港节点
      - 🇯🇵 日本节点
      - 🇺🇲 美国节点
      - 🇨🇳 台湾节点
      - 🇸🇬 狮城节点
      - 🇰🇷 韩国节点

  - name: 🎯 全球直连
    type: select
    proxies:
      - ♻️ 自动选择
      - 🔯 故障转移
      - 🔮 负载均衡
      - 🇭🇰 香港节点
      - 🇯🇵 日本节点
      - 🇺🇲 美国节点
      - 🇨🇳 台湾节点
      - 🇸🇬 狮城节点
      - 🇰🇷 韩国节点
      - DIRECT

  - name: 🛑 广告拦截
    type: select
    proxies:
      - REJECT
      - DIRECT

  - name: 🇭🇰 香港节点
    type: url-test
    use:
      - Sub
    filter: "(?i)港|hk|hongkong|hong kong"
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: 🇯🇵 日本节点
    type: url-test
    use:
      - Sub
    filter: "(?i)日本|jp|japan"
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: 🇺🇲 美国节点
    type: url-test
    use:
      - Node
      - Sub
    filter: "(?i)美|us|united states|Node"
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: 🇸🇬 狮城节点
    type: url-test
    use:
      - Sub
    filter: "(?i)新加坡|sg|singapore"
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: 🇨🇳 台湾节点
    type: url-test
    use:
      - Sub
    filter: "(?i)台|tw|taiwan"
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: 🇰🇷 韩国节点
    type: url-test
    use:
      - Sub
    filter: "(?i)韩|kr|korea"
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: 🐟 漏网之鱼
    type: select
    proxies:
      - 🚀 节点选择
      - DIRECT

rule-providers:
  LocalAreaNetwork:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/LocalAreaNetwork.yaml"
    interval: 86400
    path: ./ACL4SSR/LocalAreaNetwork.yaml
  UnBan:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/UnBan.yaml"
    interval: 86400
    path: ./ACL4SSR/UnBan.yaml
  BanAD:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/BanAD.yaml"
    interval: 86400
    path: ./ACL4SSR/BanAD.yaml
  BanProgramAD:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/BanProgramAD.yaml"
    interval: 86400
    path: ./ACL4SSR/BanProgramAD.yaml
  Telegram:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/Telegram.yaml"
    interval: 86400
    path: ./ACL4SSR/Telegram.yaml
  ChinaDomain:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/ChinaDomain.yaml"
    interval: 86400
    path: ./ACL4SSR/ChinaDomain.yaml

rules:
  - RULE-SET,LocalAreaNetwork,🎯 全球直连
  - RULE-SET,UnBan,🎯 全球直连
  - RULE-SET,BanAD,🛑 广告拦截
  - RULE-SET,BanProgramAD,🛑 广告拦截
  - RULE-SET,Telegram,📲 电报消息
  - RULE-SET,ChinaDomain,🎯 全球直连
  - GEOIP,CN,🎯 全球直连
  - MATCH,🐟 漏网之鱼

2. 地理数据库 (MMDB) 配置

若需使用 GEOIP 分流,mihomo 必须在工作目录下找到数据库文件。

  • 推荐方案:直接映射 Surge 现有的数据库文件:

    ln -s "/Users/你的用户名/Library/Application Support/com.nssurge.surge-mac/GeoLite2-Country.mmdb" "/Users/你的用户名/.config/mihomo/Country.mmdb"

  • 备用方案:自行检索下载Country.mmdb文件到/Users/你的用户名/.config/mihomo/

四、 故障排查

日志监控

若启动失败或报错,请检查 /private/tmp 目录下的日志文件:

Surge-External-mihomo.log:记录了外部进程的所有输出 。
Surge-External-vless.log
SurgeHelper.log
SurgeSystemExtension.log

五、使用

Surge调用

在Surge某策略组中选中mihomo策略,无需手动启动mihomo

Web 面板管理

打开任意 mihomo web控制面板(如 MetaCubeXD),主机填入 127.0.0.1,端口 9090,密钥为你在 secret 中设置的内容。连接成功后即可实时切换节点。

14 个赞

在网上没有找到详细教程,各论坛里大佬们都说得比较简洁,研究了两天写了一下教程,可能有各种缺漏或更优配置,欢迎提出建议!

没懂用 surge 为什么还有用这个内核

当然是支持surge不支持的vless或者ssr等协议了

是为了 surge 的其他功能吗

就是为了用vless协议,印象中开发者是觉得vless协议有缺陷所以不想支持,但它确实是现在比较火的协议,手上有机场主要是vless协议节点,所以研究了一下

折腾万岁 感谢分享