纯属个人经验, 只供参考, 如有不当,敬请指正
搭建广域网模拟器nistnet. 2.0.12 步骤
1. 下载nistnet:nistnet有b(2.4.xx以下版本) 和 c(2.6.xx)版本, 我们目前使用的都是 2.4.20 或者2.4.32内核, 所以用b版本
2. 根据nistnet要求编译内核, (可以试试直接安装是否可以,如果能直接安装最好)
cd linux-source-src
make mrproper
make menuconfig
一般我们装的都是redhat 9.0, 建议采用机器上原装的redhat的代码进行编译,有许多编译选项redhat基本都覆盖了。
如果使用来路不明的内核代码, 搞不好缺这个缺那个,非常的麻烦。如果非得要使用其他的内核代码,下面几项一定要选上
文件系统支持ext2, ext3, 支持iptables, 支持你的网卡的驱动(安装模拟器的那台机器肯定是双网卡以上)。
对于nistnet要额外加上:
Loadable module support -->
Set version information on all module symbols --off
Character devices -->
Enhanced Real Time Clock Suppot --M /*按M键,设置这两项*/
这里M表示将编成模块,也就是不编进内核的,可以insmod的
*表示编进,空白表示不编
make dep
make clean
make bzImage
make modules
make modules_install
会在/lib/modules/linux版本号/ 下面生成所需要加载的模块, 比如你的网卡起不来,是Reltak8139, 可以到这里去看看8139too.o和8139tcp.o的驱动是否存在
下面可以选择make install这种懒人方式,不过redhat下有些时候某些版本make install有点问题
也可以自己手工来完成:
1. cp $linux-source-src/arch/i386/boot/bzImag /boot/vmlinuz-2.xxxx
2. cp $linux-source-src/System.map /boot/System.map-2.xxxx
3. cd /boot, 然后删除以前的System, vmlinuz的软连接
4. 建立新的软连接
ln -s vmlinuz-2.xxxx vmlinuz
ln -s System.map-2.xxxx System.map
5. 制作img, 貌似IDE硬盘不需要, scsi的必须制作
mkinitrd /boot/initrd-2.xxxx.img 2.xxxx
6. 修改grub
备份以前的grub
cd /boot/grub
cp grub.conf grub.conf.bak
vi grub.conf
添加如下3行, 这里一定要保存以前的内核配置,否则起不来的话,只能在grub界面上用按"e"键手工修改grub来加载正常的内核,非常的麻烦
title Red Hat Linux (2.xxxx)
root (hd0,0)
kernel /vmlinuz-2.xxxx ro root=LABEL=/ /* 注意这里如果写成LABEL, 启动的时候提示kernel panic:VFS Unable to mount root fs on 00:00就要将root=修改为/dev/hd*的形式 */
initrd /initrd-2.xxxx.img
7. reboot
如果内核可以成功启动,并且网卡也能够起来, 下来就需要配置网络环境了
最简单的一种配置方式:
CLINET 1<------>NISTnet<------>CLINET 2
比如:
主机名 所在网段 分配IP 网关
CLINET 1: 192.168.2.0/24 192.168.2.2/24 192.168.2.1
NISTnet: 192.168.2.0/24 eth1:192.168.2.1/24 eth0
192.168.1.0/24 eth0:192.168.1.1/24 eth1
CLINET 2: 192.168.1.0/24 192.168.1.2/24 192.168.1.1
但是这种模式的可用性极差, 不能接入我们的内部使用网络
使用NAT方式可以解决该问题
组网:
Clinet1 ß--------------à 模拟器 ß---------à 内部的200.200.30网络
步骤如下:
配置eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR=200.200.30.121
NETMASK=255.255.255.0
USERCTL=no
PEERDNS=no
GATEWAY=200.200.30.254
TYPE=Ethernet
NETWORK=200.200.30.0
BROADCAST=200.200.30.255
配置eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
IPADDR=100.100.30.121
NETMASK=255.255.255.0
USERCTL=no
PEERDNS=no
GATEWAY=200.200.30.121
TYPE=Ethernet
NETWORK=100.100.30.121
BROADCAST=100.100.30.255
开启ip转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
添加NAT规则
iptables -t nat -A POSTROUTING -s ${ipsegment} -o ${netcard} -j SNAT --to-source ${ipaddress}
这里的${ipsegment}就是client1所在的网段
${netcard}这里是100.100.30.网段的eth0
例如:
Clinet1 100.100.30.21 / 255.255.255.0
iptables -t nat -A POSTROUTING -s 100.100.30.0/24 -o eth0 -j SNAT --to-source 200.200.30.121
测试一下:
Ping 200.200.30.22, 不通,重启一下iptables, service iptables restart, 再添加上面的NAT规则,
在ping 就应该通了
现在安装NISTnet, 各个不同版本的Linux 注意看read me
安装NISTNET
cd ~./nistnet
./configure
make
make install /*安装完成,如果没有错误就下一步*/
(3)测试安装是否成功
cd ~./nistnet
./Load nistnet
cnistnet –u /*加载模块*/
具体使用参见安装包中的doc文档
来吧, 来感受一下模拟器
添加延迟100毫秒
Cnistnet –a 100.100.30.21 200.200.30.22 –delay 100
终于搭建成功了