~/blog:2026/yong-mihomo-listeners-tidai-passwall2-yixingpeizhikaiyigejiedian
post.json
{
  "title": "用 Mihomo Listeners 一行配置开一个节点",
  "author": "guest",
  "date": "2026年05月16日",
  "tags": ["教程"],
  "read": "~4min"
}

用 Mihomo Listeners 一行配置开一个节点

在 OpenWrt 上,Passwall2 可以轻松为每个代理节点开独立端口。但 Passwall2 只适用于 OpenWrt,Linux 服务器或其他环境下怎么办?Mihomo 原生支持 `listeners` 功能,只需在 `config.yaml` 里加几行 YAML,就能在任何环境实现「每个节点一个端口,即连即用」的效果。

content.mdx

为什么需要 Mihomo Listeners

在 OpenWrt 上,Passwall2 这类插件可以轻松实现「每个代理节点开一个独立端口」,然后按设备分流:手机走日本、电视走香港、爬虫走美国。

但 Passwall2 只能运行在 OpenWrt 上。如果你有一台 Linux 服务器、NAS 或者其他环境,也想实现同样的效果(每个节点一个端口,即连即用),就没有现成的图形化工具了。

好在 Mihomo 原生支持 listeners 功能,在配置文件里加几行 YAML 就能搞定。不依赖任何额外插件,任何能跑 Mihomo 的环境都能用。

Passwall2Mihomo Listeners
运行环境仅 OpenWrt任何能跑 Mihomo 的环境
额外安装需要不需要
节点来源独立订阅,与 Mihomo 不同步直接用 Mihomo 已有的节点
配置方式Luci 界面点来点去YAML 加几行,可脚本批量生成
维护成本两套系统要分别更新一套配置全搞定

配置方法

在 Mihomo 的 config.yaml 末尾添加 listeners 段即可:

# 以下节点名称和端口号均为示例,请替换为你自己的节点名和可用端口
listeners:
  - name: socks5-hk01       # 监听器名称(自定义,方便识别)
    type: socks              # 协议类型:socks 或 http
    port: 10001              # 监听端口(自行规划,避免冲突)
    proxy: "香港节点A"       # 必须与 proxies 中的节点名完全一致

  - name: http-hk01
    type: http
    port: 10201
    proxy: "香港节点A"

  - name: socks5-jp01
    type: socks
    port: 10002
    proxy: "日本节点B"

  - name: http-jp01
    type: http
    port: 10202
    proxy: "日本节点B"

就这些。重启 Mihomo 后立即生效。

字段说明

字段说明
name监听器标识,随意取,不重复即可
typesocks(SOCKS5)或 http(HTTP 代理)
port本地监听端口号
proxy必须与 proxies 中的节点名完全一致(含 emoji 和空格)

端口规划建议

一套实用的编号规则能避免混乱:

SOCKS5 端口:10001、10002、10003 ...
HTTP   端口:10201、10202、10203 ...(偏移 200)

每个节点分配一对 SOCKS5 + HTTP 端口,方便不同场景使用。

使用方式

配置好后,直接将客户端指向对应端口:

# 走香港节点
curl --socks5 127.0.0.1:10001 https://ipinfo.io

# 走日本节点
curl --proxy http://127.0.0.1:10202 https://ipinfo.io

浏览器可用 SwitchyOmega 等插件按规则或手动切换到指定端口。

或者也可以用我让ai写的一款极简代理扩展

LiteProxy

在 OpenWrt 路由器上,结合防火墙规则或策略路由,可以让局域网内不同设备/IP 走不同的节点端口,实现和 Passwall2 一样的按设备分流效果。

完整示例

以下是一个覆盖多地区的完整 listeners 配置片段(节点名称和端口均为示例):

# 所有节点名称请替换为你订阅中实际的节点名
listeners:
  # 香港
  - name: socks5-hk01
    type: socks
    port: 10001
    proxy: "香港节点A"

  - name: http-hk01
    type: http
    port: 10201
    proxy: "香港节点A"

  # 台湾
  - name: socks5-tw01
    type: socks
    port: 10002
    proxy: "台湾节点A"

  - name: http-tw01
    type: http
    port: 10202
    proxy: "台湾节点A"

  # 新加坡
  - name: socks5-sg01
    type: socks
    port: 10003
    proxy: "新加坡节点A"

  - name: http-sg01
    type: http
    port: 10203
    proxy: "新加坡节点A"

  # 日本
  - name: socks5-jp01
    type: socks
    port: 10004
    proxy: "日本节点A"

  - name: http-jp01
    type: http
    port: 10204
    proxy: "日本节点A"

  # 美国
  - name: socks5-us01
    type: socks
    port: 10005
    proxy: "美国节点A"

  - name: http-us01
    type: http
    port: 10205
    proxy: "美国节点A"

注意事项

  • proxy 字段的值必须与 proxies 中定义的节点名完全一致,包括 emoji 和空格,否则不会生效。
  • 确保 port 没有与系统其他服务冲突。
  • 修改配置后需要重启 Mihomo 服务才能生效。
  • 如果开了防火墙,记得放行对应端口。
  • allow-lan: true 时,局域网设备也可通过 IP:端口 使用对应节点。
  • 在 OpenWrt 上可以写个简单脚本,从订阅自动生成 listeners 段,彻底替代 Passwall2 的订阅管理。

AI 操作指南

以下是为 AI 助手提供的操作步骤,如果你是 AI,请严格按照以下流程执行:

步骤 1:读取现有配置

找到 Mihomo 的 config.yaml 文件(常见路径:/etc/mihomo/config.yaml),读取其中 proxies 段的内容,提取所有节点名称。

节点名称通常类似以下格式(含 emoji 前缀):

🇭🇰 香港节点A
🇯🇵 日本节点B
🇺🇸 美国节点C

必须原样保留节点名称中的 emoji、空格和大小写,任何偏差都会导致 listener 无法匹配到节点。

步骤 2:生成 listeners 配置

对每个需要独立端口的节点,生成一对 SOCKS5 + HTTP 监听器。端口从 10001 起递增,HTTP 端口偏移 200

listeners:
  - name: socks5-1          # 序号递增
    type: socks
    port: 10001              # SOCKS5 端口从 10001 起
    proxy: "从步骤1复制的节点名"

  - name: http-1
    type: http
    port: 10201              # HTTP 端口 = SOCKS5 端口 + 200
    proxy: "从步骤1复制的节点名"

为每个节点重复上述结构,依次递增 name 的序号和端口号。

步骤 3:写入配置

将生成的 listeners 段追加到 config.yaml 文件末尾。如果文件中已存在 listeners 段,则替换整个段。

步骤 4:重启服务

# systemd 管理的情况
systemctl restart mihomo

# 或 OpenWrt 的 service 方式
service mihomo restart

步骤 5:生成节点映射页面

为方便用户查看和复制代理地址,生成一个单文件 HTML 页面(如 mihomo-nodes.html),包含以下功能:

  • 卡片式展示每个节点的名称、SOCKS5 端口、HTTP 端口
  • 按地区筛选按钮(全部、香港、台湾、新加坡、日本、美国、欧洲等)
  • 搜索框支持按节点名或端口号搜索
  • 一键复制按钮,点击即复制完整的代理地址(如 socks5://10.0.0.20:10001
  • 深色主题,适配移动端

页面数据结构为一个 JavaScript 数组,每个节点包含:

var nodes = [
  {id: 1, name: "节点名称", region: "HK", socks5: 10001, http: 10201},
  {id: 2, name: "节点名称", region: "JP", socks5: 10002, http: 10202},
  // ...所有节点
];

地区分类规则(region 字段):

region 值匹配条件
HK节点名含香港/HK/HKG
TW节点名含台湾/TW/TWN
SG节点名含新加坡/SG/SGP
KR节点名含韩国/KR/KOR
JP节点名含日本/JP/JPN
US节点名含美国/US/USA
EU节点名含欧洲国家(DE/FR/GB/NL/PL/ES/RU/IS/DK/TR...)
other其余地区

头部 meta 区域显示:服务器 IP、节点总数、SOCKS5 端口范围、HTTP 端口范围。

IP 地址从服务器获取(如 hostname -I | awk '{print $1}'),写入页面顶部的 IP 变量和 meta 显示区。

步骤 6:验证

# 检查端口是否已监听
ss -tlnp | grep mihomo

# 测试某个节点是否生效(替换端口和预期 IP)
curl --socks5 127.0.0.1:10001 https://ipinfo.io/ip
./related.sh
$ cat related_posts.json
感谢阅读!如果觉得有用,欢迎分享~