默认情况下,客户端开的那个端口只有本机连得上,别的设备连过来会被直接拒绝。这是个合理的默认值,也是一行就能改掉的默认值。改完之后,同一网段里任何一台能填代理地址的设备都能共用这条线路——安卓电视、游戏机、iPad、另一台什么都没装的笔记本,都算。
这个开关变的是监听地址
选项一般叫「允许局域网连接」或者 Allow LAN,配置里对应 allow-lan: true。关着的时候内核只监听 127.0.0.1,除了本机谁也连不上;打开之后监听地址变成 0.0.0.0,任何网卡上进来的连接都收。主机上要是有好几块网卡——比如插着网线同时又有虚拟机的虚拟网卡——可以用 bind-address 把范围收回到指定的那一个地址,其余网卡照旧关着。
接上去只要三步
- 在主机的客户端里打开允许局域网连接,顺手记下混合端口号,默认多半是 7890。
- 查主机在内网里的地址。要找 192.168. 或者 10. 开头的那个,不是「查我的 IP」网页给你看的那个公网地址。
- 到另一台设备上填手动 HTTP 代理:服务器写主机地址,端口写刚才记的那个。安卓和大部分电视盒子在 Wi-Fi 的高级设置里,iOS 在这个网络详情页的最下面,游戏机在网络设置的手动配置里。
- 有件事值得先知道:很多电视盒子和游戏机只给一个 HTTP 代理的填写栏,翻遍设置也找不到 SOCKS。混合端口两种协议都收,填同一个端口号就行,不用再去找别的。
ipconfig
ip -4 addr show
ifconfig | grep inet
看着都对,就是连不上
十次有九次是防火墙。客户端第一次监听外部地址时,Windows 会弹一个框问你允许在专用网络、公用网络还是两者上通信。这个框经常在没人看清的时候就被点掉了,或者只勾了公用网络而家里的 Wi-Fi 被系统归成专用。结果是主机自己用得好好的,别的设备一台都连不上,客户端界面上还什么异常都看不出来。去防火墙的入站规则里找到客户端或者内核那一条,确认它在你当前所处的网络类型下是允许的。macOS 上对应的位置在系统设置的防火墙那一节;Linux 上要看你用的是 ufw 还是 firewalld。
先验端口,再怀疑设备
curl -x http://127.0.0.1:7890 -I https://www.cloudflare.com
curl -x http://192.168.1.10:7890 -I https://www.cloudflare.com
第一条在主机上跑,第二条在另一台电脑上跑,地址换成你自己的。主机通、别的机器不通,那就是防火墙,或者两台根本不在同一个网段——常见的家用网络里,两边地址的前三段应该是一样的。两条都不通,那是客户端或者节点的事,和局域网共享无关。没有 curl 的设备就用浏览器随便开个页面,图片能出来就是通了。
开之前先想清楚谁能连
- 同网段的设备都能连,代理不认人。想加道门槛就在配置里写
authentication,值是一串「用户名:密码」,之后设备端填代理时会多两栏要填。宿舍、合租、公司这类环境下这不是可选项。 - DHCP 早晚会换地址。主机重启一次,或者租约到期,地址一变,之前配好的设备集体失联。在路由器上给主机做地址保留,或者直接设成静态,省掉后面反复重填。
- 有些设备压根没有代理设置,很多智能家电和老电视就是这样。让整个网段什么都不配就走代理是完全另一回事——网关设备、旁路由、透明代理,难度和影响范围都大得多,不在这篇范围里。
allow-lan 不认人:同网段里任何一台设备都能拿你的代理当免费出口,产生的流量和访问记录都记在你头上。真到了非开不可的场合,bind-address 加 authentication 是底线而不是加分项——更多时候,正确答案是别开。