Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

Linux环境下透明代理完全解决方案

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

摘要:该文讨论了如何在Linux环境下如何通过Ipchains和squid实现透明代理。

硬件环境:3Com RAS1500 IBM Pc Server 320

软件环境:Redhat6.2 Squid 2.3.STABLE4

  本文假设有这样的应用环境,网络中有一台拨号服务器为用户提供拨号接入服务,其IP地址为192.168.2.32,该服务器共有30条线,可供分配的IP地址为192.168.2.1-192.168.2.30。也就是说拨号用户得到的是一个内部IP,范围为1-31,在网络中专门为拨号用户设置一台Linux服务器,该服务器运行有Squid实现的代理服务器,并且配置了IPChains规则。Squid代理为客户的www访问提供了代理缓冲以增加其上网速度,而IPChains的运用却可以实现代理对于客户的透明化,同时对于非www访问提供互联网接入。
网络拓扑结构如下:

应用环境网络拓扑结构

  当然,如果希望使用透明代理加快局域网上网速度的话,原理是一样的,只有允许通过的ip范围不同,在这里我只允许拨号用户的IP地址通过该透明代理。

1.Squid的安装配置

1.1.什么是Squid

  Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
    Squid将数据元缓存在内存中,同时也缓存DNS查询的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP(轻量Internet缓存协议),Squid能够实现层叠的代理阵列,从而最大限度地节约带宽。

  Squid由一个主要的服务程序squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出预先指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。

1.2.Squid的下载安装

  从Squid的官方站点http://www.squid-cache.org下载该软件;

  1) 将该文件拷贝到/usr/local目录。

  2) 解开该文件 tar xvzf squid-2.3.STABLE4-src.tar.gz。

  3) 解开后,在/usr/local生成一个新的目录squid-2.3.STABLE4

  4) 进入squid

       cd squid-2.3.STABLE4

  5) 执行./configure 可以用./confgure --prefix=/directory/you/want指定安装目录。系统缺省安装目录为/usr/local/squid。

     6) 执行 make all

     7) 执行 make install

  8) 安装结束后,squid的可执行文件在安装目录的bin子目录下,配置文件在etc子目录下。

1.3.Squid的配置

  Squid配置文件为:/usr/local/squid/etc/squid.conf。安装成功以后,系统已经有了一个缺省的配置文件,用户仅仅需要修改该配置文件即可。首先我将Squid用在透明代理时的配置文件中必须打开的选项的内容列举如下:

  http_port 8080
  cache_mem  32 MB
  cache_swap_low  90
  cache_swap_high 95
  maximum_object_size 4096 KB
  cache_dir ufs /usr/local/squid/cache 1200 16 256
  cache_access_log /usr/local/squid/logs/access.log
  cache_log /usr/local/squid/logs/cache.log
  dns_nameservers 210.12.114.130
  unlinkd_program /usr/local/squid/bin/unlinkd
  acl all src 0.0.0.0/0.0.0.0
  http_access allow all
  cache_effective_user nobody
  cache_effective_group nobody
  httpd_accel_host virtual
  httpd_accel_port 80
  httpd_accel_with_proxy on
  httpd_accel_uses_host_header on

  * http_port

  说明:定义squid监听HTTP客户连接请求的端口。缺省是3128,如果使用HTTPD加速模式    则为80。你可以指定多个端口,但是所有指定的端口都必须在一条命令行上。

  *cache_mem (bytes)

  说明:该选项用于指定squid可以使用的内存的理想值。这部分内存被用来存储以下对象:

  In-Transit objects (传入的对象)

  Hot Objects (热对象,即用户常访问的对象)

  Negative-Cached objects (消极存储的对象)

  需要注意的是,这并没有指明squid所使用的内存一定不能超过该值,其实,该选项只定义了squid所使用的内存的一个方面,squid还在其他方面使用内存。所以squid实际使用的内存可能超过该值。缺省值为8MB。

  *cache_dir Directory-Name Mbytes Level-1 Level2

  说明:指定squid用来存储对象的交换空间的大小及其目录结构。可以用多个cache_dir命令来定义多个这样的交换空间,并且这些交换空间可以分布不同的磁盘分区。"directory "指明了该交换空间的顶级目录。如果你想用整个磁盘来作为交换空间,那么你可以将该目录作为装载点将整个磁盘mount上去。缺省值为/var/spool/squid。"Mbytes"定义了可用的空间总量。需要注意的是,squid进程必须拥有对该目录的读写权力。"Level-1"是可以在该顶级目录下建立的第一级子目录的数目,缺省值为16。同理,"Level-2"是可以建立的第二级子目录的数目,缺省值为256。为什么要定义这么多子目录呢?这是因为如果子目录太少,则存储在一个子目录下的文件数目将大大增加,这也会导致系统寻找某一个文件的时间大大增加,从而使系统的整体性能急剧降低。所以,为了减少每个目录下的文件数量,我们必须增加所使用的目录的数量。如果仅仅使用一级子目录则顶级目录下的子目录数目太大了,所以我们使用两级子目录结构。

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:如何在Linux下架设Web Mail   下一篇:HA解决方案

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号