美文网首页树莓派玩转树莓派webrtc 音视频传输
2020树莓派两种方式搭建ATC网损测试系统

2020树莓派两种方式搭建ATC网损测试系统

作者: yyming | 来源:发表于2020-03-09 22:52 被阅读0次

    ATC介绍

    https://github.com/facebookarchive/augmented-traffic-control

    ATC是一个基于TC的端到端网络数据转发拥塞项目。

    通过利用TC模拟在两个网卡之间的数据延时、丢包、抖动等网络模型。

    python-django是一个框架,用于atc交互用的。

    树莓派介绍

    image

    树莓派就是一个嵌入式linux设备,装好系统就是一台五脏俱全的pc主机,就是性能差了点,最新版本的raspiberry 4B 最高配置可选4GB内存的,性能据说是pi3b+的3倍。对比路由器,其性能还是强很多的。

    树莓派硬件接口介绍

    最新的pi4B 有一个千兆网口,一个type-c电源接口,两个4k级别的hdmi口,一个音频输出口,两个usb3.0口,两个usb2.0口,一组24pin的gpio口,有很强的拓展性,还有一个连接相机的csi口,无线连接方面,高性能蓝牙,双频wifi。整体来说树莓派4B对比3B升级挺多的,也挺值得买的。

    网络拓扑图介绍

    有两种搭建模式,如果想用树莓派发射热点并使用wifi接入,可以只用一根网线连接。

    第二种模式是通过在树莓派增加一个USB网卡,随后用有线USB网卡连接路由器,路由器当作交换机使用,拓展树莓派的网口和wifi,测试树莓派的wifi性能没有路由器好。所以这种设置模式比较适合距离wifi较远的使用场景。


    一图胜千言,这个图要仔细看,认真看!!

    AP热点模式ATC搭建教程

    第一步,进入系统中设置本地lcoal为china,不然热点频段不符合国内要求,其他设备连接的时候会出现断联的情况。

    随后按照以下教程安装一键热点开启脚本

    #全部使用root权限
    #将代码copy到本地,安装 全部使用root权限
    git clone https://github.com/oblique/create_ap
    cd create_ap
    make install
    
    #安装依赖的库
    apt-get install util-linux procps hostapd iproute2 iw haveged dnsmasq
    
    #执行命令
    
    #创建WiFi热点(GitHub上有多种方式创建,可以查找自己需要的那种)
    sudo create_ap wlan0 eth0 热点名 密码
    
    #开机启动
    将 'sudo create_ap wlan0 eth0 热点名 密码 & ' 添加到/etc/rc.local文档中,即可开机启动
    

    安装ATC脚本

    https://github.com/facebookarchive/augmented-traffic-control 官网根据官网安装和配置,在配置settings.py文件时增加ALLOWED_HOSTS修改 ,允许所有ip使用ATC。

    ALLOWED_HOSTS = ['*'] 
    

    随后就是创建启动脚本:(脚本路径和名字: /home/pi/atcui/autoShell.py )

    sudo nano /home/pi/atcui/autoShell.py
    #写入以下内容
    
    # coding: UTF-8
    import sys
    import time
    reload(sys)
    sys.setdefaultencoding('utf8')
    import subprocess
    import os
    import commands
    
    #os.system('cmd1 && cmd2')
    startAP = "sudo create_ap wlan0 eth0 pi33 12345678  &"
    runAtcServer = "sudo python /home/pi/atcui/manage.py runserver 0.0.0.0:8000"
    startAtcInit = "sudo atcd --atcd-wan eth0  --atcd-lan eth1"
    
    subprocess.Popen(startAP, shell=True)
    time.sleep(10)
    subprocess.Popen(runAtcServer, shell=True)
    time.sleep(10)
    subprocess.Popen(startAtcInit, shell=True)
    #subprocess.call(cmd,shell=True)
    

    设定自启动,在etc/rc.local文件添加

    python /home/pi/atcui/autoShell.py &
    

    随后愉快地重启: sudo reboot

    重启后,连接wifi,进入192.168.12.1:8000 网址后就可以看到熟悉的atc页面了。

    路由桥接模式ATC搭建教程

    把树莓派和路由器的wan口用有线连接在一起,路由器关闭dhcp服务器功能。树莓派通过自带的网口和外网连接。

    参考这位台湾小友设置ap的方式去设置有线路由模式

    首先,将目前已经安裝的软件都先更新到最新。

    sudo apt update
    sudo apt upgrade
    

    安装对应的软件dnsmasq,用于解析dns

    sudo apt install dnsmasq -y
    

    停用对eth1 (usb有线网卡) 的DHCP客户端ip分配,设定固定ip。

    sudo nano /etc/dhcpcd.conf
    #编辑dhcpd.conf文件,在最后输入下文,随后保存,eth1是你作为lan口(usb网卡)的网卡名称,可以在ifconfig命令中查看
    #这里采用的ip段192.168.7.xxx不要和你的wan口ip相同,防止发生冲突。
    interface eth1
    static ip_address=192.168.7.1/24
    static routers=192.168.7.1
    static domain_name_servers=8.8.8.8
    

    设置dns

    sudo nano /etc/dnsmasq.conf
    # 设定dns内容,在此文件中输入下文,随后保存,eth1是网卡名称,dhcp-range是设定可用ip范围,一般是除了网口ip(上文设置的static routers)以外, .2到.253都设置为可分配ip,24h是指此ip刷新周期为24小时。
    interface=eth1
    domain-needed
    bogus-priv
    dhcp-range=192.168.7.2,192.168.7.253,24h
    

    设定IP转发策略,用于wan口和lan口不同网卡不同网段之间的数据转发。

    sudo nano /etc/sysctl.conf
    net.ipv4.ip_forward=1
    #开启ipv4转发功能
    #退出文件并保存
    #持续输入以下命令用于IP转发:
    sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
    #随后保存上述指令并设为开机自动运行
    sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
    sudo nano /etc/rc.local
    #在开机自启动文件rc.local中写入以下命令:
    sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
    iptables-restore < /etc/iptables.ipv4.nat
    
    

    随后又到了喜闻乐见的重启环节:

    sudo reboot
    

    重启后设备连接到usb网卡上就可以自动获取ip,并可以正常上网了。如果重启后不能正常上网,请排查问题后再往下走。

    随后是按照ATC,步骤和注意事项已经在上一个模式中给出,这里就不重复了,但是在编写rc.local文件时,启动atc的脚本要最后再运行,且脚本autoShell.py 要修改成下面这样子,就是删除AP开启指令。

    # coding: UTF-8
    import sys
    import time
    reload(sys)
    sys.setdefaultencoding('utf8')
    import subprocess
    import os
    import commands
    
    #os.system('cmd1 && cmd2')
    #startAP = "sudo create_ap wlan0 eth0 pi33 12345678  &"
    
    runAtcServer = "sudo python /home/pi/atcui/manage.py runserver 0.0.0.0:8000"
    startAtcInit = "sudo atcd --atcd-wan eth0  --atcd-lan eth1"
    
    #subprocess.Popen(startAP, shell=True)
    time.sleep(10)
    subprocess.Popen(runAtcServer, shell=True)
    time.sleep(10)
    subprocess.Popen(startAtcInit, shell=True)
    #subprocess.call(cmd,shell=True)
    

    设置完atc重启后,连接路由器lan口或者连接路由器wifi,进入192.168.7.1:8000 网址后就可以看到熟悉的atc页面了。

    相关文章

      网友评论

        本文标题:2020树莓派两种方式搭建ATC网损测试系统

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