Dummynet 安装配置
DummyNet 是 FreeBSD 的内部系统工具,需要在安装 FreeBSD 系统后重新安装编译内
核。该工具是内核级别的 IP 包处理工具。该工具可以模拟包的丢失、包的延时……(仓促
间仅试验了 drop & delay,但相信功能远多于此)。该工具是配合 FreeBSD 自带的防火墙 ipfw
使用的。
第一部分:简单的介绍安装
1、FreeBSD 系统的安装:
(1,2,3,……,系统的安装过程省略)
2、dummynet 安装:
我在 FreeBSD8.1 下面 的安装最 简单的 方法是通 过以 root 身份 运行 sysinstall , 选择
Configure, 然后是 Distributions、 src,选中其中的 base 和 sys
3、接下来配置内核(因为要编译内核,过程比较慢 very very )
内核文件默认路径 /usr/src/sys/i386/conf
A、在文件 GENERIC 中,所以需要先 copy 一份
# cd /usr/src/sys/i386/conf
# cp GENERIC dummynet-GENERIC
B、再编辑 dummynet-GENERIC 文件,添加以下几行
options IPFIREWALL #在内核中添加防火墙支持
options DUMMYNET #启用 dummynet
options IPFIREWALL_DEFAULT_TO_ACCEPT #把防火墙设置为默认接收包
C、配置内核
# config dummynet-GENERIC
D、编译内核
根据提示的路径进入,执行提示的相关命令
# cd ../compile/dummynet-GENERIC
# make cleandepend
# make depend
# make (此时可以去休息了,过程灰常滴慢,俺在虚拟机编译了超过 1 个小时)
# make install
E、reboot 重启系统,让新内核生效
检验内核中是否已经添加了防火墙,查看 net.inet.ip.fw.enable 的值
# sysctl net.inet.ip.fw.enable
net.inet.ip.fw.enable:1
#
结果为 1 表明已经添加成功,并且防火墙已经启用
第二部分:简单举例(本处需要使用 ipfw 规则,偶也不熟,找手册吧)
1、 清除所有规则,看默认的网络情况
# ipfw -f flush
本例通过 ping 网关看到网络基本正常,丢包率 0.0%,平均延迟 3.257ms (进、出来回,
单向就是 1.6ms)
2、 设置延迟和丢包
设置所有上行 icmp 协议的 ip 包延迟 100ms 丢包率 40%
通过 ping 网关看丢包率在 46.5%,平均延迟 106.581ms(单向 out,如果双向则在 210ms
所有)
3、 设置延迟
让所有通过网卡的 ip 包都延迟 500ms(包含进、出)
通过 ping 网关看,丢包率在 0.5%,平均延时 1002.87ms(进、出双向,单向则为 500ms 左
右)
第三部分:结论
通过以上实验看,在有线网络环境下 dummynet 基本上可以模拟丢包、延时等,需要结合
ipfw 使用,但是是否能够作为第三方去控制别的 IP 地址间的带宽或者控制无线网络,结果
未知。