进阶配置 预计阅读 10 分钟

Clash 局域网共享代理:开启 allow-lan 让手机与电视走电脑代理

从混合端口原理讲到 allow-lan 与 bind-address 的配置,再到防火墙放行和其他设备填写代理地址的完整步骤。

共享代理的连接路径:设备连接电脑的 7890 端口

Clash 局域网共享代理的基本路径是:手机或电视向电脑的代理端口发起请求,电脑上的 Clash 或 mihomo 按当前配置匹配规则,再选择代理节点或直连。远端设备使用的是电脑提供的 HTTP 或 SOCKS 代理入口,不是直接导入电脑上的订阅。

本文统一使用一个配置示例:电脑的局域网 IPv4 地址为 192.168.1.20,手机地址为 192.168.1.35,混合端口为 7890。实际操作时应使用自己的电脑地址。电脑可以通过网线连接路由器,手机通过 Wi-Fi 连接;关键是两台设备之间可以互相访问,而不是连接方式必须相同。

  • mixed-port:在同一个端口接受 HTTP 与 SOCKS 代理连接。本文让手机使用其中的 HTTP 代理入口。
  • allow-lan:允许来自其他设备的代理连接。仅开启电脑的“系统代理”通常不等于允许局域网访问。
  • bind-address:决定代理服务监听哪些本地地址,需要配合 allow-lan: true 使用。
  • external-controller:管理 API 的监听地址,不是手机应填写的代理地址。

先确认电脑地址、网络隔离与本机代理

找到当前联网网卡的 IPv4 地址

Windows 可以进入「设置」→「网络和 Internet」→ 当前使用的「Wi-Fi」或「以太网」→ 网络属性,查看 IPv4 地址,也可以运行下面的命令。电脑同时安装虚拟机、VPN 或 TUN 网卡时,应选择连接家庭路由器的物理网卡地址,不要直接复制虚拟网卡地址。

ipconfig

macOS 可在「系统设置」→「网络」→ 当前连接 →「详细信息」→「TCP/IP」查看 IP 地址。Linux 可运行 ip -4 addr,检查当前以太网或无线网卡的 inet 字段。127.0.0.1 是设备自身的回环地址,手机填写它只会连接手机自己。

确认设备之间允许通信

  • 手机暂时关闭蜂窝数据,连接与电脑互通的家庭 Wi-Fi。
  • 不要使用路由器的访客网络。访客隔离、AP 隔离或无线客户端隔离可能阻止设备访问电脑。
  • 不同子网之间需要路由及访问规则;例如 192.168.1.0/24 与 192.168.50.0/24 不会仅因属于同一路由器就必然互通。
  • 先确认电脑本机的 Clash 订阅可用、节点已选中、规则模式能够正常访问目标网站,再排查共享链路。

建议在路由器 DHCP 设置中为电脑保留固定租约,例如持续分配 192.168.1.20。如果电脑每次联网后地址变化,手机保存的代理服务器地址也要跟着修改。

配置 allow-lan、bind-address 与 mixed-port

客户端界面中的开关可能叫“允许局域网连接”或“Allow LAN”,混合端口可能位于端口设置中。不同客户端的菜单层级并不一致,判断是否成功应以运行中的配置和监听状态为准。使用 mihomo 配置文件时,下面三个字段位于 YAML 顶层,不能缩进到 proxies 或 dns 内。

# 合并到现有配置的顶层,不要替换整份订阅
mixed-port: 7890
allow-lan: true
bind-address: "192.168.1.20"

这个示例只在电脑的指定 IPv4 地址上监听。电脑必须实际拥有该地址,否则可能无法启动监听。如果需要跨多个网卡监听,可以使用 bind-address: "*",但它会扩大可接入的网络范围,应同时收紧防火墙。只绑定 127.0.0.1 则无法接收手机的局域网连接。

  1. 记录原配置,确认 7890 没有被另一个代理进程占用。
  2. 通过客户端提供的设置或配置覆写入口保存修改,避免直接修改会被订阅更新替换的临时文件。
  3. 应用配置;如果监听未变化,再按客户端要求重启内核。
  4. 检查运行日志,确认没有地址绑定失败或端口占用错误。

在 Windows PowerShell 中可以检查监听地址。输出的 LocalAddress 应包含指定局域网地址;若配置为全接口监听,也可能看到通配地址。仅看到 127.0.0.1 时,说明局域网入口还未生效。

Get-NetTCPConnection -State Listen -LocalPort 7890 |
  Select-Object LocalAddress, LocalPort, OwningProcess

Linux 可使用 ss -lntp 'sport = :7890';macOS 可使用 lsof -nP -iTCP:7890 -sTCP:LISTEN。如果客户端的设置覆盖了 YAML 文件,应回到客户端配置入口调整,而不是反复修改未被加载的文件。

防火墙只放行可信局域网的 TCP 7890

监听成功只代表程序已准备接收连接,操作系统防火墙仍可能拦截外部设备。本文的 Wi-Fi HTTP 代理测试只需要入站 TCP 7890,不需要同时开放所有端口,也不需要关闭整台电脑的防火墙。

Windows:限定来源网段与网络配置文件

先确认当前网络属于可信家庭网络,并在 Windows 网络属性中将其设为“专用网络”。随后以管理员身份打开 PowerShell,按实际网段修改下面的来源地址。此示例只接受 192.168.1.0/24 来源的连接,而且仅在专用网络配置文件下生效。

New-NetFirewallRule `
  -DisplayName "Clash LAN TCP 7890" `
  -Direction Inbound `
  -Action Allow `
  -Protocol TCP `
  -LocalPort 7890 `
  -RemoteAddress 192.168.1.0/24 `
  -Profile Private

如果只允许一台手机,可以把 -RemoteAddress 改成该手机的 IP 地址,并为手机设置 DHCP 保留地址。停止共享后,可删除这条规则:

Remove-NetFirewallRule -DisplayName "Clash LAN TCP 7890"

macOS 与 Linux:检查应用及端口规则

macOS 可进入「系统设置」→「网络」→「防火墙」→「选项」,检查实际接收连接的客户端或内核程序是否允许传入连接。如果启用了“阻止所有传入连接”,应先评估并调整该策略。第三方防火墙也可能独立拦截,不能仅凭系统设置判断已放行。

Linux 若已经使用 UFW,可添加限定来源的规则;没有使用 UFW 时,应在现有的 nftables、firewalld 或其他防火墙体系中配置,不要为一次测试直接切换防火墙管理工具。

sudo ufw allow from 192.168.1.0/24 to any port 7890 proto tcp

手机与电视填写代理服务器地址

下面的填写方式对应 HTTP 代理。服务器栏只填 192.168.1.20,端口栏填 7890;不要在服务器栏附加 http://、路径或端口。对于单独要求完整代理 URL 的应用,才使用 http://192.168.1.20:7890。

设备常见设置位置填写内容
iPhone / iPad设置 → Wi-Fi → 当前网络右侧信息按钮 → 配置代理 → 手动服务器 192.168.1.20;端口 7890
Android 手机设置 → WLAN 或互联网 → 当前网络 → 编辑网络 → 高级选项 → 代理 → 手动代理主机名 192.168.1.20;代理端口 7890
Android TV / Google TV设置 → 网络和互联网 → 当前网络 → 代理设置;具体入口随厂商变化选择手动后填写相同主机与端口

Android 与 iOS 的使用边界

Android 厂商可能把代理设置放在“修改网络”或编辑图标内。保留 IP 设置为 DHCP,通常无需为了设置代理改成静态 IP。iOS 的代理设置绑定当前 Wi-Fi,不会自动用于蜂窝数据,也不会自动复制到其他 Wi-Fi 网络。

部分应用会在建立连接时读取代理设置,修改后可彻底退出应用再打开。浏览器可用而某个应用不可用时,应先检查应用是否支持系统 HTTP 代理,而不是立即改成全局模式。

电视没有代理菜单怎么办

部分电视固件不提供手动 HTTP 代理入口,或者只有浏览器遵循该设置。此时仅开启电脑的 allow-lan 无法强制电视使用代理。需要选择电视端支持的客户端、应用内代理设置,或采用另外设计的路由器网关方案;电脑共享端口本身不会改变电视的默认网关。

分层验证:连接端口、观察日志、检查规则

不要只看一次网页能否打开就判断所有流量已被代理。可以先用另一台电脑验证端口和代理协议,再在手机浏览器测试,同时观察 Clash 的连接记录。以下命令必须从另一台局域网设备执行,才能覆盖设备间防火墙与网络隔离问题。

# Windows:检查 TCP 端口可达性
Test-NetConnection 192.168.1.20 -Port 7890

# macOS、Linux 或带 curl 的其他设备:显式使用 HTTP 代理
curl -I --connect-timeout 5 \
  --proxy http://192.168.1.20:7890 \
  https://example.com/

TcpTestSucceeded: True 只说明 TCP 连接成功,不保证节点可用。curl 测试中 HTTPS 会使用 HTTP CONNECT 隧道,正常共享代理不需要在手机安装证书。若出现证书错误,应检查设备时间、目标站点与已有证书配置,不要以关闭证书验证作为解决办法。

  1. 端口超时:依次检查电脑 IP、监听地址、防火墙和路由器客户端隔离。
  2. 连接被拒绝:检查内核是否运行、混合端口是否确为 7890,以及是否只监听回环地址。
  3. 代理收到请求但访问失败:检查节点连通性、订阅是否过期、命中的策略组和 DNS 日志。
  4. 网页成功但应用失败:检查应用是否忽略系统代理,或是否使用 HTTP 代理不能承载的 UDP 流量。

在规则模式下,共享设备的请求仍受电脑当前规则与策略组控制。命中 DIRECT 的请求会从电脑直连,并非所有请求都必然经过节点。桌面客户端展示的进程名也不一定是手机上的真实应用,不能据此准确识别手机应用。

TUN、DNS 与共享安全的常见边界

电脑开启 TUN 不会自动接管手机

电脑的 TUN 通常接管送入本机虚拟网卡的连接。手机只是与电脑处于同一 Wi-Fi 时,它的默认路由仍指向路由器,并不会自动进入电脑的 TUN。本文的共享方式依靠手机显式连接 192.168.1.20:7890,不要求为了这一步额外开启 TUN。

把电脑改成手机的网关涉及 IP 转发、路由、地址转换和 DNS,是另一套网络拓扑。只改网关地址而没有转发配置,可能直接导致手机断网。对需要完整 UDP 与设备级流量接管的场景,应使用适合该设备的 VPN/TUN 客户端或经过规划的网关方案。

HTTP 代理不代表手机的全部 DNS 都经过电脑

当应用把域名交给 HTTP 代理时,代理端可依据自身配置处理解析与路由。但应用也可能先在本地解析、使用内置加密 DNS,或完全绕过系统代理。因此不能仅凭 Wi-Fi 代理已填好,就认定手机的所有 DNS 查询都由 mihomo 处理。排查时应结合目标域名、实际连接记录与 DNS 设置,不要直接套用面向 TUN 的 Fake-IP 配置。

共享期间保持最小开放范围

  • 不要在路由器上把公网端口转发到电脑的 7890,也不要把管理 API 暴露到公网。
  • 需要身份验证时,可配置 mihomo 的 authentication,但应先确认设备的手动代理入口支持代理认证;部分电视入口不支持。
  • 电脑休眠、关机、切换 Wi-Fi 或内核退出后,依赖该代理的设备可能无法联网。
  • 停止共享时,将手机与电视的代理设置恢复为“无”或“关闭”,再关闭 Allow LAN,并删除不再使用的防火墙规则。

稳定使用的关键是四个条件同时成立:电脑地址固定、代理监听正确、可信来源能够穿过防火墙、应用确实遵循代理设置。先让浏览器的单次 HTTP 代理请求通过,再扩展到电视与其他应用,比同时修改 TUN、DNS 和路由更容易定位问题。更多配置字段可查阅进阶配置,初次导入订阅可先阅读Clash 使用教程。

下载Clash