ATC介紹
https://github.com/facebookarchive/augmented-traffic-control
ATC是一個(gè)基于TC的端到端網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)發(fā)擁塞項(xiàng)目佩谷。
通過利用TC模擬在兩個(gè)網(wǎng)卡之間的數(shù)據(jù)延時(shí)、丟包、抖動(dòng)等網(wǎng)絡(luò)模型。
python-django是一個(gè)框架,用于atc交互用的涩禀。
樹莓派介紹
樹莓派就是一個(gè)嵌入式linux設(shè)備,裝好系統(tǒng)就是一臺(tái)五臟俱全的pc主機(jī),就是性能差了點(diǎn)羔沙,最新版本的raspiberry 4B 最高配置可選4GB內(nèi)存的,性能據(jù)說是pi3b+的3倍厨钻。對(duì)比路由器扼雏,其性能還是強(qiáng)很多的坚嗜。
樹莓派硬件接口介紹
最新的pi4B 有一個(gè)千兆網(wǎng)口,一個(gè)type-c電源接口诗充,兩個(gè)4k級(jí)別的hdmi口苍蔬,一個(gè)音頻輸出口,兩個(gè)usb3.0口蝴蜓,兩個(gè)usb2.0口碟绑,一組24pin的gpio口,有很強(qiáng)的拓展性茎匠,還有一個(gè)連接相機(jī)的csi口格仲,無線連接方面,高性能藍(lán)牙诵冒,雙頻wifi凯肋。整體來說樹莓派4B對(duì)比3B升級(jí)挺多的,也挺值得買的汽馋。
網(wǎng)絡(luò)拓?fù)鋱D介紹
有兩種搭建模式侮东,如果想用樹莓派發(fā)射熱點(diǎn)并使用wifi接入,可以只用一根網(wǎng)線連接豹芯。
第二種模式是通過在樹莓派增加一個(gè)USB網(wǎng)卡苗桂,隨后用有線USB網(wǎng)卡連接路由器,路由器當(dāng)作交換機(jī)使用告组,拓展樹莓派的網(wǎng)口和wifi煤伟,測(cè)試樹莓派的wifi性能沒有路由器好。所以這種設(shè)置模式比較適合距離wifi較遠(yuǎn)的使用場(chǎng)景木缝。
一圖勝千言便锨,這個(gè)圖要仔細(xì)看,認(rèn)真看N业放案!
AP熱點(diǎn)模式ATC搭建教程
第一步,進(jìn)入系統(tǒng)中設(shè)置本地lcoal為china矫俺,不然熱點(diǎn)頻段不符合國內(nèi)要求吱殉,其他設(shè)備連接的時(shí)候會(huì)出現(xiàn)斷聯(lián)的情況。
隨后按照以下教程安裝一鍵熱點(diǎn)開啟腳本
#全部使用root權(quán)限
#將代碼copy到本地厘托,安裝 全部使用root權(quán)限
git clone https://github.com/oblique/create_ap
cd create_ap
make install
#安裝依賴的庫
apt-get install util-linux procps hostapd iproute2 iw haveged dnsmasq
#執(zhí)行命令
#創(chuàng)建WiFi熱點(diǎn)(GitHub上有多種方式創(chuàng)建友雳,可以查找自己需要的那種)
sudo create_ap wlan0 eth0 熱點(diǎn)名 密碼
#開機(jī)啟動(dòng)
將 'sudo create_ap wlan0 eth0 熱點(diǎn)名 密碼 & ' 添加到/etc/rc.local文檔中,即可開機(jī)啟動(dòng)
安裝ATC腳本
去 https://github.com/facebookarchive/augmented-traffic-control 官網(wǎng)根據(jù)官網(wǎng)安裝和配置铅匹,在配置settings.py文件時(shí)增加ALLOWED_HOSTS修改 押赊,允許所有ip使用ATC。
ALLOWED_HOSTS = ['*']
隨后就是創(chuàng)建啟動(dòng)腳本:(腳本路徑和名字: /home/pi/atcui/autoShell.py )
sudo nano /home/pi/atcui/autoShell.py
#寫入以下內(nèi)容
# 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 wlan0"
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)
設(shè)定自啟動(dòng)包斑,在etc/rc.local文件添加
python /home/pi/atcui/autoShell.py &
隨后愉快地重啟: sudo reboot
重啟后流礁,連接wifi涕俗,進(jìn)入192.168.12.1:8000 網(wǎng)址后就可以看到熟悉的atc頁面了。
路由橋接模式ATC搭建教程
把樹莓派和路由器的wan口用有線連接在一起神帅,路由器關(guān)閉dhcp服務(wù)器功能再姑。樹莓派通過自帶的網(wǎng)口和外網(wǎng)連接。
參考這位臺(tái)灣小友設(shè)置ap的方式去設(shè)置有線路由模式
首先找御,將目前已經(jīng)安裝的軟件都先更新到最新询刹。
sudo apt update
sudo apt upgrade
安裝對(duì)應(yīng)的軟件dnsmasq,用于解析dns
sudo apt install dnsmasq -y
停用對(duì)eth1 (usb有線網(wǎng)卡) 的DHCP客戶端ip分配萎坷,設(shè)定固定ip凹联。
sudo nano /etc/dhcpcd.conf
#編輯dhcpd.conf文件,在最后輸入下文哆档,隨后保存蔽挠,eth1是你作為lan口(usb網(wǎng)卡)的網(wǎng)卡名稱,可以在ifconfig命令中查看
#這里采用的ip段192.168.7.xxx不要和你的wan口ip相同瓜浸,防止發(fā)生沖突澳淑。
interface eth1
static ip_address=192.168.7.1/24
static routers=192.168.7.1
static domain_name_servers=8.8.8.8
設(shè)置dns
sudo nano /etc/dnsmasq.conf
# 設(shè)定dns內(nèi)容,在此文件中輸入下文插佛,隨后保存杠巡,eth1是網(wǎng)卡名稱,dhcp-range是設(shè)定可用ip范圍雇寇,一般是除了網(wǎng)口ip(上文設(shè)置的static routers)以外, .2到.253都設(shè)置為可分配ip氢拥,24h是指此ip刷新周期為24小時(shí)。
interface=eth1
domain-needed
bogus-priv
dhcp-range=192.168.7.2,192.168.7.253,24h
設(shè)定IP轉(zhuǎn)發(fā)策略锨侯,用于wan口和lan口不同網(wǎng)卡不同網(wǎng)段之間的數(shù)據(jù)轉(zhuǎn)發(fā)嫩海。
sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
#開啟ipv4轉(zhuǎn)發(fā)功能
#退出文件并保存
#持續(xù)輸入以下命令用于IP轉(zhuǎn)發(fā):
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 eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
#隨后保存上述指令并設(shè)為開機(jī)自動(dòng)運(yùn)行
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
sudo nano /etc/rc.local
#在開機(jī)自啟動(dòng)文件rc.local中寫入以下命令:
sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
iptables-restore < /etc/iptables.ipv4.nat
隨后又到了喜聞樂見的重啟環(huán)節(jié):
sudo reboot
重啟后設(shè)備連接到usb網(wǎng)卡上就可以自動(dòng)獲取ip,并可以正常上網(wǎng)了囚痴。如果重啟后不能正常上網(wǎng)叁怪,請(qǐng)排查問題后再往下走。
隨后是按照ATC深滚,步驟和注意事項(xiàng)已經(jīng)在上一個(gè)模式中給出奕谭,這里就不重復(fù)了,但是在編寫rc.local文件時(shí)痴荐,啟動(dòng)atc的腳本要最后再運(yùn)行血柳,且腳本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)
設(shè)置完atc重啟后混驰,連接路由器lan口或者連接路由器wifi攀隔,進(jìn)入192.168.7.1:8000 網(wǎng)址后就可以看到熟悉的atc頁面了皂贩。