squid-透明代理
透明(transparent)代理:
先把上面做的正向代理的客户端配置部分去掉(firefox和IE的配置)
第一步:
在squid服务器上打开路由转发功能
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 ----因为要使用iptables写NAT表的规则,所以要打开ip_forward
# sysctl -p
第二步:修改配置文件
# vim /etc/squid/squid.conf --在正向代理的配置基础上再加上下面一句的配置
http_port 3128 intercept
# /etc/init.d/squid restart
第三步:配置iptables
client squid 公司路由器
vmnet1 eth0
192.168.1.128 192.168.1.1 172.16.2.9--> 172.16.1.1 公网IP
|
|
|
client网关指向192.168.1.1--
clientDNS指向8.8.8.8 ---------------------------------->外网DNS
# iptables -t nat -A POSTROUTING -p udp --dport 53 -o br0 -j SNAT --to-source 172.16.1.40
# iptables -t nat -A PREROUTING -p tcp --dport 80 -i vmnet1 -j REDIRECT --to-port 3128
# iptables -t nat -A POSTROUTING -p tcp --dport 443 -o br0 -j SNAT --to-source 172.16.1.40
由上面的分析,需要在squid服务器上写上一句snat,让DNS能正常访问外网
# iptables -t nat -A POSTROUTING -p udp --dport 53 -o eth0 -j SNAT --to-source 172.16.2.9
这样的话,内网客户端的DNS OK了,但是http的80端口的访问如果也做一个SNAT的话,如下的规则:
# iptables -t nat -A POSTROUTING -p tcp --dport 80 -o eth0 -j SNAT --to-source 172.16.2.9
那么这就做的是完全的通过iptables来上外网;与squid无关
所以应该换成下面一句规则,把80端口的访问都重定向到3128端口
# iptables -t nat -A PREROUTING -p tcp --dport 80 -i vmnet1 -j REDIRECT --to-port 3128
还有443的端口问题,这里如果也重定向到3128,会出现访问https网站报ssl错误。因为https不能缓存,所以我们这里把443用iptables直接SNAT转发出去(也就是说443与squid无关)
# iptables -t nat -A POSTROUTING -p tcp --dport 443 -o eth0 -j SNAT --to-source 172.16.2.9
第四步:客户端验证
省略
总结:
--上面所做的透明代理其实和上次iptables所讲的几乎一样,唯一不同的就是把80端口的SNAT换成了端口的转换,把它交给3128的squid来上网
--但就上面这样做,并没有看出比使用iptables上网有什么优势
--squid共享上网的优势就在于使用acl访问控制,缓存,资源控制等