实用自动代理配置示例
自动代理上网算是个比较常用的需求,比如好多测试工程师使用charles抓包是就需要配置代理。常见的浏览器插件Proxy SwitchyOmega等其实也是方便你设置代理的。
本文主要讲代理自动配置,昨天配置后,的确很方便实用,可能对读者有用,分享出来。
先看维基百科解释,摘取核心部分。
代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。
一个PAC文件包含一个JavaScript的函数“FindProxyForURL(url, host)”,这个函数返回一个包含一个或多个访问规则的字符串。用户代理根据这些规则使用一个特定的代理器或者直接访问,这些规则也有优先级。当使用高优先级的规则无法访问的时候,低优先级的访问规则(如果存在)就提供了备用的访问方式。浏览器在访问网页以前,会首先访问这个PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通过网页的网络代理自动发现协议自动配置的。
话不多说,直接上pac代码:
1mephisto@RMBP ~/gfw> cat proxy.pac
2function FindProxyForURL(url, host) {
3
4 var _http = 'PROXY 192.168.18.193:1081';
5
6 if (shExpMatch(host, '*.v2ex.com')) { return _http; }
7 if (shExpMatch(host, '*.google.com')) { return _http; }
8 if (shExpMatch(host, '*.gmail.com')) { return _http; }
9 if (shExpMatch(host, '*.google.co.jp')) { return _http; }
10 if (shExpMatch(host, '*..googleusercontent.com')) { return _http; }
11 if (shExpMatch(host, '*.googleusercontent.com')) { return _http; }
12 if (shExpMatch(host, '*.googleapis.com')) { return _http; }
13 if (shExpMatch(host, '*.github.com')) { return _http; }
14 if (shExpMatch(host, '*.githubassets.com')) { return _http; }
15 if (shExpMatch(host, '*.githubusercontent.com')) { return _http; }
16 if (shExpMatch(host, '*.youtube.com')) { return _http; }
17 if (shExpMatch(host, '*.inkscape.org')) { return _http; }
18 if (shExpMatch(host, '*.bootstrapcdn.com')) { return _http; }
19 if (shExpMatch(host, '*.reddit.com')) { return _http; }
20 if (shExpMatch(host, '*.openvpn.net')) { return _http; }
21 if (shExpMatch(host, '*.wikipedia.org')) { return _http; }
22 if (shExpMatch(host, '*.wikimedia.org')) { return _http; }
23 if (shExpMatch(host, '*.medium.com')) { return _http; }
24 if (shExpMatch(host, '*.web.dev')) { return _http; }
25 if (shExpMatch(host, '*.openai.com')) { return _http; }
26 if (shExpMatch(host, '*.googleadservices.com')) { return _http; }
27 if (shExpMatch(host, '*.gstaic.com')) { return _http; }
28 if (shExpMatch(host, '*.ycombinator.com')) { return _http; }
29 if (shExpMatch(host, '*.ytimg.com')) { return _http; }
30 if (shExpMatch(host, '*.ggpht.com')) { return _http; }
31 if (shExpMatch(host, '*.googlevideo.com')) { return _http; }
32 if (shExpMatch(host, '*.x.com')) { return _http; }
33 if (shExpMatch(host, '*.twitter.com')) { return _http; }
34 if (shExpMatch(host, '*.twimg.com')) { return _http; }
35 if (shExpMatch(host, '*.hysteria.network')) { return _http; }
36 if (shExpMatch(host, '*.facebook.com')) { return _http; }
37 if (shExpMatch(host, '*.instagram.com')) { return _http; }
38
39 return 'DIRECT';
40 }
上面的代码不漂亮,可以说有点丑但是能工作!有洁癖的自己改下,简单解释就是匹配到目标网址,走http代理 192.168.18.193:1081
,其它的不走代理直接访问。
这样的作用是什么,我想你看网址应该都能明白。
都介绍pac文件了,当然要顺带说下怎么搭建本地代理。服务端的代理我以前写过,请在我的个人网站搜索相关文章。
1. 代理服务
1mephisto@RMBP ~/gfw> pwd
2/Users/mephisto/gfw
3mephisto@RMBP ~/gfw> ls
4OmegaProfile_auto_switch.pac config.yaml hysteria-darwin-amd64* proxy.pac
5mephisto@RMBP ~/gfw> cat config.yaml
6server: stock.mephisto.cc:443
7
8auth: your_passwd
9
10bandwidth:
11 up: 20 mbps
12 down: 100 mbps
13
14tls:
15 insecure: true
16
17
18socks5:
19 listen: 127.0.0.1:1080
20
21http:
22 listen: 0.0.0.0:1081
23mephisto@RMBP ~/gfw> ./hysteria-darwin-amd64 -c config.yaml
242024-04-25T17:07:17+08:00 INFO client mode
252024-04-25T17:07:18+08:00 INFO connected to server {"udpEnabled": true, "tx": 2500000, "count": 1}
262024-04-25T17:07:18+08:00 INFO HTTP proxy server listening {"addr": "0.0.0.0:1081"}
272024-04-25T17:07:18+08:00 INFO SOCKS5 server listening {"addr": "127.0.0.1:1080"}
282024-04-25T17:07:21+08:00 INFO update available {"version": "v2.4.1", "url": "https://github.com/apernet/hysteria/releases", "urgent": false}
我是在Mac上面操作的,这样即可本地开启一个 hysteria 客户端代理。走不同协议,一个socks5,一个http的,http的我选择了全网卡监听。方便家里的其它设备连接,socks5的供Mac本身使用。
1mephisto@RMBP ~> ip a
2lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
3 inet 127.0.0.1/8 lo0
4 inet6 ::1/128
5 inet6 fe80::1/64 scopeid 0x1
6en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
7 ether 34:36:3b:c6:68:b6
8 inet6 fe80::1462:852a:9b96:efa2/64 secured scopeid 0x4
9 inet 192.168.18.193/24 brd 192.168.18.255 en0
由于我本机分配的ip是 192.168.18.193
,所以对应的http代理就是 192.168.18.193:1081
。
其实,你也可以找个路由器,或者树莓派跑,分配固定ip,甚至可以自己本地弄个dnsmasq,绑定一个自定义域名使用。当然那样就搞复杂了,本文主要写给非高手看的。
2. 配置自动代理
Mac 本机,我一般是通过浏览器插件 Proxy SwitchyOmega
,配置走socks5代理,这一部分网上有很多教程,这里不再赘述。主要是上网冲浪,满足个人需求。
iPhone 或者 iPad 配置自动代理:
点这个地方进入 wifi 设置,最底下有 http 代理设置的部分
填入pac文件的下载地址。
细心的读者,可能就要问了,这个下载地址怎么来的。别急,看下文。
3. 在本机开启一个静态文件服务器
这里我使用dufs这rust工具提供静态文件下载服务(我个人喜欢这个小工具)。
当然你使用Nginx、Apache、甚至 python3 -m http.sever
,或者其它小工具都行。
1mephisto@RMBP ~/gfw> dufs proxy.pac
2Listening on:
3 http://127.0.0.1:5000/
4 http://192.168.18.193:5000/
5 http://[::1]:5000/
值得一提的是:
虽然现代的大多数客户端无论从HTTP请求返回的MIME类型是什么都能正确处理,但为了完整性和最佳的兼容性,我们应该设置网页服务器将这个文件的MIME类型声明为application/x-ns-proxy-autoconfig或者application/x-javascript-config。(application/x-ns-proxy-autoconfig相对application/x-javascript-config被更多的客户端所支持,因为它是最初被定义在Netscape规范里面的,而后者最近才开始被使用。)
我实际使用的dufs的时候,iPhone 和 iPad不用设置MIME都可以正常使用,其它系统或者硬件我没有测试。
4. 最后
访问链路是这样的。
你的移动设备--》http自动代理 --》本地hysteria客户端 --》 海外hysteria服务端 --》自由世界互联网
这样你的移动设备甚至都不用下载额外软件。当然前提是你使用 Wi-Fi网络,移动网络还是得用小飞机等软件。4G/5G等移动网络是没有办法设置http proxy的。
请相信我,直接使用这种pac的方式,访问google推特什么的,速度真的非常快,毕竟没有中间软件性能损耗。同一个服务端,小飞机等各种菊花转,这个顺畅得很!
后续,我想把客户端跑在我的吃灰树莓上,树莓派插到家里的路由器上,配置固定ip。再整个dnsmasq,配置个内网域名,这样更加方便,不用记各种ip。
当然,Ubuntu/Mac OS/Windows 等都是可以配置全局 http 代理的,个人一般只在手机或者pad上玩,回家都不怎么开电脑,也就浏览器配置下代理,个人够用。
版权申明:
- 未标注来源的内容全部为原创,未经授权请勿转载(因转载后排版往往错乱、内容不可控、无法持续更新等);
- 非营利为目的,演绎本博客任何内容,请以'原文出处'或者'参考链接'等方式给出本站相关网页地址(方便读者)。
相关文章:
- Openvpn示例
- 快速隐藏和呼出终端
- Hysteria科学上网简要
- greetd和regreet使用教程
- 我的工具箱
- Labwc 便捷配置
- 窗口管理器labwc使用记
- Ubuntu源码安装最新版本git
- Linux安装心仪字体
- Xray科学上网简要