? 说明:
首先在NUT上安装linux,版本为Red Hat 7.3 ,其Kernel版本为2.4.18-3。
TN上的操作系统仍为FreeBSD4.5。
一、NUT的配置
1)安装USAGI
首先从ftp://ftp.linux-ipv6.org/pub/usagi/stable/kit/下载适合于NUT配置的软
件包,这里使用的是RedHat7.3+Kernel2.4.18-3,所以下载usagi-linux24-stable-200
20408.tar.bz2即可。下载后放在某目录下:$SOMEWHERE
安装步骤如下:(以下内容可以在$SOMEWHERE/INSTALL.USAGI文档中找到)
———a. 解压缩
bzip2 –cd usagi-linux24-stable-20020408.tar.bz2 | tar xvf –
解压成功后可以在$SOMEWHERE目录下看到多了usagi目录
———b. 构建前的准备
cd $SOMEWHERE/usagi
make prepare TARGET= $(TARGET)
其中$(TARGET)根据系统的配置来写,这里Kernel是2.4.18的,所以TARGET=linux24。
如果kernel是2.2.XX的,则TARGET=linux22
———c. 构建USAGI内核
cd kernel
cd $(TARGET)
make mrproper
make menuconfig (为了正确的配置内核选项,打开
$SOMEWHERE/usagi/CONFIG.$(TARGET)文件,按照其中的提示一步一步去设置,这里参照
CONFIG.linux24)
make dep
make bzImage
make modules
———d. 安装USAGI内核
su (变为root身份)
make install
make modules_install
vi /etc/grub.conf
此时可以看到grub引导启动选项中多出了一项 RedHat+usagi,修改default值使启动时
默认进入usagi内核。
——– e. 构建并安装用户应用程序
cd $SOMEWHERE/usagi/usagi
./configure
make
su
make install
至此usagi内核的基本安装已经完成,重新启动机器,在grub引导界面中选择含有usagi
的一项启动即可。
(注:实际测试过程中按照上面的配置测到stateless autoconfiguration的时候就会出
现一些异常的Fail。这个问题一直没有解决,后来重新编译了linux原来的内核,原来F
ail的测试例就能顺利通过了,具体方法如下:
进入kernel的目录:
cd /usr/src/linux2.4.18-3
设置各种选项
make xconfig (IPv6: allow default route when forwarding is enable
d设为Y)
编译
make dep
make bzImage
make modules
make install
make modules_install
然后重新启动,选择不含有usagi的那项RedHat7.3即可。)
2) 配置成IPv6的router
由于linux的版本为最新的Red Hat7.3,所以在它的内部已经集成了对IPv6的支持。
可以先利用ifconfig命令查看网络配置,其中可以看到inet xxx.xxx.xxx.xxx的字样,
表示该网卡对应的IPv4地址(Link Local Address)。
然后执行以下指令:
cd /etc/sysconfig
vi network
可以看到文件network中的内容。在其中添加:
NETWORKING_IPV6=”yes”
IPV6FORWARDING=”yes”
IPV6INIT=’yes’
IPV6_DEFAULTGW=”3ffe:501:ffff:100::1%eth0″
保存并退出。
注:/etc/sysconfig目录下的所有文件配置内容(例如下面的ifcfg-eth0和ifcfg-eth1
)的各个可选参数都可以参考/usr/share/doc/initscripts-6.67/sysconfig.txt文件,
里面有很详细的说明。
另外,还需要修改其他几个文件的内容,分别如下:
1./etc/sysconfig/network-scripts/ifcfg-eth0,在其中添加入下语句:
IPV6INIT=’yes’
IPV6to4INIT=’yes’
IPV6FORWARDING=’yes’
IPV6ADDR=”3ffe:501:ffff:100:205:5dff:fea1:b73c/64″
同样,在/etc/sysconfig/network-scripts/目录下的ifcfg-eth1文件中添加如下语句:
IPV6INIT=’yes’
IPV6TO4INIT=’yes’
IPV6FORWADING=’yes’
IPV6ADDR=”3ffe:501:ffff:101:205:5dff:fea1:c15c/64″
2.打开/etc目录下的sysctl.conf文件,看是否有如下语句:
net.ipv6.conf.all.forwarding = 1 如果没有则加上
3. 修改重定向设置。
在/etc/rc.d/rc.local中加入如下语句:
for f in /proc/sys/net/ipv6/conf/*/accept-redirects
do
echo 1 > $f
done
4.TAHI系统为linux的测试配置中缺少一些测试需要的rmt文件,需要在/usr/local/v6
eval/bin/linux-v6/目录下创建,另外还有几个已经存在的rmt文件内容还需要根据lin
ux的使用方法加以修改,具体如下:
(1)route.rmt,用于在被测试机器上添加和删除路由地址的操作。内容如下:
(加粗的地方需要特别注意)
use V6evalRemote;
$rOpt_timeout = 5 if ! defined $rOpt_timeout;
$rOpt_addrfamily = “inet6” if ! defined($rOpt_addrfamily);
$rOpt_addrtype = “host” if ! defined($rOpt_addrtype);
$rOpt_netmask = “255.255.255.0” if ! defined($rOpt_netmask);
rOpen() || goto error;
rLogin($rOpt_timeout) || goto error;
$ROUTECMD = “route”;
if ($rOpt_cmd eq “add”) {
$NUT_cmd = “add”;
}
elsif ($rOpt_cmd eq “delete”) {
$NUT_cmd = “del”;
}
else {
print “$rOpt_cmd: unknown cmd/n”;
goto error;
}
if ($rOpt_addrfamily eq “inet6”) {
if ($rOpt_prefix eq “default”) {
rCommand(“$ROUTECMD “.
“-A $rOpt_addrfamily “.
“$NUT_cmd “.
“:: “.
“gw $rOpt_gateway “.
“dev $rOpt_if”,
$rOpt_timeout) || goto error;
}
else {
rCommand(“$ROUTECMD “.
“-A $rOpt_addrfamily “.
“$NUT_cmd “.
“$rOpt_prefix/$rOpt_prefixlen “.
“gw $rOpt_gateway “.
“dev $rOpt_if”,
$rOpt_timeout) || goto error;
}
}
elsif ($rOpt_addrfamily eq “inet”) {
if ($rOpt_addrtype eq “net”) {
rCommand(“$ROUTECMD “.
“-A $rOpt_addrfamily “.
“$NUT_cmd “.
“-net “.
“$rOpt_prefix “.
“netmask $rOpt_netmask “.
“gw $rOpt_gateway “.
“dev $rOpt_if”,
$rOpt_timeout) || goto error;
}
else {
rCommand(“$ROUTECMD “.
“-A $rOpt_addrfamily “.
“$NUT_cmd “.
“$rOpt_prefix “.
“gw $rOpt_gateway “.
“dev $rOpt_if”,
$rOpt_timeout) || goto error;
}
}
else {
print “$rOpt_addrfamily: unknown address family/n”;
goto error;
}
rLogout($rOpt_timeout) || goto error;
rClose();
exit($V6evalRemote::exitPass);
error:
rClose();
exit($V6evalRemote::exitFail);
notsupported:
rClose();
exit($V6evalRemote::exitNS);
(2)radvd.rmt,用于启动和停止NUT上的Router Advertisement Daemon。内容如下:
(加粗的地方需要特别注意)
use V6evalRemote;
#exit($V6evalRemote::exitNS); # delete this line, and modify
rOpen() || goto error;
$type=rType();
#
if($rOpt_Start && !$rOpt_link0 && !$rOpt_link1) {
print STDERR “Specify link0=XXX and/or link1=XXX/n”;
goto error;
}
#
$rOpt_timeout=5
if ! defined($rOpt_timeout);
#
$rOpt_maxinterval=600
if ! defined($rOpt_maxinterval);
$rOpt_mininterval=$rOpt_maxinterval*0.33
if ! defined($rOpt_mininterval);
#
$rOpt_chlim=64
if ! defined($rOpt_chlim);
$rOpt_raflag=0
if ! defined($rOpt_raflag);
$rOpt_rltime=$rOpt_maxinterval*3
if ! defined($rOpt_rltime);
$rOpt_rtime=0
if ! defined($rOpt_rtime);
$rOpt_retrans=0
if ! defined($rOpt_retrans);
#
$rOpt_pinfoflags=192
if ! defined($rOpt_pinfoflags);
$rOpt_vltime=2592000
if ! defined($rOpt_vltime);
$rOpt_pltime=604800
if ! defined($rOpt_pltime);
#
$rOpt_mtu=1500
if ! defined($rOpt_mut);
#
$rtadv_tmpl=”$type”.”.rtadvd.tmpl”;
$rtadv_conf=”$type”.”.rtadvd.conf”;
$rtadv_rmt=”/tmp/rtadvd.conf”;
$put_timeout=180;
#
rLogin($rOpt_timeout) || goto error;
rtadvd() || goto error;
rLogout($rOpt_timeout) || goto error;
rClose();
exit($V6evalRemote::exitPass);
error:
rClose();
exit($V6evalRemote::exitFail);
########################################################################
sub rtadvd()
{
if($rOpt_start) {
mkconf() || goto error;
kill_rtadvd() || goto error;
start_rtadvd() || goto error;
} elsif($rOpt_stop) {
kill_rtadvd() || goto error;
} else {
print “Nothing happed. Please specify start/stop./n”;
}
return(1);
error:
return(0);
}
#
sub mkconf()
{
print “Make rtadvd.conf/n” if $V6evalRemote::debug;
if(open(IN, “$rtadv_tmpl”) == 0) {
print STDERR “$rtadv_tmpl: $!/n”;
goto error;
}
if(open(OUT, “> $rtadv_conf”) == 0) {
print STDERR “$rtadv_conf: $!/n”;
goto error;
}
while(<IN>) {
s/LINK0/$rOpt_link0/;
s/LINK1/$rOpt_link1/;
#
s/MAXINTERVAL/$rOpt_maxinterval/;
s/MININTERVAL/$rOpt_mininterval/;
s/CHLIM/$rOpt_chlim/;
s/RAFLAGS/$rOpt_raflags/;
s/RLTIME/$rOpt_rltime/;
s/RTIME/$rOpt_rtime/;
s/RETRANS/$rOpt_retrans/;
#
s/PINFOFLAGS/pinfoflags#$rOpt_pinfoflags/;
s/VLTIME/$rOpt_vltime/;
s/PLTIME/$rOpt_pltime/;
#
s/MMTU/$rOpt_mtu/;
#
print STDERR $_ if $V6evalRemote::debug;
print OUT $_;
}
close(IN);
close(OUT);
print “Put local:$rtadv_conf to remote:$rtadv_rmt/n”
if $V6evalRemote::debug;
rPutfile($rtadv_conf, $rtadv_rmt, $put_timeout) || goto error;
return(1);
error:
return(0);
}
#
sub kill_rtadvd
{
my(@lines);
my($pid)=0;
rCommand(“ps ax”, $timeout) || goto error;
@lines=rCmdOutput();
shift(@lines); # remove command line
pop(@lines); # remove command prompt
foreach(@lines) {
if(/^/s*(/d+)/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+radvd)/) {
$pid=$1;
}
}
if($pid) {
print “Kill current rtadvd (pid=$pid)/n” if $V6evalRemote::debug;
rCommand(“kill $pid”, $timeout) || goto error;
}
return(1);
error:
return(0);
}
#
sub start_rtadvd()
{
print “Start rtadvd/n” if $V6evalRemote::debug;
if(rCommand(“/usr/sbin/radvd -C $rtadv_rmt “.
“$rOpt_link0 $rOpt_link1”, $timeout) != 1) {
return(0);
}
return(1);
}
与之相关的还要在$SOMEWHERE(ct测试集所在目录)/nd目录下添加linux-v6.rtadvd.t
mpl模板文件,因为radvd.rmt要以这个模板文件为基础在NUT上生成radvd的临时配置文
件/tmp/rtadvd.conf,创建模板文件内容如下:
interface LINK0
{
AdvSendAdvert on;
MaxRtrAdvInterval MAXINTERVAL;
MinRtrAdvInterval MININTERVAL;
AdvCurHopLimit CHLIM;
AdvReachableTime RTIME;
AdvRetransTimer RETRANS;
AdvLinkMTU MMTU;
AdvDefaultLifetime RLTIME;
prefix 3ffe:501:ffff:100::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
AdvValidLifetime VLTIME;
AdvPreferredLifetime PLTIME;
};
};
interface eth1
{
AdvSendAdvert on;
MaxRtrAdvInterval MAXINTERVAL;
MinRtrAdvInterval MININTERVAL;
AdvCurHopLimit CHLIM;
AdvReachableTime RTIME;
AdvRetransTimer RETRANS;
AdvLinkMTU MMTU;
AdvDefaultLifetime RLTIME;
prefix 3ffe:501:ffff:101::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
AdvValidLifetime VLTIME;
AdvPreferredLifetime PLTIME;
};
};
3)manualaddrconf.rmt需要修改(anycast的部分 linux还没有支持)
4)需要添加mtuconfig.rmt文件
然后保存文件并重新启动机器(reboot)。这时网络接口将会完全自动的根据Rout
er Advertisement配置好自己的IPv6地址。可用ifconfig再次查看,能够看到inet6 xx
xx:xxxx……的字样,表示其IPv6的Link Local Address。
3)串行通信配置(在后面的串行连接设置中具体说明)
二、 TN的配置
(FreeBSD4.5已经集成了对IPv6的支持,所以下面只讲配置TAHI的过程)
1)安装v6eval软件包
1. 解压缩:
执行下列命令
cd $SOMEWHERE (进入包含v6eval包的目录)
tar zxvf v6eval-X.X.tar.gz (X.X指不同的v6eval版本号)
解压缩成功后,在$SOMEWHERE目录下可看到解好的v6eval-X.X目录。
2. 安装perl相关的模块:
系统需要安装以下的软件包
– Perl5
– Expect
– IO-Stty
– IO-Tty
其中除了Perl5是安装盘内带的,其他的软件包都只能够下载
安装方法:
在/usr/ports/lang/p5-Expect目录下执行make install
如果/usr/ports/distfiles/目录里面有对应的软件包,系统将一次性安装好
– Expect、IO-Stty、IO-Tty
如果该目录内没有对应的软件包,系统会自动连接ftp站点并且下载和安装的。在不使用
的代理的情况下,可以在ftp://ftp.kddlabs.co.jp/lang/perl/CPAN/modules/by-modu
le/找到这三个包。(这三个软件包已经下载,备份并且放好在系统制定的安装目录/us
r/ports/distfiles/下以后安装的时候就直接放到/usr/ports/distfiles/就好了)
3. 编译并安装v6eval包
解包后,进入所在目录执行以下的步骤
cd $SOMEWHERE/v6eval-X.X
make
make install(这步需要root权限)
将会将v6eval成功的安装在/usr/local/v6eval目录
然后切换到root或者su权限,安装bpf设备,执行以下步骤:
cd /dev
./MAKEDEV bpf1 bpf2 bpf3 bpf4 bpf5 bpf6 bpf7
===============================================
? 软件配置
需要修改tn.def和nut.def这两个文件,它们均在/usr/local/v6eval/etc目录下。目录
里面还有tn.def.sample和nut.def.sample两个示例文件。通过它们来生成tn.def和nut
..def,方法如下:
用root权限分别执行
cd /usr/local/v6eval/etc
cp tn.def.sample tn.def
cp nut.def.sample nut.def
对配置文件tn.def进行编辑:
vi tn.def
(修改文件内容之前最好将原文件先做一备份,以便能够方便的恢复原始文件内容。对
后面的步骤也是如此。)
这个文件中我们需要进行的改动是:
…
Link0 de0 00:00:00:00:01:00
Link1 de1 00:00:00:00:01:01
… ~~~ 将预设的测试点的设备名称改成实际的设备名称,注意,是TN,也就是运行
测试的机器的网卡的设备名称,该设备名称可以用ifconfig看网卡的设备名称,我们所
使用的测试机的设备名称是vr0,vr1。
同样,对配置文件nut.def进行编辑:
vi nut.def
在文件中需要修改的有:
System —– 要改成被测试机器的类型,这里设为linux-v6
(这里很重要,关系到TN是否能够通过远程登录来重启NUT,
如果不知道具体写什么,可以到/usr/v6eval/bin/目录下去找)
HostName —– 被测试机器的名字
Type —– 被测试机器的类型,这里改为router
User —— 被测机器超级用户的用户名,一般为root
Password —— 超级用户的密码,我们设为csnet1
…
Link0 de0 00:00:92:a7:6d:f5
Link1 de1 00:00:5d:b1:3c:7e
… ~~~ ~~~~~~~~~~~~~~~将预设的被测试点的设备名称和Mac地址改成实际的设
备名称和Mac地址,注意,是被测试点,也就是被测试Ipv6实现的机器的网卡的设备名称
和MAC。我们所使用的网卡设备名为vr0,物理地址可以通过在NUT上执行ifconfig来查看
到。
=================================================
? 运行一些示例:
v6eval包里面不包含IPv6一致性测试的文件,但是它自带了示例(sample)文件,可以运
行一下看看以上的配置是否成功,执行步骤如下:
cd $SOMEWHERE/sample
/usr/local/v6eval/bin/autorun INDEX
然后可以打开生成的index.html文件来察看运行结果。
因为不是正式的测试,所以看到一些“FAIL”字样也没有关系。
(但如果配置成功的话,起码前面几个TEST都应该能够PASS)
2)安装ct包(Conformance Test)
首先,确认v6eval包已经安装完成后,才可以开始安装ct包。
1. 解压缩:
执行 tar zxvf ct-X.X.tar.gz
解压完毕后将会在当前目录下看到解好的ct-X.X目录。
2. 安装ct包:
进入所在目录执行以下的步骤
cd ct-X.X
su
make install
以上步骤将会将v6eval成功的安装在/usr/local/v6eval/ct目录
但是注意不要在这个目录下进行测试。
3. 备份ct包:
把上面的ct目录拷贝到任何一个其他的目录备份起来,执行:
cp -pR /usr/local/v6eval/ct $SOMEWHERE/ct
chmod -R +w $SOMEWHERE/ct
然后在备份目录进行测试。
3)其他配置
(1)删除或者改名/etc/resolv.conf以防止发布影响测试的不必要的分组
(2)修改文件/usr/local/v6eval/etc/tn.def
RemoteDevice 设为 /dev/cuaa0
其他除link0一项外,都可以用tn.def.sample中的默认设置。
Link0 后面必须写明网卡的设备名(vr0)和虚拟的MAC地址(00:00:00:00:01:00)。
另外,为了记录远程登陆的日志,将RemoteLogout的值设为1。这样在测试的过程中
就能看到一些远程登陆过程的信息。
(3)修改文件/usr/local/v6eval/etc/nut.def
System设为linux-v6
HostName 改为NUT的主机名称,如“iut.cs.tsinghua.edu.cn”
Type 是指NUT的类型,这里将NUT配置为router
(这里注意检查一下是否有多余的字符,如空格等,如有应当删掉)
User 改为NUT的超级用户名,一般为root
Password 改为超级用户的密码。
Link0 后面填写网卡的设备名和NUT的MAC地址,例如:
Link0 eth0 00:90:27:14:ce:da(NUT的实际值)
(4) 安装和使用Router Adervertisement Daemon
在RedHat7.3中已经安装好了radvd,可以通过man radvd命令察看更详细的帮助。相
关文件有:
/etc/radvd.conf 这个文件是默认的radvd配置文件,系统启动时会自动按照该文
件的配置启动radvd,这是TAHI系统不希望的,所以测试前将该文件改名。这样系统启动
时就无法自动加载radvd了。
/etc/rc.d/init.d/radvd 这个文件控制radvd的启停操作等,标准内容如下,可作为参
考:
# Location of radvd binary
BINRADVD=”/usr/local/sbin/radvd”
# Location of radvd config file
CONFRADVD=”/etc/radvd.conf”
# Additional RADVD options (see manpage for more details=
OPTIONSRADVD=”” # No additional option
#OPTIONSRADVD=”-d 9″ # Set debug level to 9
# set -x
# Source function library.
. /etc/rc.d/init.d/functions
# Get config.
. /etc/sysconfig/network
# Check that networking is enabled
if [ ! ${NETWORKING} = “yes” ]; then exit 0; fi
# Check that IPv6 networking is enabled
if [ ! ${NETWORKING_IPV6} = “yes” ]; then exit 0; fi
# Check for executable given binary
if [ ! -x $BINRADVD ]; then
echo -e “/a Missing binary ‘$BINRADVD'”
exit 1
fi
# Check for existing configuration file
if [ ! -f $CONFRADVD ]; then
echo -e “/a Missing configuration file ‘$CONFRADVD'”
exit 1
fi
# See how we were called.
case “$1” in
start)
echo -n “Start IPv6-Router Advertisement Daemon”
# Start daemon
daemon $BINRADVD -C $CONFRADVD $OPTIONSRADVD
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/radvd
;;
stop)
echo -n “Stop IPv6-Router Advertisement Daemon”
killproc radvd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/radvd
;;
restart|reload)
$0 stop
$0 start
RETVAL=$?
;;
*)
echo “Usage: radvd {start|stop|restart|reload}”
exit 1
;;
esac
exit $RETVAL
================================================
三、TN和NUT之间的串行连接配置
1.硬配置:
TN和NUT之间用串行对联线
COM1 COM1
TN ——————– NUT
serial line
(Null-modem cable)
串行线接法的示意图如下
1 DCD ********** open ********* 1 DCD
2 RXD ————————- 3 TXD
3 TXD ————————- 2 RSD
4 DTR ————————- 6 DSR
6 DSR ————————- 4 DTR
5 GND ————————- 5 GND
7 RTS ————————- 8 CTS
8 CTS ————————- 7 RTS
9 CE ********** open ********* 9 CE
2.对NUT进行软配置(Red Hat 7.3 –– Kernel 2.4.18-3)
(1)/etc/resolv.conf和/etc/radvd.conf
删除或者改名/etc/resolv.conf以防止发布影响测试的不必要的分组
将radvd.conf改名,以便重新启动机器时不自动开启radvd。
(2)NUT以超级用户root身份登陆,使用的login shell是 /bin/csh,确保可以正常
登陆
(3) /etc/inittab
修改/etc目录下的inittab文件,在其中添加一行:
S0:345:respawn:/sbin/agetty 9600 cua0
保存文件之后,运行init q即可更新。
3.cu命令
要运行cu命令,用超级用户的权限在TN上执行
touch /var/log/aculog
chmod a+rw /var/log/aculog
为检查是否配置成功,可以执行以下指令:
cu -l /dev/cuaa0
如果配置成功,将显示Connected,然后登入NUT机器,提示用户log in。
(注意:要保证/var目录下有一定的剩余空间,否则会提示/var:file system full的信
息,连接始终不成功。删掉一些东西之后问题即可解决。)
为了能够以root身份登录,还需要修改/etc目录下的securetty文件的内容。在其中添加
一行cua0即可,这样TN就可以使用超级用户root的身份登入NUT的系统了。
如果配置不成功,可以更改一下/dev/cuaa0的修改权限设置,如执行
chmod 777 /dev/cuaa0
(另外,这里注意TN中/etc目录下的ttys文件不应当修改,即不应该增加cua
a0那一行。否则会出现错误。)
然后重新启动TN和NUT,这样通过串行口的连接就设置好了。
至此,一切配置完毕,接下来就可以运行ct测试集了,执行如下步骤:
cd $SOMEWHERE/ct
make clean (此命令将会清除原来存在的全部测试结果记录,所以若要保存原来的
结果,应当将该/ct下的内容复制到其他地方然后再进行新的测试)
make test
测试需要几个小时的时间,测试结束后可以在$SOMEWHERE/ct/index.html查看所有测试
的结果。
今天的文章在linux 下配置IPv6和TAHI(router部分)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/68683.html