Chinaunix首页 | 论坛 | 博客
  • 博客访问: 969874
  • 博文数量: 99
  • 博客积分: 3306
  • 博客等级: 中校
  • 技术积分: 1238
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-21 10:14
文章分类

全部博文(99)

文章存档

2012年(37)

2011年(56)

2010年(6)

分类: LINUX

2012-09-15 19:59:16

  线上线下的多套环境,线上环境N多个机房,每个机房几百个公网IP,机房建设前期的需要给测试提供host列表。为方便在新机房启用前测试快速切换到不同的环境,就试用了一下dnsmasq,觉得还是不错的。

centos5.8自带的版本比较老,就直接下载的源码包编译了一下,编译后只拷出来了dnsmasq程序本身。新搞了个目录按照下面的格式存放。

bin/dnsmasq 

dnsmasq.conf 

dnsmasq.hosts 

failquery.pl  

 restart.sh

主配置文件如下

#dnsmasq.conf

user=pm no-hosts addn-hosts=/home/pm/dnsmasq/dnsmasq.hosts cache-size=1500 local-ttl=10 max-ttl=10 log-queries

 restart.sh

 

#!/bin/bash PRE=/home/pm/dnsmasq killall dnsmasq    &>/dev/null

$PRE/bin/dnsmasq  -x $PRE/dnsmasq.pid  -C $PRE/dnsmasq.conf -8 $PRE/dns.log -D killall -0 dnsmasq && echo "dnsmasq start ok" || echo "dnsmasq start failed"

每次改了配置直接运行一下restart脚本就行了。

因为开启了日志记录,所以随便写了个perl脚本分析日志,可以查看到测试同学访问时我配置的host文件是不是又漏掉的。

 

#!/usr/bin/perl use strict; use warnings; my %error; my %lack; my $reg=qr/xxx.com|yyyy.com/;#只分析这两个域的域名 my $DNSLOG="/home/pm/dnsmasq/dns.log"; open my $LOG,"<$DNSLOG" or die "open dns log failed!\n"; while (my $line=<$LOG>){  if($line=~/NXDOMAIN/){   if($line=~/]:\s+\w+\s+([\w\.]+)\s+/){    my $do=$1;    $error{$do}++ if ( $do=~/$reg/) ;   }  }  if($line=~/forwarded/){   if($line=~/]:\s+\w+\s+([\w\.]+)\s+/){    my $do=$1;    $lack{$do}++ if ($do=~/$reg/);   }  }

}

close $LOG;

my @t=keys%error; delete @lack{@t}; if( keys%lack >0){  print "\e[31mhosts lack some domains:\e[m\n";  print  "\e[1;33m",join("\n",keys%lack),"\e[m\n**************\n" } if( keys%error >0){  print "\e[32msome query domains not exist:\e[m\n";  print join("\n",keys%error),"\n**************\n" }


阅读(5094) | 评论(0) | 转发(0) |
0

上一篇:openwrt wan 802.1x认证

下一篇:windows writer test

给主人留下些什么吧!~~