Facebook ATC弱网环境搭建

本文记录如何利用Facebook ATC使用搭建一个弱网环境,与前一篇Dash net(网速控制,可变)类似,但是这个弱网环境不能动态变化,相比DASH_NET好处在可以连接多个设备,分别控制网速

为了更方便的配置环境,写了一个python脚本,建议阅读完本文后参考脚本进行配置.

工具简介

ATC是FaceBook开源的移动网络测试工具Augmented Traffic Control(ATC),能够方便的让我们模拟各种网络环境进行测试。

ATC有两个最吸引人的特点:

在手机上通过Web界面就可以随时切换不同的网络环境。
多个手机可以连接到同一个WIFI下,相互之间模拟的网络环境各不影响。

只要搜索facebook ATC就可以找到很多关于ATC环境搭建的文章,比如说FaceBook ATC 弱网测试工具环境搭建,我总结了一下,主要分以下几个步骤:
1.安装hostap。hostap的主要作用是将无线网卡作为一个分享的热点。
2.安装isc-dhcp-server。这是一个dhcp服务器,连上热点的手机通过dhcp服务器获取ip,进而才能通过网关上网。
3.设置NAT转发。简单来说就是把一个可以上网的网卡流量转发到分享热点的网络。
4.安装ATC。这是控制网速的主要部件,具体原理我了解的也不是很深。
5.安装python web服务器。这是供用户设置网速的界面,我想ATC用python web原因可能是python操作系统的东西更擅长些,虽然python在web方面没有什么优势。

搭建步骤

本文搭建环境,联想thinkcertre 8300t(只有一个有线网卡的台式机)装有ubuntu16.04LTS,tplink wr886n(路由器可以不一样,只有要支持交换机模式(ap模式)就可以),一个有线的usb网口(用来连接电脑和路由器)

使用路由器代替无线网卡

因为这里想用路由器来代替主机的无线网卡,所以第一步不需要去配置,也可以不用安装hostap。

整个环境配置过程基本都需要root权限,可以通过命令sudo su切换到root用户,但是在这里个人建议不要这样,在命令前加sudo来执行就行了。

(1,2,3,4步骤是为了使路由器像主机的无线网卡那样使用)
1.将路由器设置成交换机模式,不同路由器设置方式不一样

1)wr886n只要在设置里面把dhcp功能关闭就行,现在就已经是交换机模式了
2)更改路由器lan口的ip地址,使其不为网关地址,在lan口设置中,lan口ip设置改为手动,ip我改的是192.168.1.10(一般网关地址会设置成192.168.1.1),子网掩码为255.255.255.0
3)用usb网口连接电脑与路由器,网线连接的是路由器的lan口(注意不能连wan口)
4)连上后执行ifconfig,可以查看电脑是否连上路由器
我的输出有eno1,enx00e04c360211,lo(eno1是主机已有的网络接口,enx00e04c360211是usb接口,lo不用管)

2.安装dhcp
sudo apt-get install isc-dhcp-server(这一步要将与路由器连接的网线断开,保证电脑能正常联网下载安装)
此时执行sudo dhcpd,如果输出了命令详解则说明安装成功
像我的会报can't open /var/lib/dhcp/dhcpd.leases for append,这种错误
我google了一下,说是16.04中dhcp的bug,说是修复了,但是我的没有

执行ls -l /var/lib/dhcp/dhcpd.leases
如果没有该文件就新建该文件,如果有看看权限,需要是可写的,关机后启动可能有没有权限了,需要从这步开始检查
执行chmod 777 /var/lib/dhcp/dhcpd.leases
更改完权限执行sudo dhcpd,应该没有报错了

3.执行下面命令查看本机DNS,后续配置需要使用

sudo nmcli dev show | grep IP4

在输出中,IP4.DNS后面的是DNS地址

4.配置dhcpd
dhcpd的配置文件是/etc/dhcp/dhcpd.conf
在终端执行

1)sudo vim /etc/dhcp/dhcpd.conf
在文件最后输入以下内容:

subnet 192.168.1.0 netmask 255.255.255.0
{
  range 192.168.1.2 192.168.1.10;
  option routers 192.168.1.1;
  option domain-name-servers 10.210.97.123,10.210.97.21;#这里就是填看看查看的DNS地址,我有多个,所以我都写上了,用逗号隔开
}

注意:在subnet里定义的网段要与网卡IP所处网段一致(这个网卡指的是usb那个连接路由器的接口),而这个网卡ip我们后面会进行设置(将其设置成192.168.1.1,即当作网关使用)
2)sudo vim /etc/default/isc-dhcp-server
将文件的INTERFACES=""行改为INTERFACES="enx00e04c360211"
看注释,这行意思就是,写出dhcp server要进行ip分配的网口,这里就是连接usb的那个网口

5.设置enx00e04c360211(usb接口的ip)

sudo ifconfig enx00e04c360211 192.168.1.1 netmask 255.255.255.0

6.启动dhcp-server
执行下面命令(我电脑没有dhcp-server文件夹,我自己新建了一个,然后执行的下面命令)

sudo touch /var/run/dhcp-server/dhcpd.pid
sudo chmod 777 /var/run/dhcp-server/dhcpd.pid
sudo dhcpd enx00e04c360211 -pf /var/run/dhcp-server/dhcpd.pid

然后执行sudo netstat -uap
当显示在program name列显示dhcp时表示dhcp服务安装配置启动成功

7.IP转发
网上有两种方法

  • 执行sudo bash -c "echo 1 >/proc/sys/net/ipv4/ip_forward"
  • 在文件/etc/sysctl.conf中,取消这一行的注释:
    net.ipv4.ip_forward= 1
    然后执行使之立即生效
    sudo sysctl -p
    我两种方式都执行了
    8.设置NAT(eno1为连接internet的网卡,enx00e04c360211为usb网卡用于连接路由器)
sudo iptables -F
sudo iptables -X 
sudo iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE 
sudo iptables -A FORWARD -i eno1 -o enx00e04c360211 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i enx00e04c360211 -o eno1 -j ACCEPT

到这里路由的NAT功能已经被启用,我们将刚才配置的iptables保存下来以便于下次使用:

sudo bash -c "iptables-save > /etc/iptables.ipv4.nat"

编辑
/etc/network/interfaces
然后在最后加上下面这行以使每次启动都自动加载iptables配置:
up iptables-restore < /etc/iptables.ipv4.nat

安装atc

  1. 首先使用git clone https://github.com/facebook/augmented-traffic-control.git拉取仓库代码
  2. sudo apt-get install python-pip(因为ubuntu16.04自带的是python2.7,所以不用另外安装python了)
  3. 复制git的安装方法sudo pip install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage
  4. 但是这样安装django的版本不一定是1.10的,(python -m django --version,查看安装的版本)
    1)要执行sudo pip uninstall django卸载之前安装的django
    2)然后执行sudo pip install django==1.10,安装1.10版本的django
  5. cd进入拉下来的atc仓库
  6. django-admin startproject atcui
  7. cd atcui
  8. 修改atcui/settings.py文件,在INSTALLED_APPS中添加下列代码
INSTALLED_APPS = (
    ...
    # Django ATC API
    'rest_framework',
    'atc_api',
    # Django ATC Demo UI
    'bootstrap_themes',
    'django_static_jquery',
    'atc_demo_ui',
    # Django ATC Profile Storage
    'atc_profile_storage',
)
  1. 修改atcui/urls.py文件,添加如下代码
...
...
from django.views.generic.base import RedirectView
from django.conf.urls import include

urlpatterns = [
    ...
    # Django ATC API
    url(r'^api/v1/', include('atc_api.urls')),
    # Django ATC Demo UI
    url(r'^atc_demo_ui/', include('atc_demo_ui.urls')),
    # Django ATC profile storage
    url(r'^api/v1/profiles/', include('atc_profile_storage.urls')),
    url(r'^$', RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
]
  1. sudo atcd --atcd-wan eth0 --atcd-lan eth1 --atcd-dont-drop-packets(其中eth0代表电脑的输入网卡名,eth1代表输出网卡名)
  2. python manage.py runserver 0.0.0.0:8000
    *到这步手机连上wifi,网页打开192.168.1.1:8000就可以控制调节网速了
  3. 执行utils/restore-profiles.sh localhost:8000在网页中有fb提前设置好的一些例子

运行完atc后,会将之前的配置存储在/var/lib/atcd.db文件里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,332评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,930评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,204评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,348评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,356评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,447评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,862评论 3 394
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,516评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,710评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,518评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,582评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,295评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,848评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,881评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,121评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,737评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,280评论 2 341

推荐阅读更多精彩内容