天天看點

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

繼續閱讀