创建一个加密的squid代理通道

众所周知,在大陆不能自由的访问互联网,为此人们想出了各种办法,真是八仙过海各显神通,然而,很多办法是既绕圈子,又没有普遍应用的意义,使用ssh tunnel实际上效率是很低的,因为ssh不是为了这个目的而开发,今天我们要介绍的是具有普遍的意义的代理服务器squid和stunnel。

其实这二者组合并不新鲜,也并不罕见,下面说说这个组合的 应用条件:

1,一台运行在自由世界的服务器,或者虚拟机。
2,这台服务器上安装了squid。
3,当然,你必须要可以从中国大陆连接它。

首先我们来配置安装好的squid,很多旧的案例使用stunnel加密squid端口,然后在客户机上使用stunnel解密,这是多走了一个弯路,squid自身已经支持加密的代理方法,在服务器上,我们根本就不需要运行stunnel,例如我们要将这个加密的代理运行在服务器IP地址为216.218.186.2的443端口,具体配置参数如下:

https_port 216.218.186.2:443    cert=/etc/squid/hnair.com.crt key=/etc/squid/hnair.com.key

其中,hnair.com.crt和hnair.com.key是使用openssl生成用于加密的数字证书和密钥,关于自行生成数字证书的方法,可参考如下:

openssl req -new > hnair.com.csr

openssl rsa -in privkey.pem -out hnair.com.key

openssl x509 -in hnair.com.csr -out hnair.com.crt -req -signkey hnair.com.key -days 3650

然后启动squid即可。

接下来,我们需要对客户端进行配置,不管你是Windows还是Linux,都可以到这里下载:ftp://ftp.stunnel.org/stunnel/

将相应的stunnel压缩包解压缩或者安装,添加一个配置文件(stunnel.conf)至程序的目录:

client = yes
[ssl2http]
accept = 127.0.0.1:8080
connect = 216.218.186.2:443

注意,有些Linux发行版中,例如Ubuntu,在进行apt-get安装stunnel的时候,stunnel v3和v4都会安装上去,此时应该使用stunnel4来运行,直接运行 /usr/bin/stunnel4 即可,在Windows中不存在这个问题。

然后,我们将浏览器的代理服务器设置为本机的8080端口,也就是127.0.0.1:8080,即可使用一个加密的通道,自由的访问互联网了,实际上,这个方法被广泛应用在XX功的网站上,只不过他们用的是Apache做反向代理,因为上面还有他们的网站,虽然总是胡说八道来着,由于我们不需要在上面运行网站,所以squid代理服务器是最佳选择。

我很好奇为什么那么多人在卖ssh代理,却没有人卖加密的squid,在squid上添加用户身份验证,即可达到类似的效果,究其原因,其实还是有两个:

第一,ssh代理可以实现socks请求转发,有些应用可能需要。

第二,ssh代理本身效率不高,可以防止用户滥用,流量超荷,而加密的squid如果没有流量限制,那显然是一场悲剧。

FreeBSD下配置ADSL共享上网

利用FreeBSD用户级的PPP做FreeBSD下的ADSL共享上网,可以使用较低的设备配置,实现局域网的稳定的网络链路共享。同时还可以增加Squid做上网的代理,进一步增加局域网上网的速度。

FreeBSD可以对PPP提供两种不同方式的支持,一种是内核级PPP,它将PPP协议代码编译进内核,并运行一个PPP守护进程pppd,提供对PPP的支持,这是比较传统的方法,但配置比较困难。另一种为用户级PPP,使用一个应用程序PPP,通过通用tunnel设备传递PPP数据,配置较为容易。一般情况下可以使用用户级的PPP来建立拨号方式的Internet连接。

准备

安装基本的FreeBSD环境。然后确认在/etc/ppp目录中是否存在ppp.conf 或者ppp.conf.sample文件。

安装设置

要让整个局域网上的用户都可以访问 Internet ,您的机器必须有两张网卡,一张连接ADSL设备,一张连接局域网的HUB或者交换机。此外,重新编译一次内核是必须的,因为我们需要在内核中加入对IP转发的支持,客户机将IP数据包发到FreeBSD,然后FreeBSD作为网关,将这些数据包转发到指定的地址,这就是整个局域网上网的基本原理。

实例

视ADSL Modem只是一个拨号器,它不带任何附加功能(如路由)。使用FreeBSD自带的ppp来达到PPPoE拨号功能,实现最基本的目的:供内部网络中所有客户机通过FreeBSD网关用nat方式(透明网关)连接到Internet,这种方式最大的好处是内部网络的客户机不需特殊配置就能连接到外部网络。

一、服务器IP设定:

第一块网卡
IP:192.168.1.1
子网掩码:255.255.255.0
网关:NONE

第二块网卡
IP:192.168.2.1
子网掩码:255.255.255.0
网关:NONE

二、设置一个使用PPPoE的ppp呼出

将/etc/ppp/ppp.conf进行备份,以下是修改后的ppp.conf内容(除标签名为,以下每行前面都必须空一格):

default:
set device PPPoE:eth0 #eth01为连接ADSL Modem的网卡名称,应替换成你使用的设备名
enable dns #自动获取DNS
adsl: #标签名,可任意命名
set mru 1492
set mtu 1492
set authname myadslusername #ADSL用户名
set authkey myadslpassword #ADSL密码
set dial
set login
add default HISADDR

以上只有三处需要进行修改,即连接ADSL Modem的网卡名称、上网用户名上密码。如果你不知道自己的网卡名称,可以通过ifconfig -a命令得到。

三、设置启动时自动连接

将下面这些行加到/etc/rc.conf文件中:

getway_enable=”YES”

ppp_enable=”YES”
ppp_mode=”ddial” #断线重拨
ppp_profile=”adsl” #这里的adsl对应的是/etc/ppp/ppp.conf中的标签名
ppp_nat=”YES”

如果你想手动连接,则可以通过以下命令实现:

ppp -nat -ddial adsl

这样,FreeBSD网关服务器端已经设置完成,设置客户端的网关为192.168.1.1即可上网,如果需要自动分配IP地址,可另行安装dhcpd,如果需要进行网络的加速,可另行安装squid。

单点故障的可能

上次说到使用Memcached来存储session,这样就可以不用Tomcat的session同步机制(因为Y这么多年居然一点没变化过),直接做http的负载均衡,前端不管用硬件还是软件实现,系统结构都会显得更为简单,但是一直觉得,依然存在单点故障的可能,想想还是画个图比较清晰,画了几遍,如果除去Cache Cluster,那么木有单点故障的最小结构至少需要服务器十台,当然,我画的是理想化状态,Memcached的logo真TM恐怖……这样的结构,应该不会再有单点故障的可能,而且扩展起来也是很方便的,堆服务器就是了。

配好了Tomcat和Apache

得来全不费功夫啊,Apache2.1里面专门提供了给Tomcat的ajp接口,三行配置就搞定了Apche对Tomcat的代理,而且可以通过 proxy pass进行负载均衡,完美啊,而且实现http请求的负载均衡,也是很简单的事情,2.1里面更加入了多种cache的支持,包括磁盘缓存,内存缓存, 我在想,2.1一旦出了正式版,squid还有用武之地么?

Reffer:http://tomcat.apache.org/connectors-doc/proxy.html
——————————–
The AJP proxy is a new module based on the standard Http proxy it uses AJP instead of HTTP.
<Location />
ProxyPass ajp://localhost:8009/
</Location>

下面需要配置的就是最困难的oracle了,我还得再去读几遍国外各个网站上的资料了来……中文资料不可信,东抄抄西抄抄,结果TMD全部是错的。