共享代理的连接路径与适用范围

局域网共享代理,是让其他设备连接电脑上由 Clash 或 Clash Meta(mihomo)内核提供的代理监听端口。请求路径是“手机或电视 → 电脑局域网地址与端口 → 内核规则 → 对应出站”。电脑需要持续开机,客户端内核需要持续运行;电脑休眠后,这条路径就会中断。

本文使用一组示例参数:电脑 IPv4 地址为 192.168.1.20,混合端口为 7890,家庭网段为 192.168.1.0/24。这些是配置示例,不是对读者网络的检测结果。实际操作时,应将电脑地址替换为当前网卡获得的地址。

  • 适合:设备或应用支持手动设置 HTTP 代理,或者支持 SOCKS5 代理。
  • 前提:设备能够直接访问电脑的局域网地址,且电脑防火墙允许对应入站连接。
  • 边界:Wi-Fi 的 HTTP 代理设置通常不覆盖所有应用,也不等于整台设备的透明代理。
  • 区别:仅共享监听端口不需要把电脑设置为默认网关,也不要求打开 TUN 模式。

mixed-port、allow-lan 与 bind-address

这三个字段解决不同问题:监听什么协议、是否接受局域网连接、绑定哪个本地地址。它们都位于配置顶层,与 proxies、proxy-groups、rules 同级,不应缩进到某个代理节点下面。

字段示例值作用
mixed-port7890同一个端口接收 HTTP 与 SOCKS 代理请求。
allow-lantrue允许内核接受来自局域网设备的代理连接。
bind-address"*"绑定所有地址;配合防火墙限制实际可访问来源。
port7891单独的 HTTP 代理入口,不是使用混合端口的必需项。
socks-port7892单独的 SOCKS 代理入口,可按需求配置。

最小共享字段片段

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

这是需要合并到现有配置的字段片段,不是完整订阅配置。保留原有节点、策略组、DNS 与规则。若顶层已经存在 mixed-port,修改原值即可,不要再添加第二个同名字段;也不要让 port 或其他监听服务重复占用 7890。

"*" 必须保留引号,避免 YAML 将星号当作别名语法解析。如果只希望监听某张网卡,可将 bind-address 改为 192.168.1.20。这种写法依赖地址稳定,电脑切换网络或 DHCP 地址变化后,可能导致监听失败,需要同步更新配置。

external-controller 是控制接口,不是设备连接的代理入口。手机的代理端口应填写 mixed-port 对应的 7890,不能填写控制接口端口。为了共享代理而把控制接口暴露到局域网,并不是必要步骤。

电脑端:确认地址、应用配置、检查监听

1. 获取正在使用的局域网 IPv4 地址

Windows 可打开“设置”→“网络和 Internet”→“Wi-Fi”→当前网络属性,查看 IPv4 地址;有线连接在“以太网”页面查看。也可以打开终端执行 ipconfig,找到当前联网适配器的 IPv4 地址和子网掩码。

macOS 可进入“系统设置”→“网络”→当前连接→“详细信息”→“TCP/IP”。不要选取回环地址 127.0.0.1、虚拟网卡地址或已经断开的网卡地址。其他设备上的 127.0.0.1 指向其他设备自身,不会指向这台电脑。

2. 修改实际生效的配置

  1. 在客户端中确认当前启用的配置,记录现有端口和局域网访问开关。
  2. 通过客户端支持的配置编辑、覆写或合并功能,加入上述三个顶层字段。
  3. 保存后重新加载配置;若客户端要求重启内核,按提示执行。
  4. 检查运行日志,确认没有 YAML 解析错误或端口占用错误。

不同客户端的设置名称和覆盖优先级不同。界面中的“允许局域网连接”通常对应 allow-lan,但直接编辑订阅生成文件可能在更新后被覆盖。应优先使用该客户端提供的持久覆写方式,再检查最终运行配置,而不是只看编辑器里的原始订阅文本。

3. 检查端口是否监听在可达地址

Windows PowerShell 可执行以下命令,查看 TCP 监听地址。macOS 可使用第二条命令:

# Windows PowerShell
Get-NetTCPConnection -State Listen -LocalPort 7890

# macOS
lsof -nP -iTCP:7890 -sTCP:LISTEN

仅看到 127.0.0.1:7890,说明其他设备无法通过电脑的局域网 IPv4 地址访问该监听。绑定所有 IPv4 地址时,常见输出为 0.0.0.0:7890;绑定单个地址时,应看到对应的 192.168.1.20:7890。若显示 IPv6 通配监听,还需结合系统双栈行为和远端测试确认 IPv4 是否可达,不能只凭一个监听符号下结论。

防火墙与 Wi-Fi 隔离设置

allow-lan: true 不会自动替操作系统放行防火墙。端口在监听,但另一台设备连接超时,优先检查网络配置文件、入站规则和无线网络隔离,不要先更换节点。

Windows:只放行专用网络的 TCP 7890

在可信家庭网络中,先确认 Windows 将当前连接识别为“专用网络”。打开“Windows 安全中心”→“防火墙和网络保护”→“高级设置”,在“入站规则”中新建端口规则:选择 TCP、特定本地端口 7890、允许连接,并只勾选“专用”。在规则“属性”→“作用域”中,将远程 IP 范围限制到实际家庭网段。

也可以在管理员 PowerShell 中创建一条限定规则。下例只允许 192.168.1.0/24 访问电脑地址 192.168.1.20 上的 TCP 7890;执行前需按实际网络修改地址。

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

这条规则用于本文的 HTTP 代理连接测试,不代表已经配置 SOCKS5 的 UDP 转发。若有既存的广泛放行规则,也需要一起检查;新增限制规则并不会自动收紧其他允许规则。不要通过关闭整个防火墙来长期解决连接问题。

macOS 与路由器侧检查

  • macOS 在“系统设置”→“网络”→“防火墙”→“选项”中检查相关客户端或实际运行内核的入站权限。“阻止所有传入连接”可能妨碍共享。
  • 手机与电脑即使连接同名 Wi-Fi,也可能处于访客网络、不同 VLAN,或被 AP 隔离阻断。
  • 电脑使用网线、手机使用 Wi-Fi 并不必然有问题,关键是路由器是否允许两者互访。
  • 不需要设置路由器公网端口映射,也不要将代理端口加入 DMZ。

手机、电视与游戏机填写什么

iPhone 与 iPad:配置当前 Wi-Fi 的 HTTP 代理

  1. 进入“设置”→“无线局域网”,点击当前网络旁的信息按钮。
  2. 打开“配置代理”,选择“手动”。
  3. 服务器填写 192.168.1.20,端口填写 7890。
  4. 本文基础片段未配置代理认证,因此认证保持关闭,保存后用浏览器测试。

服务器栏只填 IP 地址,不填 http://,也不要把端口一起写入。该设置针对当前 Wi-Fi;切换到移动数据后不会继续使用这个局域网地址。

Android:在当前网络中选择手动代理

常见入口是“设置”→“网络和互联网”→“互联网”→当前 Wi-Fi→编辑→“高级选项”→“代理”→“手动”。厂商系统名称可能不同。代理主机名填写 192.168.1.20,代理端口填写 7890。测试期间先不要添加复杂的绕过地址列表,避免测试域名被排除。

Android 的 Wi-Fi 代理同样依赖应用遵循系统代理设置。浏览器正常而某个应用不通,不能直接认定端口配置错误;先检查该应用是否支持 HTTP 代理,是否提供独立的网络设置。

电视与游戏机:以设备提供的代理类型为准

如果网络设置提供“HTTP 代理服务器”,填入同一组地址和端口即可。若只提供 SOCKS5 设置,混合端口也能接收对应代理请求,但应用需要真正实现 SOCKS5。没有手动代理入口的设备,不能通过修改 DNS 来自动获得 HTTP 代理能力。

游戏机设置了 HTTP 代理后,商店页面、下载或登录环节的行为可能改变,但联机游戏的数据流未必经过该端口。尤其是 UDP 通信,不能用一次网页访问成功推断全部联机流量已经代理。也不要把电脑地址填入默认网关,除非电脑已经另行配置 IP 转发、路由与透明代理。

按层验证:端口、代理请求与规则出站

先确认连接能到达监听端口,再检查目标网站和规则。以下命令应在另一台局域网电脑上执行;在代理电脑本机测试,只能验证本机路径,不能充分验证防火墙和无线隔离。

# Windows PowerShell:检查远端 TCP 端口
Test-NetConnection 192.168.1.20 -Port 7890

# Windows 使用 curl.exe;macOS 或 Linux 可使用 curl
curl.exe -I --connect-timeout 5 --max-time 15 \
  --proxy http://192.168.1.20:7890 https://example.com/

上面的反斜杠续行适用于常见 Unix shell。Windows 中可将 curl 命令写成下面这一整行,避免 PowerShell 续行语法差异:

curl.exe -I --connect-timeout 5 --max-time 15 --proxy http://192.168.1.20:7890 https://example.com/

https://example.com/ 是连通性测试目标,不是专门验证代理出口的服务。看到 200 Connection established 只说明 HTTP CONNECT 隧道建立,还应检查后续 TLS 连接和目标响应。再到客户端的连接列表查看来源 IP、命中规则及出站链,确认这条请求是 DIRECT 还是经过某个代理策略。

现象优先检查下一步
连接被拒绝内核未运行、端口填错、仅监听回环地址,或防火墙主动拒绝核对最终配置和 TCP 监听结果。
连接超时防火墙丢弃、访客网络隔离、电脑地址变化核对双方网段及入站规则。
返回 HTTP 407运行配置要求代理认证检查认证配置与设备支持情况,不要反复修改节点。
端口连通,网站失败规则、节点、目标域名解析或上游连接查看该请求的日志和实际出站。
浏览器正常,游戏失败应用绕过代理,或使用未覆盖的 UDP 通信核实协议与设备代理能力。

如需验证 SOCKS5,可使用 curl --proxy socks5h://192.168.1.20:7890 https://example.com/。其中 socks5h 会将域名交给代理端处理,而 socks5 通常由 curl 本地解析。两者可能出现不同结果,但这一差异本身不代表混合端口异常。

规则、DNS、TUN 与日常维护

共享设备仍然使用电脑端的规则

在 mode: rule 下,进入混合端口的请求按 rules 顺序匹配,并使用电脑端策略组当前选择的出站。开启局域网共享不会自动建立一套独立的手机规则,也不会强制所有网站经过远程节点。需要核查出口时,应查看对应请求的匹配结果,而不只是查看电脑客户端是否显示“已连接”。

代理入口不等于 DNS 服务入口

手机填写 HTTP 代理后,不需要再把 DNS 地址机械地改成电脑 IP。mixed-port 不是 DNS 监听端口;内置 DNS 是否启用、监听哪个地址,由 dns.enable 与 dns.listen 等配置控制。是否向局域网提供 DNS 服务,是独立的部署决定,也需要单独考虑 UDP/TCP 端口与防火墙。

HTTPS 请求通过 HTTP CONNECT 传递域名时,代理端通常会参与后续解析,但应用也可能自行查询 DNS、使用直连连接或采用其他网络栈。因此,手动 HTTP 代理不能作为“所有 DNS 都已经进入内核”的证明。

TUN 不是共享端口的必要开关

TUN 用于接管进入虚拟网卡的流量,常用于本机透明代理。仅让手机访问电脑的 7890 端口,不要求额外开启 TUN。即使电脑已经开启 TUN,也不会自动接管同一 Wi-Fi 下所有设备的流量;那些设备的路由仍需把流量送到对应网关。

保持地址稳定,并保留恢复步骤

  • 在路由器中为电脑设置 DHCP 地址保留,减少手机代理地址因重启而失效的情况。
  • 订阅更新后复查持久覆写是否仍生效,重点查看 allow-lan、监听地址与端口。
  • 长期使用时检查客户端支持的 authentication 认证设置;电视等设备可能不支持认证,需先核实兼容性。
  • 不再共享时,将设备上的 Wi-Fi 代理恢复为“关闭”或“无”,再将电脑的 allow-lan 设为 false 并重新加载。
  • 删除不再需要的防火墙入站规则,避免以后其他进程占用相同端口时仍可被局域网访问。

完成共享的判断标准是:远端设备能连接指定端口,实际请求出现在内核连接列表中,命中预期规则,且设备所需的应用确实支持该代理方式。将这四项分开核对,比同时修改 DNS、TUN、网关和节点更容易定位问题。