美文网首页网络
Facebook ATC弱网环境搭建

Facebook ATC弱网环境搭建

作者: ce0b74704937 | 来源:发表于2018-05-23 17:32 被阅读0次

    本文记录如何利用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文件里

    相关文章

      网友评论

        本文标题:Facebook ATC弱网环境搭建

        本文链接:https://www.haomeiwen.com/subject/fbxdjftx.html