分类 IT技术 下的文章

一直用nagios做网络监控报警,最近才知道还有个SmokePing,一看作者是RRD的作者,于是决定下来试用一下。
首先系统安装环境,虚拟机下安装CentOS6.3,32位的,SmokePing从官网下载的2.6.8,旧版本拷贝就能用,新版本已经变成需要安装的了,不过也更简单容易了。
安装系统的时候直接把apache和编译工具都装了,省得再装了,如果没装的需要再装一下,反正也就一条命令。
首先先安装一些依赖包,输入以下命令

yum -y install httpd-devel libxml2-devel libpng-devel glib pango pango-devel freetype freetype-devel fontconfig cairo cairo-devel libart_lgpl libart_lgpl-devel

安装rrdtool 1.4.7

 wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.7.tar.gz
 tar zxvf rrdtool-1.4.7.tar.gz
 cd rrdtool-1.4.7
 ./configure --prefix=/usr/local/rrdtool
 make && make install

安装cgilib

 wget http://down1.chinaunix.net/distfiles/cgilib-0.5.tar.gz
 tar zxvf cgilib-0.5.tar.gz
 cd cgilib-0.5
 make
 cp libcgi.a /usr/local/lib
 cp cgi.h /usr/include

安装fping-2.4b2_to

 wget http://fping.sourceforge.net/download/fping.tar.gz
 tar zxvf fping.tar.gz
 cd fping-2.4b2_to
 ./configure
 make
 make check
 make install

安装echoping

wget http://jaist.dl.sourceforge.net/project/echoping/echoping/6.0.0/echoping-6.0.0.tar.gz
tar zxvf echoping-6.0.0.tar.gz
cd echoping-6.0.0
./configure --without-libidn
make
make test #遇到测试不成功等信息也没关系,直接ctrl+c回到命令行
make install

安装FCGI

 wget http://cpan.communilink.net/authors/id/F/FL/FLORA/FCGI-0.74.tar.gz
 tar zxvf FCGI-0.74.tar.gz
 cd FCGI-0.74
 perl Makefile.PL
 make && make install

安装mod_fastcgi,dso方式

 wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
 tar zxvf mod_fastcgi-2.4.6.tar.gz
 cd mod_fastcgi-2.4.6
 apxs -o mod_fastcgi.so -c *.c
 apxs -i -a -n fastcgi .libs/mod_fastcgi.so

修改apache配置文件,确认有如下一行,没有则添加

LoadModule fastcgi_module modules/mod_fastcgi.so

安装SMokePing

wget http://oss.oetiker.ch/smokeping/pub/smokeping-2.6.8.tar.gz
tar zxvf smokeping-2.6.8.tar.gz
./configure --prefix=/usr/local/smokeping

在这里会得到类似如下错误提示,需要安装perl一些依赖包

 checking checking for perl module 'RRDs'... Failed
 checking checking for perl module 'FCGI'... Ok
 checking checking for perl module 'CGI'... Ok
 checking checking for perl module 'CGI::Fast'... Ok
 checking checking for perl module 'Config::Grammar'... Failed
 checking checking for perl module 'Digest::HMAC_MD5'... Failed
 checking checking for perl module 'LWP'... Ok

 ** Aborting Configure ******************************

 If you know where perl can find the missing modules, set
 the PERL5LIB environment variable accordingly.

 FIRST though, make sure that 'perl' starts the perl
 binary you want to use for SmokePing.

 Now you can install local copies of the missing modules
 by running

 ./setup/build-perl-modules.sh /usr/local/smokeping/thirdparty

 The RRDs perl module is part of RRDtool. Either use the rrdtool
 package provided by your OS or install rrdtool from source.
 If you install from source, the RRDs module is located
 PREFIX/lib/perl

先解决”checking checking for perl module ‘RRDs’… Failed”的问题,由于我们是编译安装的rrdtool,所以perl没找到默认路径下它的模块,需要手工拷贝过去

cp /usr/local/rrdtool/lib/perl/5.10.1/i386-linux-thread-multi/RRDs.pm /usr/lib/perl5/
cp /usr/local/rrdtool/lib/perl/5.10.1/i386-linux-thread-multi/auto/RRDs/RRDs.so /usr/lib/perl5/

如果你是CentOS5.9,就是下面的命令,perl版本不同

cp /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/RRDs.pm /usr/lib/perl5/5.8.8/i386-linux-thread-multi/
cp /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/auto/RRDs/RRDs.so /usr/lib/perl5/5.8.8/i386-linux-thread-multi/

下面的几个模块在错误提示中已经提到解决办法,运行以下指令就会自动下载安装了

./setup/build-perl-modules.sh /usr/local/smokeping/thirdparty

装完之后,重新运行下面指令

./configure --prefix=/usr/local/smokeping
gmake install

配置smokeping

 cd /usr/local/smokeping/
 mkdir cache data var
 chown apache.apache cache data var
 cd /usr/local/smokeping/htdocs/
 cp smokeping.fcgi.dist smokeping.fcgi
 cd /usr/local/smokeping/etc/
 cp config.dist config
 chmod 400 /usr/local/smokeping/etc/smokeping_secrets.dist
 ln -s /usr/local/smokeping/cache /usr/local/smokeping/htdocs/cache

修改/usr/local/smokeping/etc/config

vi /usr/local/smokeping/etc/config
找到binary = /usr/sbin/fping
修改为binary = /usr/local/sbin/fping
 /usr/local/sbin/fping

修改/usr/local/smokeping/bin/smokeping

vi /usr/local/smokeping/bin/smokeping
找到:use lib qw(); # PERL5LIB
修改为:use lib qw(/usr/local/rrdtool/lib/perl); # PERL5LIB

修改主机配置文件,增加自己的主机,如果只想测试就把host改成自己要检测的IP就行了

+ Test
 menu= Targets
 #parents = owner:/Test/James location:/

 ++ James

 menu = James
 title =James
 alerts = someloss
 slaves = boomer slave2
 host = james.address

 ++ MultiHost

 menu = Multihost
 title = James and James as seen from Boomer
 host = /Test/James /Test/James~boomer

创建开机自动运行脚本
vi /etc/rc.local
写入如下内容

nohup /usr/local/smokeping/bin/smokeping --logfile=/var/log/smokeping.log 2>&1 &

修改apache配置文件

Alias /smokeping/ "/usr/local/smokeping/htdocs/"
AllowOverride None Options All AddHandler cgi-script .fcgi .cgi Order allow,deny Allow from all DirectoryIndex smokeping.fcgi 

最后重器apache服务,运行

nohup /usr/local/smokeping/bin/smokeping –logfile=/var/log/smokeping.log 2>&1 &

打开浏览器输入http://smokeping-ip/smokeping/即可访问

squid用了好多年,但是总的来说也不算精通,都是需要什么去查什么,然后照着做。。。

今天偶然发现还有wpad这东西,全名为Web Proxy Auto Discovery。顾名思义,就是让IE浏览器自动检测设置,而无需设置代理服务器及端口或者设置代理脚本。

当然前提是在域环境下,否则你需要更改的东西可就多了,也不能保证好用。本例是在域环境下测试并部署成功的。

英语好的可以去看参考文章http://www.wlug.org.nz/WPAD

默认情况下,域用户登录计算机后,IE会按以下地址自动检测代理设置

http://wpad.xxx.domain.local/wpad.dat
http://wpad.domain.local/wpad.dat
http://wpad.local/wpad.dat
http://wpad/wpad.dat

xxx.domain.local是你域的地址,所以最简单的办法就是在域里设置wpad.xxx.domain.local这个域名,指向你的代理脚本所在的地址(注意这个地址是代理脚本所在的地址,可以不是代理服务器的地址)

然后再代理脚本所在的服务器网站根目录创建一个名为wpad.dat的文件,文件内容其实就是你原有的代理脚本设置

在设置的时候有个小插曲,那就是wpad这个域名被windows当作黑名单处理了,我们需要去掉或关闭这个特性。

由于我使用的是squid作为代理服务器,才有这个问题,如果你使用的是ISA2006或者TMG2010那就没这个问题,因为都是微软自家的东西,不会做限制的。

关闭这个特性需要安装soppurt tools,命令行下运行如下命令即可

dnscmd [servername] /config /enableglobalqueryblocklist 0

把[servername]替换为你服务器的名称,这里我是偷了个懒,直接关闭了,其实可以修改这个blacklist的,有需要的可以自己google

更改完这些以后,可以找一台域用户登录的计算机测试了,我这里的环境使用xp/2003/win7都没问题。

后续测试发现,不用域环境也是可以的,但是需要开启dhcp,让dhcp推送一个域后缀,然后把推送到这个域后缀增加个wpad的子域名就可以了。

另外,再说一下之前做的各种尝试,包括dhcp选项,dns修改,都罗列如下

dhcp修改/etc/dhcpd.conf

option option-252 "http://wpad.xxx.domain.local/proxy.pac";
option wpad-url code 252 = text;
option wpad-url "http://wpad.xxx.domain.local/proxy.pac\n";

第一行可能不好用,由于dhcp版本问题,出错注释掉

dns配置需要增加如下设置

wpad IN A 192.168.0.100
IN TXT "service: wpad:!http://wpad.xxx.domain.local:80/proxy.pac"
wpad.tcp IN SRV 0 0 80 wpad.xxx.domain.local.

尝试了一下Win7的脱机文件,还不错,不过缺点是默认脱机文件存储在C盘,由于我的C盘比较小,所以需要修改到D盘上,方法也比较简单,就是把脱机文件使用的文件夹创建链接到D盘即可,这个方法也适用于别的需求。

首先,控制面板-同步中心-管理脱机文件,选择“禁用脱机文件”,并重新启动计算机;

然后,在D盘创建用于脱机文件存放的文件夹,比如D:CSC,用管理员身份运行“命令提示符”,输入以下代码

Takeown /r /f C:WindowsCSC
rd /s C:WindowsCSC
mklink /J C:WindowsCSC "D:CSC"

第一行是获取所有权,第二行删除默认脱机文件夹,第三行创建到新位置的链接文件

最后,打开同步中心-管理脱机文件,选择“启用脱机文件”,并重启计算机即可。

终于有时间测试一下squid的域身份认证了,之前一直使用iptables来通过IP地址做的代理访问权限控制,而使用哪种方法是根据各个公司内部的具体需求来决定的。

首先明确一下需求,配置squid使它能支持域用户认证,如果可能的话,使用集成windows身份认证,这样域用户登录计算机后,不需要输入密码就可以使用,做到用户端透明,除非用户未使用域用户登录才会弹出需要输入帐户密码。

先放狗搜了一圈,大致确定了方向,使用samba和krb5做帐户认证,用squid来调用即可。

1、本文使用CentOS5.6系统,先安装需要的软件

yum install squid samba ntp

安装ntp是为了同步时间用的,如果squid的时间和域控制器时间相差太多,在以下配置中会出错。

同步时间的命令

ntpdate clock.redhat.com

2、修改hosts文件,把计算机名以及计算机全名设置好,本例域为test.local

vi /etc/hosts
127.0.0.1 squid squid.test.local localhost

3、修改dns,使用域控制器的DNS

vi /etc/resolv.conf
nameserver 192.168.1.100

4、修改/etc/krb5.conf,更改其中的域信息,注意域名一定要全部大写

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

 [libdefaults]
default_realm = TEST.LOCAL #改成你自己的域名
dns_lookup_realm = false
dns_lookup_kdc = true #这里需要把原来的false改成true
ticket_lifetime = 24h
forwardable = yes

 [realms]
TEST.LOCAL = { #改成你自己的域名
kdc = 192.168.1.100:88 #改成域控制器的IP
admin_server = 192.168.1.100:749 #改成域控制器的IP
default_domain = TEST.LOCAL #改成你自己的域名
}

 [domain_realm]
.test.local = TEST.LOCAL #改成你自己的域名
test.local = TEST.LOCAL #改成你自己的域名

[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}

修改完毕可以使用以下名来验证,输入正确的密码就不报错(就是啥显示也没有),输入错误的就会报错

net ads join -U administrator@TEST.LOCAL

注意,这里的TEST.LOCAL也必须要全部大写,否则也会报错。

5、修改samba配置文件,以下只贴出来有变化或没有的

 workgroup = TEST
 server string = squid
 security = ads
 realm = TEST.LOCAL
 password server = 192.168.1.100
 winbind use default domain = yes
 encrypt passwords = yes
 idmap gid = 10000 - 20000
 idmap uid = 10000 - 20000
 os level = 20
 dns proxy = no

6、加入域

net ads join -U administrator@TEST.LOCAL

然后输入密码就可以了,检测是否成功加入域的方法

wbinfo -t #测试域连接
wbinfo -u #列出所有用户
wbinfo -g #列出所有组
tlm_auth --username=administrator #测试ntlm_auth验证密码

7、配置NSS,在/etc/nsswitch.conf找到以下两行,在后面添加winbind即可

passwd: files winbind
group: files winbind

8、修改squid配置文件,因为要做组验证,还需要在域控制器上添加一个名为internet的组,并添加好相应人员

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=TEST.LOCAL\\internet
auth_param ntlm children 5
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=TEST.LOCAL\\internet
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 5 hours
acl NTLMUsers proxy_auth REQUIRED
http_access allow all NTLMUsers

里面有两个TEST.LOCAL替换成你自己的就行了,如果要替换组,把后面的internet替换成你自己的组就行了

记得在规则里看好配置,如果你之前就有了一条deny,那这些配置是不会生效的,需要把http_access deny all放到最后
另外,要让干净的squid配置文件无错,还需要增加以下几行

cache_mgr admin@penglei.name
visible_hostname squid.test.local

然后把squid服务重启一下就完成了,最后别忘了把squid、smb、winbind这几个服务设置成自动运行。

自从VMware发布ESXi有了免费授权以后,公司里还有自己手里的测试机装了不少VMware ESXi,在不配盘柜不使用外部存储的情况下,在ESXi4.x版本上均不支持本地磁盘超过2T,其实原因是因为4.x对本地磁盘分区使用MBR,而MBR限制在2T。

而我手里的N台ESXi主机,都很无奈的创建了若干个2T的VD来使用,用起来有点不爽。

在VMware发布ESXi5.0后,发现它已经支持GPT分区,可以创建超过2T的数据存储,于是考虑顺便攒台装ESXi5.0的主机,经过一番搜索,发现目前最便宜的支持ESXi的RAID是Dell PERC 5I,在taobao上买了2块,因为是自己折腾用,所以没有配电池,最近硬盘疯狂涨价,只好把手里的一台nas服务器的4块2T硬盘拆下来用。

一切都准备好,开始装系统,由于5.0原生就支持将ESXi安装到U盘,所以就把ESXi装到了U盘上,4块2T硬盘组了个6T的raid5,安装都很顺利,不过登陆到vSphere Client上发现,原来在健康状况-传感器里可以看到的raid卡状态,在5.0上消失了,经过一番搜索得出结论,vmware官方取消了所有第三方的provider,如果需要的话,得自己安装自己raid卡对应的cim provider。以下是几个参考链接(都是英文的)

http://communities.vmware.com/thread/327238

http://tinkertry.com/lsi92658iesxi5/

需要手动安装的vib文件在这里下载

http://downloads.vmware.com/d/details/dt_esxi50_lsi_2108_v534/dHRAYnRqZWRiZHAlZA==

http://www.lsi.com/Search/Pages/downloads.aspx?k=vib&r=os%3D%22AQ5WTVdhcmUgRVNYIDUueAJvcwECXiICIiQ%3D%22

安装方法比较简单,稍微懂点Linux的就可以操作,以下是流水账

将下载下来的两个文件解压缩,其实就需要里面的两个vib文件

scsi-megaraid-sas-5.34-1vmw.500.0.0.406165.x86_64.vib

vmware-esx-provider-LSIProvider.vib

在ESXi上开启SSH,用Winscp将这两个文件拷贝到/tmp,再用putty或者其他的终端连入ESXi,输入以下命令即可

esxcli software vib install -v /tmp/scsi-megaraid-sas-5.34-1vmw.500.0.0.406165.x86_64.vib
esxcli software vib install -v /tmp/vmware-esx-provider-LSIProvider.vib

安装完以后重新启动ESXi以后,就可以在健康状况里看到RAID卡的各种状态了。