使用privoxy建立代理中心,共享任意代理资源

你有一个代理服务器(或者VPN),却有同时只能登录一个账号的限制?或者是不同设备之间不兼容,电脑能用手机不能用?以下方案只要有一台可以长期开机的电脑,就可以打造出全家共享的代理连接。

使用场景:

日常在复杂网络环境中使用特定网络资源,免不了要使用各类代理。如在公司需要越过公司防火墙玩游戏,需要特定地址注册某些服务等。而目前大家手头的设备很多,微软电脑、苹果电脑,以及各类手机,而代理软件种类繁杂,平台、协议、服务器、用户账户、分流策略各异,管理起来困难很大。

3

多种代理策略场景

特别是很多代理服务还要求维持联结状态(如VPN、Ssh)在移动环境下手机锁屏会导致掉线,而保持联结又会增加耗电。更不要说全局代理的分流策略在移动设备上实现,异地登陆,短信报警,不仅麻烦,还增加了风险

未命名

使用HTTP转化任意代理,统一分发:

如果能采取一种方式,将任意类型的代理连接转化为标准化的HTTP代理,从而适配各类设备,同时对各设备而言,HTTP代理又无需维持状态,应该是一种理想的选择。下文描述了一种使用Privoxy系统在Windows环境下建立家庭(内网)代理中心的方式。

技术基础:

您需要掌握Windows的基本操作和局域网的基本操作,理解TCP/Ip协议基础知识,无需编程技术和Linux操作知识。(Linux下更省能耗,由于Linux用户很容易就能实现,我这里不写了)

开发环境和软硬件需求:

可长期开机的计算机一台,Window7 及以上操作系统。

通过家庭或企业局域网上网,拥有路由管理权限,会正确配置路由器的某些功能*。

Privoxy软件(官方下载,英文

一种可用的代理方式,必须支持断线重连和全局/本地端口代理方式。VPN、ShadowSocks、Goa、门均可,不建议使用Ssh(但可以用Ssh做测试)**

代理过程需要服务器长期开机,代理程序能自动掉线重连。

我准备了两个测试环境,分别是VPN和SS:

Untitled

设置说明

安装Privoxy

先安装好Privoxy软件,这通常是一个配合Tor的软件,但它还是一个功能强大的代理服务器。目前我们用它的高级功能:代理通道的转发和分流。

安装后,Windows会询问防火墙,务必允许其通过防火墙

配置Windows防火墙

设置好这一步后,仍然不能让其他机器连接到服务器,需要在Windows防火墙中开放端口。打开控制面板-安全设置中的防火墙,

F

防火墙配置

FW-port

操作-新建规则-端口

9864

指定端口号(之后用于其他设备连接服务器),协议为TCP。

accept

设为允许联结

dm

设置应用场景(注意如果你不打算把服务器拿出家门可以只允许专用)

dis

设置描述

list

设置成功后你会看到这个规则已经生效了。

当然,如果你嫌麻烦,可以直接关掉防火墙……反正是在内网……

设置完防火墙后,开始让Privoxy连接代理软件工作。

固定服务器Ip地址:

还有个问题,为了防止服务器关机后Ip地址变化,有必要在网关中设置固定地址。方法请参阅您家用路由器设备指南。

通常通过管理员进入路由器后,选择DHCP服务,选择静态地址分配,将服务器的Mac地址输入,并配置一个固定的地址,如192.168.1.100。

服务器断网后重连,将自动获得该地址,以后无论重启多少次,都会获得该地址。该地址即可作为配置写入其他客户端。

还可以在服务器的网卡强制指定固定Ip地址。

测试环境一:Shadowsocks(或各类其他代理软件,提供到127.0.0.1:8080的通道)

打开Shadowsocks代理软件,按提供商要求填写好资料,测试连接成功后,记住软件提供的本地端口Socks5  127.0.0.1:Xxxx,并设置自动连接。

按照提供商的说明,一般是要用浏览器插件联结这个本地端口,我们这里不要安装此类浏览器插件和其他代理软件。

假设本地端口为Socks5 方式,在本地地址的 127.0.0.1:8080  (最新版的SS为HTTP代理,最后介绍)

打开Privoxy(在右下角的图标),打开后是一片空白,此时点击菜单Options的“Edit Main Configuration” (或者直接打开Privoxy安装目录下的config.txt,或者直接在文章末尾下载我的改)

搜索“forward-socks4a” 或“5.2”,跳转至1300行左右,找到以下参数:

# Examples:
#
# From the company example.com, direct connections are made to
# all “internal” domains, but everything outbound goes through
# their ISP’s proxy by way of example.com’s corporate SOCKS 4A
# gateway to the Internet.
#
# forward-socks4a / socks-gw.example.com:1080 www-cache.isp.example.net:8080
# forward .example.com .
#forward / .
# A rule that uses a SOCKS 4 gateway for all destinations but no
# HTTP parent looks like this:
#
# forward-socks4 / socks-gw.example.com:1080 .
#
# To chain Privoxy and Tor, both running on the same system, you
# would use something like:
#
# forward-socks5 / 127.0.0.1:8080 .

把“# forward-socks5 / 127.0.0.1:8080 .”前面的注释# 擦掉,后面地址中127.0.0.1:8080 改为你Shadowsocks(或其他代理软件)提供的实际Socks5代理端口。

# forward-socks4 / socks-gw.example.com:1080 .
#
# To chain Privoxy and Tor, both running on the same system, you
# would use something like:
#
forward-socks5 / 127.0.0.1:8080 .  #你代理软件提供的实际端口,必须是Socks5

#前面的注释符号去掉

搜索“listen-address”或在750行附近找到以下内容:

# listen-address 192.168.0.1:8118
#
# Suppose you are running Privoxy on an IPv6-capable machine and
# you want it to listen on the IPv6 address of the loopback
# device:
#
# listen-address [::1]:8118
#
#

加一行(如果有已经设置的监听127.0.0.1:port的请删除):

# listen-address 192.168.0.1:8118
#
# Suppose you are running Privoxy on an IPv6-capable machine and
# you want it to listen on the IPv6 address of the loopback
# device:
#
# listen-address [::1]:8118
#
listen-address 0.0.0.0:8964        #地址必须为0.0.0.0,端口号为刚才防火墙里设置的端口

``` 

保存退出。


此时,你已经可以通过同一内网的其他终端,经由这台服务器的8964号端口传入HTTP代理,并由这台服务器转发到127.0.0.18080上的ShadowSocks代理,实现代理上网。

其网络路径为:

手机—–HTTP-[服务器(192.168.1.1008964----Privoxy---Socks5------服务器内部127.0.0.18080]——加密数据—–[某防火墙]—–加密数据—-Shadowsocks服务器—–目标网站

测试方法是用同一内网的终端,设置HTTP代理到服务器的该端口,上网访问Ip查询为Shadowsocks服务器地址即可。每种设备设置方法不同,电脑的设置方法是在网络选项-局域网设置中,苹果手机在无线网设置的最下面,Ip地址填写服务器地址,端口填写刚才的端口。安卓手机的设置在无线网高级里。

*如何分流下面说。
 
**测试环境二:VPN全局代理**

准备好VPN账号(任何类型均可),在电脑上设置好,连上VPN测试通过后断开VPN

如上面所示,打开Privoxyconfig.txt设置文件。

**确保关闭了socks5代理!**两种代理不能同时存在。如果你设置了Socks5代理,请找到它并用#注释掉!

还是搜索到5.2节,在一堆示例(example.com)下添加一行:”**forward               /               .**

Examples:

From the company example.com, direct connections are made to

all “internal” domains, but everything outbound goes through

their ISP’s proxy by way of example.com’s corporate SOCKS 4A

gateway to the Internet.

forward-socks4a / socks-gw.example.com:1080 www-cache.isp.example.net:8080

forward .example.com .

forward / .

A rule that uses a SOCKS 4 gateway for all destinations but no

HTTP parent looks like this:

forward-socks4 / socks-gw.example.com:1080 .

To chain Privoxy and Tor, both running on the same system, you

would use something like:

forward-socks5 / 127.0.0.1:8080 .

意思是转发所有通信(/)到所有目标(.)  注意这个点不能少,不然就失败了。

保存退出(listen-address 0.0.0.0:8964 一样不能少,如果没设置要设置好)

测试:

此时一样用其他设备连接HTTP代理到服务器,看是否能上网。(上的是服务器正常的网,因为没有启动VPN

流程为:

手机—–HTTP-[服务器(192.168.1.1008964----Privoxy-- 直接发出]——目标网站

如果手机能通过HTTP代理正常上网,此时打开VPN(注意发送所有流量,即默认配置),手机再上网查Ip,为VPN的Ip即说明手机成功通过HTTP代理分享了服务器的VPN。

流程为:

手机—–HTTP—-[服务器(192.168.1.1008964----VPN   Privoxy-- 直接发出-----] —ESP—-[防火墙]———VPN〉——目标网站

三、**Shadowsock2.0的HTTP代理端口?**

如果你使用Ss2.0的HTTP代理,可以直接把Ss2.0的HTTP端口绑定在0.0.0.0:8964,无需使用Privoxy即可通过内网共享服务器上Ss2.0的连接。

但这样你将不能使用服务器的分流能力,必须在终端自己设置分流,否则全部流量将通过代理转发。


**分流:**

设置好了共享代理,同一内网中的其他终端将可以通过指定主机的代理软件上网,但无法实现流量的分离。由于众所周知的原因,<del>某些公司的防火墙</del>使用代理后,访问<del>公司内部的网站</del>会变得很慢……

分流的思路通常有两种,一种是在客户端设置分流表,这是通常的做法。一般来说,电脑比较适合使用这种方式,因为电脑可以在本地保存Pac文件,而且电脑的流量通常很大,所有通信都经过服务器的话,服务器有压力。

如何配置一个Pac?我们可以在网上下载到已有的Pac,保存在电脑上,在Pac中设置代理方式为HTTP,代理地址为内网服务器地址:端口。

配置Pac的方法可以查询网络,或是我在下一章介绍。

第二种思路就是将所有的流量都通过内网服务器,服务器上的Privoxy负责分流,将指定地址分流至代理,其他直接放到公网上。这样可以免除客户端的任何配置,也支持那些不能使用Pac的设备(如安卓)。

缺点是服务器负载较大,且在VPN模式下不能使用。

[![4](https://velaciela.ms/wp-content/uploads/2014/11/4.png)](https://velaciela.ms/wp-content/uploads/2014/11/4.png)混合使用两种策略:客户端分流+服务器分流

在实际中,两种分流策略可以混合使用,对于负载重的设备(电脑)优先在客户端先分流,负载轻或不支持的设备,在内网服务器上分流。

**同时使用两个分流表,必须完全相同,不然将无法代理。

**配置服务器分流策略:**

打开Provixy,选择Options的edit user actions 或者直接编辑 user.action文件。

首先定义动作代码:

找到以下内容:

Aliases must be defined before they are used.

These aliases just save typing later:

+crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies allow-all-cookies = -crunch-all-cookies -session-cookies-only -filter{content-cookies} allow-popups = -filter{all-popups} -filter{unsolicited-popups} +block-as-image = +block{Blocked image request.} +handle-as-image -block-as-image = -block

这里是科学上网设置,定义SSH=往本地8080转发SOCKS5

direct = +forward-override{forward .} ssh = +forward-override{forward-socks5 127.0.0.1:8080 .} gae = +forward-override{forward 127.0.0.1:8000} default = direct

These aliases define combinations of actions

that are useful for certain types of sites:

在这个位置添加上述蓝色代码,其中ssh,gae指代一种或多种代理策略,可以任意命名。我这里就不改动了。(VPN不能使用,只能在客户端分流!)

在这里我定义Ssh是代理到127.0.0.18080Socks5,即凡是定义为“Ssh”的网站,都通过Shadowsocks转发……(名字好像错了,算了……)

在文件末尾添加以下代码:

==========默认代理(不走代理)==========

{default} /

==========直接连接(无论如何都直接连接的)==========

{direct} .edu.cn 202.117.255. 222.24.211.

==========SSH代理==========

{ssh} .launchpad.net .example.com .nidongde.com .1024.com .xxxxx.com

==========GAE代理==========

{gae}

蓝色部分为需要分流到127.0.0.1:8080上的网站,需遵循.domain.com的规范,不要www和其他的东西。找到一份这样的列表,并用查找和替换处理成这个格式应该不难。可以加几千个哦

保存退出后,手机再通过192.168.1.100:8964的HTTP代理上网时,只有在这个列表的网站才会通过127.0.0.1:8080的通道上网,其他流量将通过服务器的默认网关上网。

本文参考了:

[privoxy——广告过滤和自动代理切换](http://www.lainme.com/doku.php/blog/2011/04/privoxy_%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4%E5%92%8C%E8%87%AA%E5%8A%A8%E4%BB%A3%E7%90%86%E5%88%87%E6%8D%A2)

[ ](http://www.lainme.com/doku.php/blog/2011/04/privoxy_%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4%E5%92%8C%E8%87%AA%E5%8A%A8%E4%BB%A3%E7%90%86%E5%88%87%E6%8D%A2)

**如何配置分流列表,将在下一章介绍。

***如何在外网使用这个工具,将在下一章介绍。

示范配置和分流表:

readme

这样就可以使用任意的代理分享给局域网中的其他用户使用了。 ```