實用自動代理配置示例
自動代理上網算是個比較常用的需求,比如好多測試工程師使用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科學上網簡要