Clash 混合端口与局域网共享代理设置:allow-lan 配置与设备接入实操

讲清 mixed-portallow-lan 两个字段的作用,演示如何让同一局域网内的手机、电视盒子借用一台机器的 Clash 代理,并给出绑定地址、防火墙放行与安全边界的注意事项。

为什么要共享一台机器的代理

很多人先在一台 Linux 主机或路由器上跑通了 Clash,随后发现手机、平板、电视盒子、游戏主机上重复安装客户端既繁琐又浪费订阅流量额度。这类设备往往系统封闭、缺少可用的代理客户端,或者本身就不支持导入 YAML 配置。更现实的做法是把已经跑通的一台机器当作局域网内的“代理出口”,其余设备只需在系统网络设置里填一个 IP 和端口,就能复用同一份节点与规则,不必逐台配置订阅。要做到这一点,核心只涉及两个配置字段:mixed-port 决定监听哪个端口,allow-lan 决定这个端口是否只服务本机。

mixed-port 字段到底做了什么

早期版本的 Clash 需要分别用 port 开一个 HTTP 代理端口、socks-port 开一个 SOCKS5 代理端口,两者互不相通。mixed-port 是后来引入的混合端口,一个端口同时接受 HTTP(S) 代理请求和 SOCKS5 代理请求,客户端按自己发出的协议自动匹配,不需要额外区分。现在主流的 Clash Meta(mihomo)内核默认就是用 mixed-port,配置里保留 port/socks-port 只是为了兼容老工具链。

mixed-port: 7890
allow-lan: false
bind-address: "*"
mode: rule
log-level: info

上面这段是最基础的骨架。默认状态下 allow-lanfalse,Clash 只监听本机回环地址(127.0.0.1),这意味着即便端口开着,局域网里的其他设备也连不进来,这是出于安全考虑的默认值,不是 bug。

allow-lan 与 bind-address:打开局域网访问的开关

allow-lan 决定 Clash 是否接受来自非本机地址的连接请求。把它改成 true 后,Clash 会开始监听局域网网卡上的地址,而不再局限于 127.0.0.1。bind-address 则进一步指定监听哪些网卡地址,默认值 "*" 表示监听机器上所有可用网络接口,包括有线网卡、Wi-Fi 网卡以及虚拟网卡;如果只想限定某一张网卡,可以填具体的局域网 IP,例如 192.168.1.20,这样即便机器还接了其他网络(比如虚拟机内网、VPN 网卡),代理端口也只在指定网卡上暴露。

mixed-port: 7890
allow-lan: true
bind-address: "*"
mode: rule

把这两行改完保存后,还需要重启 Clash 内核或让客户端重新加载配置,改动才会生效。桌面客户端一般在配置详情页有单独的“允许局域网连接”开关,勾选它等价于把 allow-lan 设为 true,底层写入的仍是这份 YAML。

局域网设备接入实操

先确认运行 Clash 的那台机器在局域网里的实际地址,而不是 127.0.0.1 或公网 IP:

ip addr show | grep "inet "
# 或
hostname -I

假设输出里看到的局域网地址是 192.168.1.20,监听端口是 7890,接下来分别在不同设备上完成接入:

手机(Android/iOS)

  1. 连接到与 Clash 主机同一个 Wi-Fi。
  2. 进入系统「Wi-Fi 设置」→ 当前网络详情 → 代理设置,选择「手动」。
  3. 服务器地址填 192.168.1.20,端口填 7890
  4. 保存后打开浏览器访问站点验证是否走了代理,规则模式下可结合 Clash 面板的连接日志确认。

电视盒子 / 智能电视

大多数电视系统的网络设置里也有类似的手动代理选项,路径通常在「设置 → 网络 → 高级设置 → 代理」下。部分厂商定制系统不提供代理入口,这类设备可以考虑改成让路由器整体转发,或者退回到在盒子上单独装支持导入配置的客户端。

Linux / Windows / macOS 设备

桌面系统里直接在系统网络设置的代理选项中填局域网 IP 和端口即可,浏览器如果单独设置了代理,记得保持地址一致,避免出现系统代理和浏览器代理指向不同端口导致的连接混乱。

防火墙放行与连通性检查

改完配置连不上,十有八九是防火墙拦住了端口,而不是 Clash 配置本身出了问题。先在 Clash 主机上放行对应端口:

# ufw(Debian/Ubuntu 系)
sudo ufw allow 7890/tcp

# firewalld(Fedora/RHEL 系)
sudo firewall-cmd --add-port=7890/tcp --permanent
sudo firewall-cmd --reload

放行后,在另一台设备上用 nctelnet 简单探测端口是否可达:

nc -zv 192.168.1.20 7890

如果提示连接成功,说明网络层已经打通,若手机端仍无法上网,再回头检查代理模式(全局/规则)以及节点是否可用。如果探测直接超时,大概率是防火墙规则没生效或者 bind-address 绑定的网卡不对,可以先临时把 bind-address 设为 "*" 排除范围问题。

注意

路由器的端口映射(端口转发)功能与本文场景无关,不要为了局域网共享而把 7890 端口转发到公网。局域网共享只需要同一个内网互通,一旦端口暴露到公网,任何知道公网 IP 的人都可能尝试连接你的代理出口。

安全边界与访问控制建议

打开 allow-lan 之后,同一局域网内的所有设备默认都能连接这个端口,包括访客 Wi-Fi、蹭网设备或者被入侵的 IoT 设备。如果局域网环境不完全可信,建议叠加以下几层限制:

  • 在配置里加入 authentication 字段,为代理连接设置用户名密码,未授权的连接会被拒绝。
  • bind-address 精确绑定到某张网卡的具体 IP,而不是笼统的 "*",缩小暴露面。
  • 路由器层面给可信设备划分独立的 VLAN 或访客隔离,避免访客网络里的设备也能探测到代理端口。
  • 不需要长期共享时,用完及时把 allow-lan 改回 false,而不是一直开着。
mixed-port: 7890
allow-lan: true
bind-address: 192.168.1.20
authentication:
  - "labuser:a-strong-password"

加上 authentication 后,接入设备的系统代理设置里通常也需要填入对应的用户名密码,具体入口因系统而异,填错会直接被拒绝连接而不是静默失败,遇到连不上时记得先核对这一项。

常见接入问题排查

局域网共享代理翻车,基本逃不出下面几种情况,按顺序自查即可:

  • 手机能连 Wi-Fi 但代理不生效:检查系统代理设置里的服务器地址是不是敲错了一位数字,局域网 IP 在路由器重启后可能会变化,建议在路由器上给 Clash 主机绑定静态 IP 或做 DHCP 保留。
  • 局域网内一台设备行、另一台不行:多半是那台设备连的是访客网络或不同网段的 Wi-Fi,和 Clash 主机不在同一子网,自然探测不到端口。
  • 白天能用、重启路由器后失效:同样是 IP 漂移导致,固定局域网地址后一次性解决。
  • 改完配置没反应:确认改动是保存到了 Clash 实际加载的那份配置文件,而不是模板或备份文件,改完后需要重启内核或在客户端里重新加载配置才会生效。

把这几项挨个核对完,再结合前面提到的端口探测命令,基本能把局域网共享代理的连通性问题定位清楚。

获取 Clash 客户端

需要先在一台机器上跑通 Clash,再考虑局域网共享;下载页覆盖 Linux、Windows、macOS、Android、iOS 客户端。

前往下载页 查看使用文档
下载客户端