如何通过自动配置来设置代理

2018-07-06  本文已影响198人  我是柯南

目前科学上网(番羽土蔷)有以下几种方式,第 1,2 都相对简单,下文介绍第 3 种方法来设置代理。

  1. VPN 客户端,一般能直接接管系统中的代理设置,启动就直接设置好
  2. 手动设置代理服务器地址,在代理设置中手动输入代理的IP和端口
  3. 通过一个 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

测试访问外网

image.png
上一篇下一篇

猜你喜欢

热点阅读