network

网络设备管理 - rancid

Rancid的全称是Really Awesome New Cisco ConfIg Differ,顾名思义,该软件的初衷是为了管理cisco设备,然而由于它非常实用,目前已经被扩展到支持多达xx种网络设备,诸如常见的dell,hp,juniper,foundry,redback等,当然,国内常见的h3c也不在话下。
It‘s not that the name is not being recognized, it’s that the scripts it's running have errors in the first line which produce "

“No such file or directory”
Lookup list of groups

For each device in each list of groups
• Connect to the equipment (telnet, ssh, …)
• Run ”show” commands – config, inventory, …
• Collect, filter/format data
• Retrieve the resulting config files
• CVS check-in the changes
• Generate a diff from the previous version
• E-mail the diff to a mail address (individual or group)

rancid

rancid的工作原理

安装

# aptitude install rancid-core rancid rancid-utils

Rancid配置

/etc/rancid/rancid.conf

CVSROOT=$BASEDIR/SVN; export CVSROOT
RCSSYS=svn; export RCSSYS
LIST_OF_GROUPS=”access dist core”
  1. rancid支持CVS和SVN这两种版本管理工具,本文选择了SVN,因为CVS太古老了。
  2. 根据cisco的定义,一个大型的网络规划应该分成三层,分别是access、distribution和core,因此我们也创建三个组:access、dist、core

配置设备

cd /var/lib/rancid/
mkdir access
mkdir dist
mkdir core
touch access/router.db
touch dist/router.db
touch core/router.db

接着往router.db里面填内容:

# vim access/router.db
10.0.0.1:h3c:up:sw_access_1f_A
10.0.0.2:h3c:up:sw_access_1f_B
10.0.0.3:h3c:up:sw_access_1f_C
10.0.0.4:h3c:up:sw_access_1f_D
...

依次创建dist/router.db和core/router.db

# vim .cloginrc
add user * <username>
add password * <password>
add method * telnet

H3C脚本

H3C并不在rancid的官方支持之列,不过好在有热心的网友Jethro Binks制作了h3c的脚本

H3C的OS叫Comware,有3和5这两个系列,常见的S3100,S3600,S5600,S5800等均能正常使用。以下是经过测试的型号列表:

  1. H3C S3100 (Comware 3)
  2. H3C S5600 (Comware 3)
  3. H3C S7506 (Comware 5)
  4. H3C S7906E (Comware 5)
  5. H3C S5820X (Comware 5)
  6. H3C S5800 (Comware 5)
  7. H3C S3610 (Comware 5)
  8. H3C MSR30-60 (Comware 5)

Jethro Binks的脚本并不适合于Debian,需要做一点小修改:

h3clogin:

#! /usr/local/bin/expect --

改成

#! /usr/bin/expect --

h3crancid:

#! /usr/bin/perl5

改成

#! /usr/bin/perl

接着将它们拷贝到/usr/lib/rancid/bin中,同时赋予+x的属性。

# cp h3clogin h3crancid /usr/lib/rancid/bin
# chmod +x h3crancid h3clogin

H3C设备配置

rancid的脚本将使用perl+expect来登录H3C设备,并执行一些display命令来获取设备信息,虽然然而所以安全性需要着重考虑,直接给完整的特权账号肯定不合适,最好创建一个单独的ranciduser,并且仅分配level1权限:

local-user ranciduser
authorization-attribute level 1

看到这,有些读者不禁倒吸一口凉气:糟糕,手头上管理着几十台设备,难不成我要逐台登录和创建几十个相同的帐号?别急,我们完全可以利用clogin/h3clogin来自动完成这个任务。

# vim create.rancid.account
sys
local-user rancid
authorization-attribute level 1
quit
save

h3clogin -x /path/to/commands.file

最后测试一下

# sudo -u rancid -H /usr/lib/rancid/h3clogin <H3C-device-ip> FIXME

配置变更

硬件配置变更

软件配置变更

版本管理工具

rancid利用版本管理工具对配置变更进行管理,这是一个聪明而省力的做法,unix哲学就是帅。rancid支持CVS和SVN这两个版本管理工具,本文选择的是SVN,因为CVS太古老了。

安装svn

# aptitude install svn

整合svn

cd /var/lib/rancid/
svnadmin create configs
svn mkdir file:///var/lib/rancid/configs/access -m “created folder”
svn mkdir file:///var/lib/rancid/configs/dist -m “created folder”
svn mkdir file:///var/lib/rancid/configs/core -m “created folder”
svn co file:///var/lib/rancid/configs/access ./access/
svn co file:///var/lib/rancid/configs/dist ./dist/
svn co file:///var/lib/rancid/configs/core ./core/

chown -R rancid:rancid /var/lib/rancid/
chmod 0600 /var/lib/rancid/.cloginrc

sudo -u rancid -H /usr/lib/rancid/bin/rancid-run

svn mkdir access/configs
svn mkdir dist/configs
svn mkdir core/configs
svn add access/
svn add dist/

svn add core/*
svn commit -m “added files” access/
svn commit -m “added files” dist/
svn commit -m “added files” core/

配置变更提醒

当rancid检测到变更时,control_rancid组件利用sendmail将变更信息通过邮件发送给管理员。对于debian来说,我们将使用默认的MTA exim4来完成这项工作。

exim4的安装和配置

详见《如何利用exim4通过gmail发送邮件

/etc/aliases

# vim /etc/aliases
...
rancid-<group-name> : mail-address@domain.name
rancid-adimin-<group-name> : mail-address@domain.name
...
# newaliases
# /etc/init.d/exim4 restart

当配置变更时,邮件将发送给rancid-,当有错误信息时,邮件将发送给rancid-admin-

至此完成了配置变更的邮件提醒功能。

查看变更历史记录

viewvc安装

viewvc配置

如何在debian中安装无线网卡

记得2003年的时候,Wi-Fi设备用的是WEP加密协议,由于安全性问题而未能获得广泛应用。过去几年802.11获得长足的进步,WPA1/2,EAP-TLS等多种加密技术的实现大大促进了WiFi的传播,AP和无线网卡产品异常丰富,然而兼容Linux的还是屈指可数,能在Linux成功安装无线网卡的不仅仅靠技术和忍者神龟般的耐性,更多时候还要看人品!

在安装无线网卡之前有必要先了解一下WiFi的工作方式:

AP

AP是access point的简称,它将多个无线设备连接,无线设备通过它进行互联,也通过它联系外界,譬如互联网。

WPA

WPA全称是Wi-Fi Protected Access,是一种基于预协商key的加密方式,WPA之前802.11采用了WEP,后来证明是一种失败的加密方式,在安全性方面给Wi-Fi带来了很差的声誉,影响Wi-Fi的普及,WPA的出现扭转了乾坤。个人用户用得最多的是PSK,Pre shared key。
WPA的加密过程

安装无线网卡

在Linux中安装无线网卡驱动有两种方式,一种是通过ndiswrapper使用windows的驱动,另一种使用linux的原生驱动。

在第一种方式中,ndiswrapper是Linux内核中的一个模块,用于加载和运行windows内核的API和NDIS API驱动,换句话来说就是ndiswrapper将linux伪装成windows,使得无线网卡的 windows驱动可以跑在linux之上。Linux fans从心理上是抵触这种方式的,感觉要低windows users一等,其次在实际应用中也存在一些恼人的问题,因此是备选方案。

第二种方式是安装原生的linux的驱动,这种方式是最正宗的,直接由内核驱动硬件,效率也更高些,因此尽可能采用这种方式。可是目前linux针对无线网卡的驱动不多,因此在购买无线网卡之前需要确认一下是否兼容linux,下面是兼容linux的无线网卡列表:http://linux-wless.passys.nl/

b43-phy0 debug: Adding Interface type 2
  b43-phy0 ERROR: Firmware file “b43/ucode5.fw” not found or load failed.
  b43-phy0 ERROR: You must go to http://linuxwireless.org/en/users/Drivers/bcm43xx#devicefirmware and download the correct firmware (version 4).

  1. 查看自己的无线网卡的芯片
alfie:~# lspci -vnn | less
...
02:00.0 Network controller [0280]: Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller [14e4:4320] (rev 03)
        Subsystem: Linksys WPC54G [1737:4320]
        Flags: bus master, fast devsel, latency 64, IRQ 11
        Memory at 24000000 (32-bit, non-prefetchable) [size=8K]
        Capabilities: [40] Power Management version 2
        Kernel driver in use: b43-pci-bridge
        Kernel modules: ssb
...

可以看到Linux内核已经识别到了Linksys WPC54G了,它使用的芯片是Broadcom的BCM4320(我自己也说不清是4306还是4320,在http://lin...中说是以[14e4:4320]里面的数字为准)。

针对Broadcom的芯片,linux社区专门提供了b43驱动,在2.6.17-rc2时,内核引入了bcm43xx这个驱动,从2.6.24开始引入了b43legacy和b43,并废掉bcm43xx,其中b43legacy负责Broadcom4306 ver2以前或者仅有802.11b功能的Broadcom芯片,而b43负责剩下的所有型号芯片。

上面的兼容列表比较含糊,Linksys WPC54G v1.2似乎被b43支持,又似乎被b43legacy支持,也顾不了那么多了,我决定先试一下b43。

识别了网卡之后还不能马上使用,因为Broadcom的芯片工作原理有些特殊,还需要给芯片加载专有的firmware才能正常工作,因为firmware是专有的,所以debian官方源里面不直接提供,需要用户自行下载。

  1. 安装b43-fwcutter

    aptitude install b43-fwcutter

安装b43-fwcutter之后会提示是否自动去http://downloads.openwrt.org/sources下载相应的firmware并解压,此时应该选择否,因为openwrt.org的链接已经失效,需要手工下载。

正确的地址应该是http://mirror2.openwrt.org/sources,我选择了最新的firmware:wl 4.160xxx

wget /home/software http://mirror2.openwrt.org/sources/xxx
cd /home/software && b43-fwcutter -w /lib/firmware xxx

/lib/firmware是b43内核模块默认去寻找Broadcom firmware的地方。

需要说明的是,

  1. 安装wireless-tools

这个软件包提供了几个针对无线网卡的程序,iwconfig,iwlist

4、安装wpasupplicant

debian lenny中对wpasupplicant的介绍
WPA and WPA2 are methods for securing wireless networks, the former using IEEE 802.1X, and the latter using IEEE 802.11i. This software provides key negotiation with the WPA Authenticator, and controls association with IEEE 802.11i networks.

在ubuntu中安装wpa-supplicant
https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx/Feisty

安装wpasupplicat和wpagui
aptitude install wpasupplicant wpagui
其中wpasupplicant中包含了wpa_cli

安装b43-fwcutter和wireless-tools
其中,boardcom公司为很多无线网卡厂商提供芯片,下面就是linksys wpc54G所使用的芯片
lspci -vnn
由于boardcom是一家商业公司,所以他提供的芯片驱动程序也具有商业性质,因此在debian的源中没有。我们需要通过openwrt.org这个源来下载,openwrt.org是说来话长,暂且按下不表。
b43-fwcutter安装完毕之后,将自动去downloads.openwrt.org/sources/wl_….下载firmware,然而这个链接已经失效,所以需要手工去下载。
wget http://mirror2.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2

然后通过b43-fwcutter -w /lib/firmware broadcom-wl-4.80.53.0.tar.bz2

接着modprobe b43

即可完成

这个时候通过iwlist wlan0 scan来测试驱动是否能够正常使用

alfie:/home/chenr# iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 00:14:BF:F2:05:B7
                    ESSID:"dd-wrt"
                    Mode:Master
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=73/100  Signal level=-56 dBm  Noise level=-69 dBm
                    Encryption key:on
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (1) : TKIP
                        Authentication Suites (1) : PSK
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 9 Mb/s
                              12 Mb/s; 48 Mb/s
                    Extra:tsf=000000295b4c72c0

说明驱动已经可以正常使用了。

接下来需要配置wpa,这又是另外一个话题,先安装wpasupplicant

iwlistiwconfig是wireless-tools中的小程序,其中

iwlist可以通过某长无限网卡扫描到ssid

iwlist wlan0 scanning

iwconfig类似ifconfig,主要为无限网卡提供设置服务。

配置/etc/network/interface

~~~
allow-hotplug wlan0
iface wlan0 inet manual
wpa-ssid dd-wrt
wpa-psk hainanyidong

由于psk的密码明文显示在interface这个文件中,所以需要限制仅root可以对改文件进行修改

chmod 0600 /etc/network/interface

最后启动wlan0,invoke-rc.d networking restart
这句的好处是不需要重启机器。如果使用ifdown wlan0和ifup wlan0会显示尚未定义。

下面两行是用于??

    wpa-driver wext
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf