A software package of OpenWrt that can help you to build a perfect weak network environment. (一个方便搭建并配置完美弱网测试环境的软件包。)
因业务需求,笔者需要搭建一个弱网环境,来测试设备在弱网环境下的表现。现在已有一些弱网模拟工具,微软有Network Emulator for Windows Toolkit(NEWT),Facebook有Augmented Traffic Control(ATC),这些方式要么是通过代理,要么就是只能实现wifi丢包,我们需要模拟网口的丢包,因此只能借助于开源的OpenWrt linux系统,调用其tc命令来控制流量,实现丢包、传输延时等。
dist
目录是笔者编译好的软件包和已经带弱网包的极壹和极三的固件。luci-app-weaknetwork_1.0-1_all.ipk
弱网模拟软件包与硬件无关,理论上带有netem工具的OpenWrt系统都可以正常安装使用。
openwrt-build-base.zip
包含了极壹和极三的编译基础包,已经配置好,加入了弱网包,make menuconfig之后再make就行(会下载其它依赖)。
前提条件:路由器固件需要支持netem工具,若安装软件包后操作无效,可以尝试方式二(编译固件)
a) 方式1:在OpenWrt Web管理页面中安装
//需要在系统 --> 软件包 --> 配置,添加包的配置信息,暂时不可用
b) 方式2:使用ssh安装
scp luci-app-weaknetwork.ipk [email protected]:/tmp/uci-app-weaknetwork.ipk
进入ssh:
cd /tmp
opkg update
opkg install uci-app-weaknetwork.ipk
sudo apt-get install libncurses5-dev zlib1g-dev gawk flex patch git-core g subversion
2. 把luci-app-weaknetwork
文件夹整体复制到你的固件包/openwrt-ar71xx/package
目录下,若没有这个目录,就是你的固件包/openwrt-ramips/package
下,总是就是OpenWrt存放package软件包的地方。
修改固件包目录下的一个config-xxx
的文件(更建议在menuconfig里面修改)并取消前面的注释符:
CONFIG_PACKAGE_kmod-netem=y
CONFIG_PACKAGE_kmod-sched-core=y
CONFIG_PACKAGE_kmod-sched=y
进入固件包下执行上述命令,看有没有LuCI相关配置,如果没有的话,需要更新一下:
a) 更新openwrt包(luci包等)
./scrips/feeds update -a
./scrips/feeds install -a -p
也可以只更新luci包:
./scripts/feeds update packages luci
./scripts/feeds install -a -p luci
b) 之后按如下方式配置下:
Target System (x86)
Subtarget (Generic)
Target Profile (Generic)
Target Image -->
< > jffs2
< > squashfs
< > tgz
<* > Build VMware image files (VMDK). Requires qemu-img
Network -->
<*> uhttpd
LuCI -->
Collections -->
< * > luci
Applications-->
<* > luci-app-ddns
<* > luci-app-firewall
<* > luci-app-ntpc
<* > luci-app-samba
Themes-->全选
Translations -->
<* > luci-i18n-chinese
c) 进入LuCI --> Applications --> luci-app-weaknetwork
,选中
d) 进入Network --> WebServers/Proxies --> pdnsd
,一个dns代理服务器,取消该项的选中,可能是由于要翻墙的原因,笔者这里不取消编译不能通过
命令行输入make V=99
(编译时显示详细信息)
scp recovery.bin [email protected]:/tmp/recovery.bin #拷贝你的固件到此
cd /tmp
sysupgrade -F -n recovery.bin
重启,完成!
注:带宽限制需要内核支持CBQ队列,若带宽限制设置无效,可能是当前的内核不支持。
更多相关内容可以查看笔者的博客。