{
"title": "用 Mihomo Listeners 一行配置开一个节点",
"author": "guest",
"date": "2026年05月16日",
"tags": ["教程"],
"read": "~4min"
}用 Mihomo Listeners 一行配置开一个节点
在 OpenWrt 上,Passwall2 可以轻松为每个代理节点开独立端口。但 Passwall2 只适用于 OpenWrt,Linux 服务器或其他环境下怎么办?Mihomo 原生支持 `listeners` 功能,只需在 `config.yaml` 里加几行 YAML,就能在任何环境实现「每个节点一个端口,即连即用」的效果。
为什么需要 Mihomo Listeners
在 OpenWrt 上,Passwall2 这类插件可以轻松实现「每个代理节点开一个独立端口」,然后按设备分流:手机走日本、电视走香港、爬虫走美国。
但 Passwall2 只能运行在 OpenWrt 上。如果你有一台 Linux 服务器、NAS 或者其他环境,也想实现同样的效果(每个节点一个端口,即连即用),就没有现成的图形化工具了。
好在 Mihomo 原生支持 listeners 功能,在配置文件里加几行 YAML 就能搞定。不依赖任何额外插件,任何能跑 Mihomo 的环境都能用。
| Passwall2 | Mihomo 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 | 监听器标识,随意取,不重复即可 |
type | socks(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写的一款极简代理扩展
在 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