facebook atc弱網環境搭建和踩坑總結


facebook atc介紹

Augmented Traffic Control(又名atc)是一種模擬網絡狀況的工具。由facebook開源,是一個允許開發人員控制設備與互聯網連接的項目。atc可以模擬不同的網絡條件,包括控制帶寬,延遲,數據包丟失、數據包損壞、數據包重排序等幾個因素都可以由atc來控制。atc運行在網關,可以控制連接到該網絡的手機,設備的網絡,atc有一個web界面,通過這個界面可以來切換不同的網絡情況。atc內部使用了iptables和tc,因此只支持linux平台。

 

下面介紹facebook atc在 ubuntu 18.04(使用vmware 安裝的虛擬機)系統下facebook atc 的安裝和使用。

准備環境:

1、用vmware裝個ubuntu
2、准備一個無線網卡,建議選擇一個linux免驅的無線網卡,不然在開啟熱點的時候會提示失敗。

 

ubuntu設置wifi熱點功能

ubuntu需要利用hostapd和dhcp開啟ap熱點,首先安裝hostapd和dhcp

sudo apt-get install hostapd isc-dhcp-server

 

然后編輯/etc/hostapd/hostapd.conf文件,內容如下圖:

 

  • ssid 為wifi名稱
  • wpa_passphrase 為wifi密碼

 

接着啟動hostapd服務

sudo hostapd /etc/hostapd/hostapd.conf 

 

如果沒報錯並搜到熱點證明啟動ap熱點成功,如果有報錯可以用以下命令解決:

sudo nmcli radio wifi off sudo rfkill unblock wlan

 

如果提示hostapd進程已存在,則需要先殺掉進程

sudo killall hostapd

 

配置dhcp

編輯文件/etc/dhcp/dhcpd.conf, 內容如下圖:

 

  • subnet為子網范圍,netmask為子網掩碼
  • range為可分配的IP地址范圍
  • option router 為配置的網關
  • option domain-name-servers 為配置的dns,我用的8.8.8.8,即谷歌的dns服務器

 

設置無線網卡接口地址

sudo ifconfig wlx00026fb9727b 192.168.179.1 netmask 255.255.255.0

 

啟動dhcp-server服務

sudo dhcpd wlx00026fb9727b -pf /var/run/dhcp-server/dhcpd.pid

 

若有提示pid或leases文件錯誤,就按照提示就去創建文件並賦予權限

sudo touch /var/lib/dhcp/dhcpd.leases chmod a+x /var/lib/dhcp/dhcpd.leases

 

若開啟dhcp服務沒有提示報錯,則代表開啟成功,此時wifi應該可以連上,但是還不可以上網。

 

設置IP轉發

sudo bash -c "echo 1 >/proc/sys/net/ipv4/ip_forward"

 

設置NAT轉發

sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE

 

因為設置步驟較多,可以寫成2個腳本,ap-start.sh, ap-stop.sh。一切順利的話,此時wifi應該可以連上了

 

配置facebook atc 

首先安裝python2.7和pip,和django

sudo apt-get install python sudo apt-get install python-pip sudo apt-get install django

 

安裝atc的組件

pip install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage

 

創建atc工程

django-admin startproject atcui cd atcui

 

配置setting.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', )

 

配置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)), ]

 

更新數據庫

python manage.py migrate

 

啟動atc

sudo atcd --atcd-wan ens33 --atcd-lan wlx00026fb9727b

 

不過啟動atc的時候我遇到了https://github.com/facebook/augmented-traffic-control/issues/302 這里所說的問題,加上里面說的參數就解決了

--atcd-dont-drop-packets

 

啟動atc web

python manage.py runserver 0.0.0.0:8000

 

導入facebook默認的幾個配置文件

utils/restore-profiles.sh localhost:8000

 

這時用手機連上wifi熱點,訪問 http://192.168.179.1:8000

此時可以看到下圖

 

使用方法為

turn on select update shaping

 

然后就大功告成了,可以試着切換不同的模擬網絡試試效果。

 

 

 參考文章:

 https://www.cnblogs.com/coderzh/p/AugmentedTrafficControl.html

 https://blog.csdn.net/itfootball/article/details/46763731


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM