首先,要介绍一下,什么是透明代理?
        透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改变你的request fields(报文),并会传送真实IP,多用于路由器的NAT转发中。

透明代理的原理是这样的:
1. 假设A为内部网络客户机
2. B为外部网络服务器,B提供的服务为httpd服务,监听端口为80
3. C为代理服务器(也是我们的网关),假如代理服务器提供服务端口为3128

过程: 当A向B的80端口请求数据时,TCP连接请求要先经过C,C看到A请求的是B的80端口时,C由于已经设置了转发规则,所以C会把A的请求80端口转发到自己的3128端口,也就是说A将要直接访问C的3128端口,而非B服务器的80端口,此时,C会先去访问B的80端口,把A要访问B的请求数据先请求过来,保存到C上,然后C再把请求数据吐给A。而在A看来,它貌似是直接请求的B,而实际并非如此。由于这些连接过程是自动的,不需要客户端手工配置代理服务器,甚至用户根本不知道代理服务器的存在,因而对用户来说是透明的。

下面来配置透明代理:

通过上面的原理分析,可知,只有您的代理服务器为网关时,才可以实现透明代理的功能,否则无效。实际应用中,透明代理服务器应该有至少两个网卡,第一个网卡连接到外网,或者它可以直接上网,第二个网卡连接的是内部的一个局域网段,也就是想使用代理上网的网段。

假设,透明代理服务器的网卡eth0设置IP为 10.2.1.100(可以上网的ip), 网卡eth1的ip设置为192.168.19.1,那么要通过透明代理上网的局域网段应该为 192.168.19.0/24,并且在该局域网的客户机应该设置的网关地址为192.168.19.1.

1. 安装squid 
yum  install -y squid

当然你也可以源码编译安装,编译参数可以参考:

./configure --prefix=/usr/local/squid \

--disable-dependency-tracking \

--enable-dlmalloc \

--enable-gnuregex \

--disable-carp \

--enable-async-io=240 \

--with-pthreads \

--enable-storeio=ufs,aufs,diskd,null \

--disable-wccp \

--disable-wccpv2 \

--enable-kill-parent-hack \

--enable-cachemgr-hostname=localhost \

--enable-default-err-language=Simplify_Chinese \

--with-build-environment=POSIX_V6_ILP32_OFFBIG \

--with-maxfd=65535 \

--with-aio \

--disable-poll \

--enable-epoll \

--enable-linux-netfilter \

--enable-large-cache-files \

--disable-ident-lookups \

--enable-default-hostsfile=/etc/hosts \

--with-dl \

--with-large-files \

--enable-removal-policies=heap,lru \

--enable-delay-pools \

--enable-snmp \

--disable-internal-dns


2. 配置squid.conf
如何配置在这里就不赘述了


3.  创建缓存目录,并修改权限
mkdir /data/cahce; chown -R squid:squid  /data/cache

4. 初始化缓存目录
squid -z

5. 启动squid 
service squid start

6. 打开端口转发
echo "1" > /proc/sys/net/ipv4/ip_forward

7. 设置防火墙规则
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp -s 192.168.19.0/24 --dport 80 -j REDIRECT --to-ports 3128