弱网测试环境在软路由上搭建 软路由安装原生openwrt系统,使用tc和netem模拟弱网环境

本文记录一下 解决在软路由上模拟弱网环境的血和泪,花了一天的时间,解决了各种问题

针对于要对流量分析,特别是弱网环境,例如需要增量增大延时、定量丢包的同学 环境搭建的问题

目前看到的只有在虚拟或者主机环境下去做这个的,都是模拟,这次是在真实的网络中,在一台软路由设备上进行部署。

 

先说一下几个东西吧:

软路由,就是一台专门做路由和转发的小主机(也可以用闲置的笔记本电脑当软路由),基于各种linux系统。例如很火的LEDE和IKUAI,懂软路由的小伙伴一定知道这个

OpenWRT,一个高度模块化、高度自动化的嵌入式Linux系统,拥有强大的网络组件和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由器以及VOIP设备中。而且有非常多的软件支持,可以自动化的生成很多功能,打包成不同的的定制版本固件。

LEDE就是基于OpenWRT的一个分支,国内著名的koolshare论坛,也是几位大神基于LEDE开发的软件中心,非常方便。

tc,Linux内核内置了一个TC(Traffic Control)框架,可以实现流量限速,流量整形,策略应用(丢弃,NAT等)。

netem,是linux内核提供的Network emulation服务,可以用来模拟广域网下的延迟、丢包、重复、损坏和乱序等问题。2.6版本后的linux发行版都已经在内核中启用了netem。

tc 可以用来控制 netem 的工作模式,也就是说,想要使用 netem ,则需要内核开启了 netem,而且安装了 tc工具。

 

我为什么要在软路由上做这个:

这里主要还是因为项目需要,需要研究存在很大延时和丢包的质差场景对应用和服务质量的影响,所以需要定点定量的对数据包转发进行控制

tc和netem就可以做到这点,可以对每张网卡做到控制。

例如:

qdisc add dev eth3 root netem loss 30%

增加eth3网卡随机丢包30%,pingbaidu看下效果:

弱网测试环境在软路由上搭建 软路由安装原生openwrt系统,使用tc和netem模拟弱网环境

qdisc add dev eth3 root netem delay 100ms

增大 eth3网卡上100ms延时,pingbaidu看下效果:

弱网测试环境在软路由上搭建 软路由安装原生openwrt系统,使用tc和netem模拟弱网环境

 弱网测试环境在软路由上搭建 软路由安装原生openwrt系统,使用tc和netem模拟弱网环境

 我的软路由以前刷的是LEDE的固件,然后我想办法装了那个版本内核的kmod-netem,但是一旦使用就会导致路由器系统崩溃重启。应该是这个疯狂乱改的固件系统会自动检测运行状态,发现异常就导致了重启。

然后我又刷了一边ikuai的固件上去,ikuai太坑了,后台都不给进,毕竟是公司的产品,也不开源。所以就有了装原生openwrt 的需求,接下来就比较顺利了,上面都是踩过的坑。

 

安装原生openwrt系统,使用tc和netem:

先去下载官方的固件,给大家个地址吧http://archive.openwrt.org/releases/18.06.1/targets/x86/64/,

第一个是直接写入SSD的,第二个是可以用来升级的,我用的老毛桃PE写入的,下的是第二个,其实都可以。

弱网测试环境在软路由上搭建 软路由安装原生openwrt系统,使用tc和netem模拟弱网环境

然后用老毛桃写入解压后的img文件到软路由的固态硬盘,启动,openwrt原生的系统就算装好了。

电脑设置固定ip192.168.1.2,子网掩码255.255.255.0 就可以访问控制界面了,192.168.1.1,初始密码是admin

弱网测试环境在软路由上搭建 软路由安装原生openwrt系统,使用tc和netem模拟弱网环境

 

 在网络-接口的地方,自己配置一下,然后软路由功能就算实现了。我当与遇到了一个在后台可以ping通百度,但是电脑上不了外网的情况,然后看了一下是只设置了IP,没手动设置dns,我在把ip和dns设置为主动获取就可以了。

以上原生的openwrt就算刷好了,系统-管理权的地方可以设置ssh,就可以使用ssh通过192.168.1.1对路由器后台访问了。

我这里把luci汉化了一下,就是这个web页面汉化了。就是在后台运行:opkg install luci-i18n-base-zh-cn,可能需要先opkg update。

安装tc和netem:

linux2.6都自带tc和netem,但是有些很轻量级的linux就没,比如这个原生的openwrt18.06.01

安装方法就非常简单了

直接 opkg install tc 就可以了,netem在本版本下是自带的内核模块。

不行的也可以opkg install kmod-netem 一下。

 

然后就大功告成了!真的很简单,给专门的运维人员来做,半小时就弄好了。

 

 

 

 

上一篇:需要增加OpenWRT中IPC消息队列的缓冲区


下一篇:教程二 网页和lua交互修改openwrt