如何通过自动配置来设置代理
2018-07-06 本文已影响198人
我是柯南
目前科学上网(番羽土蔷)有以下几种方式,第 1,2 都相对简单,下文介绍第 3 种方法来设置代理。
- VPN 客户端,一般能直接接管系统中的代理设置,启动就直接设置好
- 手动设置代理服务器地址,在代理设置中手动输入代理的IP和端口
- 通过一个 PAC 文件来自动发现代理
建一个代理服务器
比如将 lantern 使用 headless 方式运行在个人私有云服务器上(如何无界面启动 lantern 请参见 https://www.jianshu.com/p/4aaf6354a13b),就创建了一个自己的代理服务器,lantern 运行的配置文件在 ~/.lantern/settings.yaml
,配置文件如下,这样 64000 端口就是代理端口。地址可以通过动态域名绑定。
addr: '[::]:64000'
autoLaunch: true
autoReport: true
lang: ""
localHTTPToken: *********************************
pacURL: ""
proxyAll: false
socksAddr: 127.0.0.1:34805
systemProxy: true
uiAddr: 0.0.0.0:37115
userID: 18904366
userToken: *******************************************
创建一个 proxy.pac 文件
*.pac 文件内容其实就是 javascript 脚本,样例如下图,就是用来确定哪些请求使用代理,哪些不使用代理,手动创建一个 proxy.pac 文件,内容如下,存储到目录 /data/pac
。
function FindProxyForURL(url, host)
{
url = url.toLowerCase();
host = host.toLowerCase();
if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0")
|| isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0")
|| isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0")
|| isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0")
) {
return "DIRECT";
}
if (shExpMatch(url,"*twitter*")
|| shExpMatch(url,"*google*")
|| shExpMatch(url,"*facebook*")
|| shExpMatch(url,"*blogspot*")
|| shExpMatch(url,"*youtube*")
|| shExpMatch(url,"*gstatic*")
|| shExpMatch(url,"*ytimg*")
|| shExpMatch(url,"*ggpht*")
|| shExpMatch(url,"*github*")
) {
return "PROXY yourname.com:64000";
}
return 'DIRECT';
}
将代理文件托管在一个站点上
我们使用 nginx 服务器来反向代理一个静态网站,根路径就是上一步创建的 proxy.pac 文件所在的目录 /data/pac
, 配置文件如下,这样通过外网就可以访问到这个 proxy.pac
文件,访问地址:http://yourname.com:65432/
#####################################################################
## Default
## http://yourname.com:65432
server {
listen 65432;
listen [::]:65432;
server_name yourname.com;
root /data/pac;
index proxy.pac;
}
在浏览器上设置自动代理
以下以 chrome 为例设置,其他浏览器或软件都类似。
setting pac