目前网上关于bro(zeek)+pf_ring zc的搭建流程的中文文章十分稀少。项目需要,历时两天,翻阅各种外文论坛/文档,多次排错,终于可以让bro在集群模式下调用pf_ring zc driver,并完美运行。
搭载环境:intel(r) xeon(r) cpu e5-2609 ,2物理cpu,8核心,16逻辑cpu,32g内存。
流程分为四部:pf_ring安装------licence注bro配置入与zc driver加载------bro安装--------bro配置。
一:pf_ring安装
下为pf_ring大致安装流程,需根据机子情况进行相应修改。本网卡为igb类型,故编译此网卡。
#下载pf_ring
1.git clone https://github.com/ntop/PF_RING.git
#编译PF_RING内核
2.cd PF_RING/kernel
3. ./configure && make && make install
#编译PF_RING专属高效驱动
4.cd ../drivers/intel/igb/igb-5.3.3.5-zc/src
5.cp /usr/include/linux/pf_ring.h .
6.make && make install
7.cd ~/PF_RING
#编译PF_RING工具、实例以及基于pf_ring的tcpdump
8.cd userland/lib
9. ./configure && make && make install
10.cd ..
11. ./configure && make && make install
12. cd examples/tcpdump
13 ./configure && make && make install
14. cd ../tcpdump-4.9.2
15. ./configure && make && make install
二:licence注入与zc driver加载
zero copy(原dna)是需要购买licence才能使用的服务。所购pf_ring zc driver(1 Gbit PF_RING ZC Intel [Linux]),可以满足自己千兆网速的应用场景,大家可以根据需要购买相应产品。购买链接(https://shop.ntop.org/)。购买成功后依据邮件提示,完成licence注入,注入命令如下:
1.mkdir /etc/pf_ring
2.echo "序列号" >>/etc/pf_ring/"码"
zc driver的加载:切到对应网卡驱动下(3.cd ../drivers/intel/igb/igb-5.3.3.5-zc/src),使用4../load_driver.sh,卸载旧驱动,安装新驱动。
配置HUGEPAGES(参考文章https://blog.csdn.net/fan_hai_ping/article/details/40436883)
5.echo 512 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
6.mount -t hugetlbfs nodev /mnt/huge
完成上述6步骤后使用如下方法可以验证是否 zc driver可以正常使用:
第一种:
cat /proc/net/pf_ring/dev/eth1/info | grep ZC
显示Polling Mode: NAPI/zc 就成功了
第二种:
使用pf_ring改造过的tcpdump抓包,类似./tcpdump -i zc:eno1 -vv,如正常抓包,证明加载成功
第三种:
cd ../pf_ring/package/usr/local/bin
./pf_ringcfg --list-interfaces 显示[Running ZC]证明成功。
三:bro安装(参考文章http://www.ntop.org/guides/pf_ring/thirdparty/bro.html)
1.安装依赖包apt-get install cmake make gcc gcc-c++ flex bison libpcap-devel openssl-devel python-devel swig zlib-devel(可能不全,依据自己情况安装)。
2.下载bro并解压 wget https://www.bro.org/downloads/release/bro-X.X.X.tar.gz tar xvzf bro-X.X.X.tar.gz。
3.很关键的一步,建立pf_ring和bro的链接,并编译安装。
cd bro-X.X.X
./configure --with-pcap=/usr/local/lib
make && sudo make install
验证ldd /usr/local/bro/bin/bro | grep pcap
显示 libpcap.so.1 => /usr/local/lib/libpcap.so.1 (0x00007fa371e33000)为安装并配置成功。
四:bro配置(参考文章https://www.zeek.org/documentation/load-balancing.html)
1. cd /usr/local/bro/etc
2.此目录下有三个配置文件,配置networks.cfg为配置监测的网段,重点为node.cfg的配置。下面为本服务器配置:
[logger]
type=logger
host=localhost
[manager]
type=manager
host=localhost
[proxy-1]
type=proxy
host=localhost
[worker-1]
type=worker
host=localhost
lb_method=pf_ring(包处理方法)
lb_procs=9(分配给bro集群的逻辑cpu数,不要超过服务器的逻辑cpu数)
pin_cpus=0,1,2,3,4,5,6,7,8(具体逻辑cpu的编号)
interface=zc:eno1(监测网卡)
3.命令ethtool -L eno1 combined 9,设置rss个数,与上面lb_procs数目相同。并用命令 ethtool --show-channels eno1验证配置是否生效。
以上,就完成了所有安装与配置,cd /usr/local/bro/bin ,./broctl ,启动bro控制。help可以查看功能命令。首先deploy完成配置与启动,正常的话,bro就正常启动了。stop命令输入后,就可以在/usr/local/bro/logs文件中查看相应日志了。
要说的是zc对无zc的提升真的很大,查看logs下的capture_loss.log,丢包率从之前的30%左右到了不到1%,应该是流量越大效果越明显。
以上,共享。欢迎讨论指正。