Tags:,,, Posted in Technology 14次吐槽

你有一个代理服务器(或者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.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               /               .”

 

# 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.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的连接。

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

 

 

分流:

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

 

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

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

 

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

 

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

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

 

4混合使用两种策略:客户端分流+服务器分流

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

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

配置服务器分流策略:

打开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.1:8080的Socks5,即凡是定义为“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——广告过滤和自动代理切换

**如何配置分流列表,将在下一章介绍。
***如何在外网使用这个工具,将在下一章介绍。
示范配置和分流表:
readme
这样就可以使用任意的代理分享给局域网中的其他用户使用了。

 

 

2014年11月12日