你有一个代理服务器(或者VPN),却有同时只能登录一个账号的限制?或者是不同设备之间不兼容,电脑能用手机不能用?以下方案只要有一台可以长期开机的电脑,就可以打造出全家共享的代理连接。
使用场景:
日常在复杂网络环境中使用特定网络资源,免不了要使用各类代理。如在公司需要越过公司防火墙玩游戏,需要特定地址注册某些服务等。而目前大家手头的设备很多,微软电脑、苹果电脑,以及各类手机,而代理软件种类繁杂,平台、协议、服务器、用户账户、分流策略各异,管理起来困难很大。
多种代理策略场景
特别是很多代理服务还要求维持联结状态(如VPN、Ssh)在移动环境下手机锁屏会导致掉线,而保持联结又会增加耗电。更不要说全局代理的分流策略在移动设备上实现,异地登陆,短信报警,不仅麻烦,还增加了风险。
使用HTTP转化任意代理,统一分发:
如果能采取一种方式,将任意类型的代理连接转化为标准化的HTTP代理,从而适配各类设备,同时对各设备而言,HTTP代理又无需维持状态,应该是一种理想的选择。下文描述了一种使用Privoxy系统在Windows环境下建立家庭(内网)代理中心的方式。
技术基础:
您需要掌握Windows的基本操作和局域网的基本操作,理解TCP/Ip协议基础知识,无需编程技术和Linux操作知识。(Linux下更省能耗,由于Linux用户很容易就能实现,我这里不写了)
开发环境和软硬件需求:
可长期开机的计算机一台,Window7 及以上操作系统。
通过家庭或企业局域网上网,拥有路由管理权限,会正确配置路由器的某些功能*。
Privoxy软件(官方下载,英文)
一种可用的代理方式,必须支持断线重连和全局/本地端口代理方式。VPN、ShadowSocks、Goa、门均可,不建议使用Ssh(但可以用Ssh做测试)**
代理过程需要服务器长期开机,代理程序能自动掉线重连。
我准备了两个测试环境,分别是VPN和SS:
设置说明
安装Privoxy
先安装好Privoxy软件,这通常是一个配合Tor的软件,但它还是一个功能强大的代理服务器。目前我们用它的高级功能:代理通道的转发和分流。
安装后,Windows会询问防火墙,务必允许其通过防火墙
配置Windows防火墙
设置好这一步后,仍然不能让其他机器连接到服务器,需要在Windows防火墙中开放端口。打开控制面板-安全设置中的防火墙,
防火墙配置
操作-新建规则-端口
指定端口号(之后用于其他设备连接服务器),协议为TCP。
设为允许联结
设置应用场景(注意如果你不打算把服务器拿出家门可以只允许专用)
设置描述
设置成功后你会看到这个规则已经生效了。
当然,如果你嫌麻烦,可以直接关掉防火墙……反正是在内网……
设置完防火墙后,开始让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.1:8080上的ShadowSocks代理,实现代理上网。 其网络路径为: 手机—–HTTP—-[服务器(192.168.1.100:8964)----Privoxy---Socks5------服务器内部127.0.0.1:8080]——加密数据—–[某防火墙]—–加密数据—-Shadowsocks服务器—–目标网站 测试方法是用同一内网的终端,设置HTTP代理到服务器的该端口,上网访问Ip查询为Shadowsocks服务器地址即可。每种设备设置方法不同,电脑的设置方法是在网络选项-局域网设置中,苹果手机在无线网设置的最下面,Ip地址填写服务器地址,端口填写刚才的端口。安卓手机的设置在无线网高级里。 *如何分流下面说。 **测试环境二:VPN全局代理** 准备好VPN账号(任何类型均可),在电脑上设置好,连上VPN测试通过后断开VPN。 如上面所示,打开Privoxy的config.txt设置文件。 **确保关闭了socks5代理!**两种代理不能同时存在。如果你设置了Socks5代理,请找到它并用#注释掉! 还是搜索到5.2节,在一堆示例(example.com)下添加一行:”**forward / .”**
forward / .
意思是转发所有通信(/)到所有目标(.) 注意这个点不能少,不然就失败了。 保存退出(listen-address 0.0.0.0:8964 一样不能少,如果没设置要设置好) 测试: 此时一样用其他设备连接HTTP代理到服务器,看是否能上网。(上的是服务器正常的网,因为没有启动VPN) 流程为: 手机—–HTTP—-[服务器(192.168.1.100:8964)----Privoxy-- 直接发出]——目标网站 如果手机能通过HTTP代理正常上网,此时打开VPN(注意发送所有流量,即默认配置),手机再上网查Ip,为VPN的Ip即说明手机成功通过HTTP代理分享了服务器的VPN。 流程为: 手机—–HTTP—-[服务器(192.168.1.100:8964)----〈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文件。 首先定义动作代码: 找到以下内容:
+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
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
在这个位置添加上述蓝色代码,其中ssh,gae指代一种或多种代理策略,可以任意命名。我这里就不改动了。(VPN不能使用,只能在客户端分流!) 在这里我定义Ssh是代理到127.0.0.1:8080的Socks5,即凡是定义为“Ssh”的网站,都通过Shadowsocks转发……(名字好像错了,算了……) 在文件末尾添加以下代码:
{default}
/
{direct}
.edu.cn
202.117.255.
222.24.211.
{ssh}
.launchpad.net
.example.com
.nidongde.com
.1024.com
.xxxxx.com
{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) **如何配置分流列表,将在下一章介绍。 ***如何在外网使用这个工具,将在下一章介绍。 示范配置和分流表:
这样就可以使用任意的代理分享给局域网中的其他用户使用了。
```