squid3+polipo use sock5

来源:http://zhou.homelinux.org/wordpress/?p=23

网上无意搜索找到一篇好文章,解决了squid3无法直接使用sock5代理的问题:通过polipo将sock5转换成http,再代理,算是曲线救国。

这里先做个记录,省得以后找不到。以后再编辑。

中国这网络,越来越没法上了。现在你访问国外禁网,就会中断连接10分钟。问题是我也不知道哪个网是禁止的…
现在教大家一招,基本能够永久套上翻墙。理论上你就没有中招的可能,尤其适用于公司使用。
首先是squid,这个是流量分离和缓存的关键部件。你可以用pac替代,但是这只局限于某台具体的机器,并且代理用户支持pac。squid的好处是, 任何http访问都可以分流,而且无须客户端支持。甚至如果你精通squid配置,你可以配置成透明代理(cache拦截),从而避免在每台机器上修改代 理配置。当然,cache拦截是有技术问题的,具体请参考这篇

squid的配置如下:

include /etc/squid3/gfw.conf
acl localnet src 192.168.0.0/16
http_access allow localnet
http_access allow localhost
cache_peer 127.0.0.1 parent 8123 0 no-delay no-query

cache_peer_access 127.0.0.1 allow gfw
always_direct deny gfw
never_direct allow gfw

以上配置是允许192.168.0.0的C类内部子网访问本机,所有gfw规则的域名必须通过8123端口的上层代理,而其他的直接访问。注意以上不是完 整配置,不保证可以独立运行,只保证在debian的标准配置文件的基础上,修改以上内容就可以工作。独立配置你可能还需要加入以下两句。

http_access deny all

http_port 3128

配置中的gfw.conf是gfw这个规则的定义文件,这个文件是由程序生成的,程序如下。注意,你系统上的python版本应当在2.5以上。

#!/usr/bin/python

from __future__ import with_statement

with open(‘gfw’, ‘r’) as fi:

for line in fi: print ‘acl gfw dstdomain .%s’ % line.strip()

以上内容,保存为平文本,赋予执行权限后,直接执行即可。同目录下必须有一个gfw文件,平文本,里面一行保存一个域名。域名不以.开头,可以使用泛域名 (例如google.com匹配www.google.com)。执行后打印出内容,所以你还需要重定向。./gfw2squid > /etc/squid3/gfw.conf。当每次gfw文件升级时,你都需要重新生成,并且迫使squid加载。方法是squid -k reconfigure。

OK,现在你有一台配置了分流的squid,然后你需要一个可以翻墙的代理。由于我的目标是看youtube,所以我采取了一个非常复杂而高性能高可靠的方案。

我配置了一台polipo作为http socks5协议转换。由于squid的特性,不能直接使用socks5,因此还是做了一重转换的。polipo这个代理的性能和稳定性也相当不错,用来 做缓存代理也是可以的。不过我们用了更强大的squid,就没必要用polipo了。因此启用以下几句来减少polipo的性能消耗,同时,将本地 8123端口的http代理服务转向到7777端口的socks5代理。

socksParentProxy = "localhost:7777″

socksProxyType = socks5

chunkHighMark = 819200

objectHighMark = 128

diskCacheRoot = ""

在polipo之后的,是一个负载均衡系统。http是一种无状态协议,对不对?所以同一个session可以分布在不同的服务器上处理。也是同样理由, 我们可以把后端的socks5连接分布到多个socks5服务器上。以下是haproxy.cfg的简单配置,由于提取出时做了部分删节,我不保证一定能 在所有系统上跑通,但是同样的,debian问题应当不大。

global

log 127.0.0.1 local0

log 127.0.0.1 local1 notice

maxconn 4096

user haproxy

group haproxy

daemon

frontend socks5

bind 0.0.0.0:7777

default_backend ssh-balance

backend ssh-balance

balance roundrobin

server ssh1 0.0.0.0:7778 maxconn 20 weight 20

server ssh2 0.0.0.0:7779 maxconn 10 weight 10

srvtimeout 20000

最后是一个核心问题,7778和7779是真实的socks5翻墙代理服务器,具体是什么呢?很简单,多台ssh服务器。当然,如果你用别的方案,只要是提供socks5的,都可以混用。

整个系统运转起来后,一个公司内十多号人的访问可以全部通过这个系统。具体需要多少个ssh,多少性能够用要看翻墙的频率。但是由于做了负载均衡和本地缓 存,所以性能是相当可以的。单人使用的时候可以看youtube,十多人同时使用的时候还能正常的访问google搜索,邮箱服务等。而且不翻墙没有 ssh压力,节约流量,也方便使用。后端的方案可以做其他变化,例如如果你是多台vps,你可以在上面部署polipo,然后用ssh做端口转发,本地用 haproxy做负载均衡。同理,如果你使用别的方案,只要是提供http代理的,也可以省去polipo,用haproxy群集。

至于另一个核心问题,gfwlist的获得,你可以从autoproxy中提取一个,自己处理,过程很是繁琐哦。贝壳已经处理好了一个,做了签名压缩,你可以找我要。

Advertisements

3 thoughts on “squid3+polipo use sock5

  1. 你好,小白一个。自己买了两个VPS按照https://www.fdb713.com/archives/617和你的教程搭建APN。目前卡在squid配置文件这。可否帮忙共享一下处理好的gfwlist?感谢!

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s