2012/06/30

【IPv6 Ready Logo】Core符合性測試 - 自動測試

在上一篇提到了Core手動測試的步驟
這篇會介紹如何將手動測試改為自動測試

受測的設備(NUT)必須要有RS232的輸入方式
FreeBSD(TN)也必須要有RS232(console)的連線port
請參考下面的圖示

自動測試就是FreeBSD會透過Console Port去下指令
這樣使用者就不用一直呆在設備旁了

● v6eval-remote
請先去下載v6eval-remote (目前已經沒有在維護了)
並做以下的設定
# tar vfxz v6eval-remotes-3.0.tar.gz
# cd v6eval-remotes-3.0
# vi Makefile
    DOCFILES=00README.remotes INSTALL.remotes \
    COPYRIGHT
# vi ./bin/remotes/Makefile
    SUBDIR= unknown \ 
    manual \
    linux-v6 \
    usagi-i386 \
    usagi24-i386 \
    freebsd-i386 \
    freebsd43-i386 \
    kame-freebsd \
    ms-winxp \
    ms-win2k
# make
# make install

● /usr/local/v6eval/etc/nut.def
設定完成之後,請到/usr/local/v6eval/etc/nut.def
將System的值改為受測設備的作業系統
若是沒有相同的,則可以選近似的進行改寫
以下是針對linux做範例
System    linux-v6

● /usr/local/lib/perl5/site-perl/5.12.4/V6evalRemote.pm
在自動測試前,請勿必先看過這個檔案
還有/usr/local/v6eval/bin/裡面的檔案
若是有需要修改的請自行修正
下面是一定要修正的地方
$Device=”cuau0”
$User=”root”
$Password=”v6eval”

● RS-232測試
設定連線
# touch /var/log/aculog
# chown uucp:dialer /var/log/aculog
# chmod 660 /var/log/aculog
測試連線
# cu –l /dev/cuau0 –s 38400 (38400是 baud rate)
# ~. (終止連線)
測試是否能使用自動測試
# /usr/local/v6eavl/bin/linux-v6/loginout.rmt –o 1

上述都設定完成之後
就可以執行下述的指令進行自動測試了... gogogo ~
# cd Self_Test_5-0-0
# make clean
# make ipv6ready_p2_host



2012/06/29

IPv6... ICMPv6


之前介紹了IPv6的定址方式,會建議先看過再來看這篇
接著介紹一些關於Neighbor Discovery的內容

Neighbor Discovery Protocol(NDP)是用來偵測周圍的IPv6設備與位址是否重複的功能
利用以下的五種封包:
● Neighbor Solicitation(NS): Host送給link layer的request
● Neighbor Advertisement(NA): Host送給link layer的response
● Router Solicitation(RS): Host送給Router的request
● Router Advertisement(RA): Router回給Host的response & 定期的multicast封包
● Redirect: Router

下面是IPv6 Cache Table的內容
● Neighbor Cache: 類似IPv4的MAC Table
- Neighbor: 鄰居的IPv6 address
- MAC: 鄰居的MAC
- State: reachable(可收到), stale(過期), delay(到stale才回應), proble(等回應), invalid, unknown, incomplete
- Flags: router 或 host

● Prefix List: 看哪些IP的prefix是在同一個domain(不須經由router)
- Prefix: prefix與prefix length
- vltime(valid time): 此prefix還可以合理的存活多久
- pltime(preferred life time):  透過stateless configuration(DHCP或Router)所給的存活時間
- onlink: on-link(同一個domain), off-link(不同domain)
- autonomous: 是不是DHCP或Router所給的prefix

● Destination Cache: 目標IP與Next Hop的對應
- Destination Address:  目標IP
- Next Hop Address:  送的下一個IP,可以為目標的IP

● Route List: IPv6的routing table
- Address: 目標IP或prefix
- Gateway/Interface: gateway或interface

● Default Router List:
- Address: router的IP
- Preference: high, medium, low (如果有多個router都在同個level,就輪流)
- Lifetime: 可存活多久
- Flag: statefuk address, additional configuration setting

IPv6網路卡起始的流程
1. 自動生成link local address
2. 送出NS,看看有沒有設備的link local address跟自己的一樣
3. 收到NA之後,存到Neighbor Cache
4. 送出RS,收到Router回送的RA,存到neighbor Cache, prefix list, destination cache

當一個switch要送封包的時候
1. 看Destination Cache決定Next Hop
- 有,直接送到Next Hop送出資料
- 沒有,到第2步
2. 看Prefix List是否在同一個Domain
- 有,就可以直接送給它(代表在同一個Domain)
- 沒有,到第3步
3. 看Router List
- 有,用Neighbor Cache找出MAC,並送出資料
- 沒有,開始IPv6 resolution的過程
透過以上的步驟,可以減少IPv6的封包

2012/06/20

【IPv6 Ready Logo】Core符合性測試

這篇要介紹如何建置IPv6符合性的測試環境
因為Core的測試設備分為兩種:Host與Router
我先以簡單的Host來做範例
先介紹一下兩個名詞:TN (Test Node) 與 NUT
TN:就是下面介紹的FreeBSD的主機
NUT:則是我們所要受測的IPv6設備

首先要找一台不要太新的電腦
如果有COM Port更好,因為自動測試會需要它
接著去下載FreeBSD 9.0
http://www.freebsd.org/where.html
因為測試的環境必須在這個OS下面
安裝完成之後
還必須要安裝Perl-5.12與Perl的相關模組
因為測試程式的語法是由Perl寫出來的

● Perl-5.12.4
# cd /usr/ports/lang/perl5.12
# make
# make install
如果無法連上網路請自行下載BSDPAN-20111107.tar.bz2與perl-5.12.4.tar.bz2,並執行以下指令之後,再重新試上面的指令
# cp perl-5.12.4.tar.bz2 /usr/ports/distfiles/perl
# cp BSDPAN-20111107.tar.bz2 /usr/ports/distfiles/perl
● Expect
# cd /usr/ports/lang/p5-Expect
# make
# make install
如果無法連上網路請自行下載IO-Tty-1.10.tar.gz與Expect-1.21.tar.gz,並執行以下指令之後,再重新試上面的指令
# cp Expect-1.21.tar.gz /usr/ports/distfiles
# cp IO-Tty-1.10.tar.gz /usr/ports/distfiles
● Digest-MD5
# cd /usr/ports/security/p5-Digest-MD5
# make
# make install
如果無法連上網路請自行下載Digest-MD5-2.51.tar.gz,並執行以下指令之後,再重新試上面的指令
# cp Digest-MD5-2.51.tar.gz /usr/ports/distfiles
● YAML
# cd /usr/ports/textproc/p5-YAML
# make
# make install
如果無法連上網路請自行下載YAML-0.77.tar.gz,並執行以下指令之後,再重新試上面的指令
# cp YAML-0.77.tar.gz /usr/ports/distfiles

接下來要安裝測試的軟體了
● v6eval (用來收送IPv6封包用的)
請去此處下載:v6eval-3.3.2
因為FreeBSD9.0在make這套時會有Error Message: "CmMain.cc:51:18: error: utmp.h: No such file or directory",所以請下載:v6eval.diff_.gz
# tar zxvf v6eval-3.3.2.tar.gz
# cp v6eval.diff_.gz v6eval-3.3.2
# cd v6eval-3.3.2
# gunzip v6eval.diff_.gz
# patch -p0 < v6eval.diff_
# make
# make install
● Self Test Tool (Perl寫的Script用來執行v6eval讓它去收送封包)
請去此處下載:Self_Test_5.0.0
# tar vxfz Self_Test_5-0-0.tgz

在安裝完所有的軟體之後,就要設定相關的檔案了
● /etc/rc.conf (請修改rl0為連接NUT的port)
ipv6_enable=”NO”
ifconfig_rl0=”up”
devfs_system_ruleset=“devfsrules_unhide_bpf”
● /etc/devfs.rules
[devfsrules_unhide_bpf=1025]
add path ‘bpf0’ user root group wheel mode 0660 unhide
add path ‘bpf1’ user root group wheel mode 0660 unhide
add path ‘bpf2’ user root group wheel mode 0660 unhide
add path ‘bpf3’ user root group wheel mode 0660 unhide
add path ‘bpf4’ user root group wheel mode 0660 unhide
add path ‘bpf5’ user root group wheel mode 0660 unhide
add path ‘bpf6’ user root group wheel mode 0660 unhide
add path ‘bpf7’ user root group wheel mode 0660 unhide
● /etc/group
wheel
● /usr/local/v6eval/etc/tn.def (請修改rl0為連接NUT的port)
RemoteDevice  cuau0
RemoteDebug  0
RemoteIntDebug 0
RemoteLog  1
RemoteSpeed  0
RemoteLogout  0
RemoteMethod serial
filter    ipv6
Link0  rl0  00:00:00:00:01:00
● /usr/local/v6eval/etc/nut.def (TargetName與HostName設定要測試設備的名稱,Link0請設定NUT的port與MAC)
System    manual
TargetName   abc
HostName   abc
Type    host
User    root
Password   v6eval
Link0  eth0  00:00:92:a7:6d:f5

以上就是將測試的環境給設定好了~

接著將我們要測試的設備接上FreeBSD主機
就可以進行下面的測試指令了
因為一共分五大項,若要一次測試
# cd Self_Test_5-0-0
# make clean
# make ipv6ready_p2_host
若要分項測試,針對Spec作測試
# cd Self_Test_5-0-0/spec.p2
# make clean
# make ipv6ready_p2_host
若要針對Spec的17~24項作測試
# cd Self_Test_5-0-0/spec.p2
# make clean
# make AROPT="-s 17 -e 24" ipv6ready_p2_host

在手動的測試中會有三種狀況會等您的動作
● 等開機完成到Login的畫面,再按下Enter
reboot> Reboot NUT.
reboot>     * Wait until NUT boot up completely.
reboot>         Ex.) Wait until catch up login prompt.
reboot> 
reboot> Press Enter key for continue. 
● 重新開機之後,馬上按下Enter
reboot_async> Reboot NUT.
reboot_async>     * You don't need to wait NUT untill boot up completely.
reboot_async>     * You have to exit this script quickly.
reboot_async>     * This script is used for catching up boot sequence.
reboot_async>         Ex.) DAD, MLD Report, ...
reboot_async> 
reboot_async> Press Enter key for continue. 
● 先輸入好ping6的指令,按下Enter的五秒內,執行ping6的指令
ping6> Press enter key, and excute the following commands within 5 seconds.
ping6> Do ``ping6  DataSize= 1352, Send Count= 1, Interface= bfe0, Destination= FF1E::1:2''

【IPv6 Ready Logo】Core 測試流程

當自己的產品已經有支援IPv6之後
要如何證明呢?
當然是送到最有公信力的機構去做認證
台灣有一個IPv6的認證中心:中華電信研究所IPv6測試實驗室
透過這個實驗室的協助,我們的設備就可以宣稱有IPv6的功能了

測試的項目很多有
● Core:測試基本IPv6的功能
● IPSec:測試IPv6加密與安全性的部分
● DHCP:測試自動取得IPv6與DNS的功能
● SNMP:測試IPv6網路管理的部分
● ...
每一個項目都有一張貼紙
Core的測試是最基本的
有了Core之後才能用同一台去取得其他的項目

那要怎麼通過認證呢? 
簡單來說分為兩個步驟:
第一個步驟就是符合性測試的部分 (Conformance Test)
一共有五大項,三百多個測試項目
這部分要自己測試的,當所有的測試項目通過了
再將報告寄給中華電信研究所
他們審查過之後就可以到他們那邊進行互連性的測試 (Interoperability Test)
要跟其他四種不同的OS進行測試
當測試完之後沒有問題
就可以請他們協助將文件寄到國外去申請Logo了

2012/06/06

VRRP...


VRRP (Virtual Router Redundency Protocol)

每個網路都會指定default gateway
若default gateway壞了所有的對外網路就完全不通了
所以VRRP(rfc2338)就是用來避免這樣的事情發生

Virtual Router是由一群實體的layer 3 device所組成
這些網路設備都有相同的IP
但是只有設定為master的那台會有作用
master也會固定送hello message給其他的設備
其他的設備都處在stand by的狀態
當master掛了之後
其中的一台就會取代master的角色