通过 DHCP 下发 WPAD 为局域网内电脑设置代理
目前实验室内的代理方案是OpenClash,但是他劫持PREROUTING的行为让我感觉很不爽,虽然软路由性能充足,但是使用体验总让人膈应。于是想要找点别的法子。
最近 Proxifier 4 的release引爆了我常见的几个群的群友,纷纷上线作为自己的代理处理措施,也有老哥因为想起来proxifier看了一眼日志,结果发现了个[恶意扩展](https://blog.berd.moe/archives/chrome-spyware-extension-user-agent-switcher/)。而我,因为一位群友发出了域内WPAD自动"智能"尝试的错误日志,想起了还有这么个解决方案,实操感觉良好。
## 准备代理
这个clash肯定还是要跑在路由器上,鉴于现在在用openclash,干脆就不换了。在配置中没有看到相关的选项,估计他也没想到有人这么想开倒车回到pac时代,总之我们修改他的服务脚本`/etc/init.d/openclash`和看门狗脚本`/i/forgot/that/path`,把所有带 `-j openclash`的注释掉,这样就不会劫持PREROUTING链了。
当然,如果你在用fake_ip方案,别忘了把dns劫持选项关掉。
## 准备 PAC
WPAD的代理配置是通过分发一个PAC文件来做的,所以我们需要一个可以通过http被访问得到的PAC文件,这里我直接丢到路由器的`/www`,让uhttpd顺便分发一下。
因为最后负责分流的还是clash,这里的PAC可以直接简单粗暴地这样来:
```javascript
function FindProxyForURL(url, host) {
return "PROXY 10.0.0.1:1380; DIRECT"
}
```
当然如果你想要有个gfwlist先在客户端做个黑名单,也可以去github上随便找个。
## 设置DHCP
luci中跟这个相关的dhcp选项不在dhcp里,在`interface - (select one) - DHCP Server - Advanced setting`有个DHCP-Options,该选项支持我们下发任何dhcp option,如果对于可能的内容感到好奇可以看rfc。
WPAD的options序号是252,这里填入`252,"http://10.0.0.1/pac"`即可。
## 启用
如果对于是否配置成功心存疑虑,可以打开网线大鲨鱼抓个包,DHCP的Offer和ACK包中都应该包含有这一项:

在Windows的系统设置 - 代理中打开自动检测配置即可使用。

比较遗憾的是,安卓不吃WPAD。
## 参考
- https://www.cisco.com/c/en/us/td/docs/security/web_security/connector/connector3000/WPADAP.html
- https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_(PAC)_file
评论
发表评论