砺炼linux代理妖刀 让内网浏览快如闪电
撰稿 五步追魂
一直以来,在计算机操作系统中,我最喜欢FreeBSD和Linux,前者的简约之美,象个婉丽少女端庄而手巧。反观linux强悍的磁盘输出和稳健的网络性能,更让他在所有OS领域里一骑突出,激情而奔放。在膨胀的网络时代,信息量需求猛增的今天,多机共享技术一直是企业和网吧管理人员关注并缜密研究的重要节点.事实上象MONO和ROS等商业软件,均是这些开源系统简单的嵌入应用.下面我们开始,请大家跟着我的笔触,砺炼一台可以缓冲web信息的路由代理,让内网浏览快如闪电.
硬件:
旧电脑一只,电气性能确保稳定即可,内存尽可能大些,可以轻松承受更多的迸发点击,网卡两张,供外网接入和内网输出,最好选取英特尔或是3COM芯片.上天去南京有事,电脑城里发现intel82550服务器版的折机网卡,只要40元/张赛扬733的U,10元钱即可成交,为硬件贬值之迅速,悲!
软件:
CentOS服务器版,这是一个伟大的Linux发行版本,RHEL的直接克隆产品,强大且免费,最新版本5.0
安装:
下载CentOS光盘ISO,光驱启动执行安装,我偏爱硬盘直接安装.其实现在各linux发行版安装起来都不会有太大难度,如没有特别要求,设好/根区和swap交换分区即可搞定,我选择server最小安装,系统服务只点选iptablet和squid.文件复制结束,重启root登录控制台.
首先初始系统环境设置和优化系统,在所有unix或是linux中,所有设备都被看作是一个文件来管理,调整或者改变设备的工作状态,我们只要用文本编辑工具来修改对应它的配置文件即可.vi就是这样的一个优秀的系统内置工具,用惯windows视窗系统工作的同学可能对它的两种工作状态短期内难以适应,我使用vi和vim前,也啃了几天的手册,嘻嘻
定义网络、网卡和DNS 在极短时间里迅速准确的做好这些设置,是一个Linux管理员的最基本的技能
特别声明:本文命令行后面的文字,均为注释,实际中不可写入,切记!
vi /etc/sysconfig/network (定义网络配置文件)
NETWORK=yes 表示网络被启用
HOSTNAME=mxj
服务器主机名;
GATEWAY=61.147.252.1 网络网关IP
FORWARD_IPV4=yes 是否开启IP转发功能;
GAREWAYDEV=eth0 网关的设备名
vi /etc/sysconfig/network-scripts/ifcfg-eth0 (定义外网网卡相关信息)
DEVICE = eth0
这是第一张拟连外网的网卡名称
ONBOOT = yes
随系统启动
BROADCAST = 61.147.252.255
广播地址,根据自己实际数据填写
NETWORK = 61.147.252.0
网络地址,根据自己实际数据填写
NETMASK = 255.255.255.224 所属网络掩码,根据实际数据填写
IPADDR = 61.147.252.8 外网IP,根据自己实际数据填写 :wq
vi /etc/sysconfig/network-scripts/ifcfg-eth1 (定义内网网卡相关信息)
DEVICE = eth1
这是第二张准备连接内部网络的网卡名称
ONBOOT = yes
随系统启动生效
BROADCAST = 192.168.1.255
没说的,255永远是广播地址
NETWORK = 192.168.1.0
所属网络
NETMASK = 255.255.255.0
掩码
IPADDR = 192.168.1.1
内网IP :wq
vi /etc/resolv.conf (定义DNS解析域)
search maxiaojun
解析主机名
nameserver 61.177.7.1
要根据当地电信等ISP提供的信息填写
nameserver 221.228.255.1
同上 :wq
简单的系统优化(可以忽略)
chkconfig cups off 停止CentOS默认的打印服务
vi /etc/modprobe.conf
添加下面2行到文件尾部 停止ipv6
alias net-pf-10 off
alias ipv6 off
:wq保存退出
在Linux系统里,有个特殊的位置,就象windows中的启动位置一样,在这里的命令集合,会在系统启动时自动执行,下面我们在这个位置给系统添加必要的路由表 .这个位置就是/etc/rc.local文件,我们先用echo命令是把相关命令行追加到文件/etc/rc.local的末尾
echo route add -net 61.147.252.0 netmask 255.255.255.0 >> /etc/rc.local 添加静态路由
echo route add -net 192.168.1.0 netmask 255.255.255.0
>> /etc/rc.local 同上
echo route add default gw 61.147.252.1 >> /etc/rc.local
添加默认网关
echo echo 1 > /proc/sys/net/ipv4/ip_forward >> /etc/rc.local 极重要!实践中,/etc/sysconfig/network中指定的FORWARD_IPV4=yes往往不能打开Linux系统内核的IP转发功能!这里直接打开内存中IP转发开关!!!!!
echo /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE >> /etc/rc.local
英语单词masquerade是化妆舞会、伪装之意.这里指定所有来自192.168.1.0/24网络的internet请求,都将被伪装成合法IP 61.147.252.8从而成功的完成内外网信息交换
然后,用命令/sbin/service network restart 让网络设置生效,或是shutdown -r now直接重新启动系统。
重启后,聪明的你会发现,内网的所有机器都能成功访问internet了,好玩好玩
接下来我们整合Squid代理服务器,看她是如何让内网浏览快如闪电的,嘻
Squid是Linux和BSD等系统中应用最广的一种数据缓冲技术,支持多种协议访问。她的工作原理是这样的:
squid首先接受内网机器的数据请求,然后到远程目标主机上获取数据,在返回数据给请求的内网机器的同时,在内存里保留一份。如果此后有相同的链接请求,Squid就会在内存中直接反馈数据,而不用再次访问互联网。此时的内网WEB展开速度在鼠标点下的瞬间即可完成显示。也许你要说,在内存里缓存数据,Squid总有把内存用满的时候,事实上,Squid的相关技术发展经过多个版本了,她已经有着近乎完美的工作机制,当内存空间超过定额的时候,squid会把较老的数据释放到硬盘指定区域上,重新在内存里缓冲新的请求数据,如果释放到硬盘上的数据超过指定体积时,Squid会把较老的部分的无情的丢掉。
实际应用中,squid还有着强大的访问控制能力,本文从略。
我们在开始安装centos时候,已经选择了iptable和squid,所以,我们现在只要去修改她的配置文件即可
出于squid要求和系统安全,先添加一个普通用户
useradd maxiaojun
嘿,我的名字,这里随便,但要和squid中的用户吻合
password maxiaojun
例行密码设置,此处不回显,你该知道吧
下面开始设置squid文件,定义她的工作环境,以适合我们的代理要求,我有点饿了,得找点吃的了。真的
vi /etc/squid/squid.conf
http_port 192.168.1.1:3128
squid监听的端口,如不指定内网IP,Squid也会监听外网请求.
cache_mem 64M
用于缓冲数据的内存,这里可选值为这台服务器内存总数的1/2
cache_dir ufs /spool/squid 8000 16 256
指定磁盘缓存的位置和大小
reference_age 1 month
缓存内容保存的时间,一个月够了吧?哈哈
client_lifetime l day
你准不能一直使用代理吧,给你一天行了不?
maximum_object_size 5M
指定squid可以接收数据的最大尺寸
cache_access_log
/dev/null
关闭访问日志文件
cache_store_log
none
关闭存储交换文件
cache_log /dev/null
关闭高速缓存日志文件
cache_effective_user
maxiaojun
设置合法用户
cache_effective_group
maxiaojun
设置合法用户组
cache_mgr 75905279@qq.com
嘻,这是我的Q信箱,如果squid运行异常,会给这里发信报告。
acl xiaojun src 192.168.1.0
定义授权访问域
http_access allow xiaojun
应用授权
最后,我们添加透明代理的代码支持,所谓透时代理,就是客户端不用指定具体代理服务器和端口,而客户端用户还以为自己是在直接访问外网资源的呢,我在微笑.
http_accel_host virtual
http_accel_port 80
http_accel_with_proxy on
http_accel_uses_host_header on
http_accel allow all
至此squid设置基本完成,重定向访问端口:
echo iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128 >> /etc/lc.local
写入此条命令,系统会把所有来自内网的80端口数据请求,转送往端口3128,而3128端口就是Squid监听的端口,结果可想而知,Squid会在不用户不知不觉中完成用数据攫取和反馈动作.
squid代理服务在启动前,所设置的交换空间必须正确初始化,而初始化之前应赋予squid内置用户maxiaojun适当权限.命令:
chomn maxiaojun.maxiaojun /etc/squid
把目录/etc/squid权限给maxiaojun用户和其所属组
/usr/sbin/squid -z
初始化交换空间! (完成)
reboot 重启此代理服务器,让所有设置生效
写在后面:这些天,我这里下雨,雨季我一般不想出去做事,心情不好的时候,想写点东西给大家,希望被欢迎.限于篇幅和时间仓促,疏缪之处可能难免,如在实践中遇到困难,请联系我 qq:75905279 tel:13773933407 如果时间允许我一定协助解决。特把本文献给江苏籍网络工作者和所有认识我的网络同行,我爱你们.2007.7.14于魏营镇