天天看点

squid实现正向代理实现上网

【背景】

你可能办公司有一个代理,但是不是很稳定,你就需要一个备用的代理了。squid就是一个不错的选择

参考

<a href="http://www.cnblogs.com/mchina/p/3812190.html" target="_blank">http://www.cnblogs.com/mchina/p/3812190.html</a>

【这种代理上网的优势  比nat上网】

代理通过squid访问外网,squid是中也是一种应用层防火墙,可以filter,也有缓存的功能,能够节省带宽和流量

nat地址转换方式,是网络层的防火墙!

【测试系统环境】

1 vm虚拟机 桥接上网

2 主机关闭windows防火墙

3 虚拟机关闭防火墙

4 由于是桥接的,所有主机和vm是在同一个上网的网段,且必须互相ping通

真实环境机器 192.168.1.4   桥接的虚拟机 192.168.1.8   网关192.168.1.1

<a href="http://s4.51cto.com/wyfs02/M00/7F/CC/wKioL1ctlcCCksnVAAARV6LSSG8110.png" target="_blank"></a>

[Squid 分类]

按照代理类型的不同,可以将Squid 代理分为正向代理和反向代理,正向代理中,根据实现方式的不同,又可以分为普通代理和透明代理。

普通代理:需要客户机在浏览器中指定代理服务器的地址、端口;

透明代理:适用于企业的网关主机(共享接入Internet)中,客户机不需要指定代理服务器地址、端口等信息,代理服务器需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理;http_port 3128 transparent 

反向代理:是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。http_port 3128 vhost

【实现要达到的预期效果】

192.168.1.4---192.168.1.1 --外网

切换到squid代理去上网

192.168.1.4 -- 192.168.1.8(squid) -- 192.168.1.1 --&gt; 外网

【系统安装环境】

[root@squid ~]# cat /etc/issue | head -1

CentOS release 6.5 (Final)

[root@squid ~]# ifconfig | sed -n 's#.*inet addr:\(.*\) B.*#\1#gp'

192.168.1.8 

[root@squid ~]# route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

[root@squid ~]# cat /etc/resolv.conf 

; generated by /sbin/dhclient-script

nameserver 192.168.1.1

[root@squid ~]# ping www.baidu.com

PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.

64 bytes from 61.135.169.125: icmp_seq=1 ttl=54 time=27.2 ms

64 bytes from 61.135.169.125: icmp_seq=2 ttl=54 time=27.6 ms

【软件版本】

使用版本: squid-3.5.15.tar.gz 或者yum 安装 yum install squid

wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.15.tar.gz

此处我使用yum安装的方式

【安装和配置】

yum install squid -y

生成的重要文件和目录

/etc/squid/

/var/log/squid

/etc/httpd/conf.d/squid.conf

/etc/logrotate.d/squid

/etc/rc.d/init.d/squid

/etc/squid

/etc/squid/cachemgr.conf

/etc/squid/squid.conf

【配置文件】

[root@squid ~]# cat /etc/squid/squid.conf

<code>http_port 3128 </code>

<code>cache_mem 64 MB </code>

<code>maximum_object_size 4 MB </code>

<code>cache_dir ufs /var/spool/squid 100 16 256 </code>

<code>access_log /var/log/squid/access.log </code>

<code>acl localnet src 192.168.10.0/24 </code>

<code>http_access allow localnet </code>

<code>http_access deny all </code>

<code>visible_hostname squid</code>

注意:

1 rpm包安装的squid进程默认运行在squid用户下

[root@squid ~]# ps -ef |grep squid

root      4539  2052  0 17:29 pts/0    00:00:00 tail -f /var/log/squid/access.log

root      5001     1  0 18:38 ?        00:00:00 squid -f /etc/squid/squid.conf

squid     5003  5001  0 18:38 ?        00:00:00 (squid) -f /etc/squid/squid.conf

squid     5005  5003  0 18:38 ?        00:00:00 (unlinkd)

root      5448  5427  0 18:45 pts/3    00:00:00 grep squid

[root@squid ~]# id squid

uid=23(squid) gid=23(squid) groups=23(squid)

2 squid用户必须对缓存目录文件有读写权限

[root@squid ~]# ls -ld /var/spool/squid/

drwxr-xr-x. 18 squid squid 4096 May  7 18:38 /var/spool/squid/

3 一旦缓存服务器中断了和外网的连接,即使内网用户访问的数据在squid缓存中有,squid也是不会发送给内网用户的。因为这是一个不完整的http请求过程

解释:

A用户的浏览器提交了请求连接 通过设置的代理,请求到了squid服务器,此时squid一定会把请求的url转到 外网web-serve中去!  无论squid中是否有缓存,如果有缓存提交的请求是询问webserver是否有更新,如果没有缓存则直接去请求整个内容。

【结果】

以上步骤的时候,虽然请求到了squid服务器且有日志,但是客户端  一致请求超时 返回504。

所以这个实验squid还是需要两个网卡,一个内网一个外网

以下的环境方案,可以完美的看到效果:

A(内网用户 网卡设置 vm1 192.168.10.2)   &lt;---&gt; (vm1 eth0 192.168.10.1)squid服务器(vm2 eth1 200.1.1.1)  &lt;---&gt;  (eth0 vm2 200.1.1.2)web-server模拟外网web服务器

【简单介绍一下透明代理】

1 配置修改

http_port 3128 transparent 

2 路由更改 一定要将客户机内网的网关指向squid服务器,客户机无需添加浏览器的代理设置

3 squid上面要对iptables进行修改! 将来源80的端的数据包,在进来路由之前直接将数据包定向到3128 squid进程去处理(并未修改数据包的目标IP 和 目标端口,此处做的是数据包重定向)

 在nat表中新增一条规则

# iptables -t nat -I PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128

本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1771016如需转载请自行联系原作者

cuizhiliang

继续阅读