前言
在移动互联网和远程办公日益普及的今天,应用在弱网环境下的表现已成为用户体验的关键指标。无论是视频会议卡顿、网页加载缓慢,还是 API 请求超时,背后往往都与网络带宽受限、高延迟或丢包有关。因此,在开发和测试阶段主动模拟真实世界的弱网场景,对提升系统稳定性和用户满意度至关重要。
Facebook 开源的 Augmented Traffic Control(ATC) 正是为此设计的一款强大网络仿真工具。它能够灵活地控制网络带宽、延迟、丢包率和抖动等参数,帮助开发者在可控环境中复现复杂的网络状况。
而树莓派(Raspberry Pi)凭借其低功耗、低成本和 Linux 系统支持,成为搭建轻量级网络测试平台的理想选择。本文将介绍如何在树莓派上部署并配置 Facebook ATC,将其转变为一个便携式弱网模拟网关,并通过实际测试验证其对局域网内设备的网络限制效果。无论你是前端开发者、QA 工程师,还是嵌入式或 IoT 项目实践者,这套方案都能为你提供一种简单高效的弱网测试手段。

1.介绍Augmented Traffic Control
Augmented Traffic Control(增强型流量控制,简称ATC) 是由Facebook开源的一款网络条件模拟工具,旨在帮助开发者和测试人员在可控环境中复现真实世界的复杂网络状况。
核心功能:精准模拟多样网络环境
ATC能够灵活模拟从高速宽带到极端劣化网络的各种场景,包括常见的移动网络(如 2G、3G、4G、5G)以及高延迟、低带宽或高丢包的受损链路。通过精细调控以下关键网络参数,实现高度逼真的流量仿真:
- 带宽限制:控制上下行传输速率,模拟网速受限场景;
- 延迟(Latency):人为引入传输延迟,测试应用实时性表现;
- 丢包率(Packet Loss):模拟数据包在传输过程中丢失的情况;
- 数据包损坏(Packet Corruption):注入错误比特,验证协议容错能力;
- 数据包乱序(Packet Reordering):打乱数据包到达顺序,检验应用对乱序的处理机制。
灵活易用:无需客户端,Web即控
ATC提供直观的Web管理界面,用户可直接在浏览器中动态调整网络策略,实时启用或取消流量整形(Traffic Shaping),无需在被测设备上安装任何代理或客户端软件,极大简化了测试流程。
模块化架构:高可扩展性
ATC采用模块化设计,核心组件包括:
- atcd:底层流量控制守护进程;
- django-atc-api:提供 RESTful 接口;
- django-atc-demo-ui:官方演示 Web 界面;
- django-atc-profile-storage:支持网络配置模板的存储与复用。
这种解耦架构便于开发者根据实际需求进行功能扩展、集成或定制化开发。
2.开启无线热点
2.1更新系统
确保你的树莓派操作系统是最新的:
sudo apt update

2.2安装所需软件包
安装hostapd和dnsmasq:
sudo apt install hostapd dnsmasq -y

2.3停止禁用服务
停止并禁用hostapd和dnsmasq:
sudo systemctl stop hostapd
sudo systemctl stop dnsmasq
sudo systemctl disable hostapd
sudo systemctl disable dnsmasq

2.4配置wlan0的静态 IP 地址
编辑网络配置文件/etc/dhcpcd.conf:
sudo nano /etc/dhcpcd.conf
添加以下内容(假设无线网卡接口是 wlan0,使用ifconfig查找自己的网卡):
interface wlan0
static ip_address=192.168.110.1/24
nohook wpa_supplicant

2.5配置dnsmasq
备份原有的dnsmasq配置文件(以防配置错误导致服务启动失败):
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf1

创建一个新的 dnsmasq 配置文件:
sudo nano /etc/dnsmasq.conf
添加以下内容:
interface=wlan0
dhcp-range=192.168.110.2,192.168.110.100,255.255.255.0,24h

2.6配置hostapd
创建并编辑hostapd配置文件:
sudo nano /etc/hostapd/hostapd.conf
添加以下内容:
interface=wlan0
driver=nl80211
ssid=haha //自己修改热点名
hw_mode=g
channel=7
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
wpa=2
wpa_passphrase=12hdwek //自己修改密码
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

2.7修改hostapd默认配置
编辑hostapd默认配置文件:
sudo nano /etc/default/hostapd
找到并修改以下行,指向你的配置文件:
DAEMON_CONF="/etc/hostapd/hostapd.conf"

2.8启用ip转发
编辑 /etc/sysctl.conf,启用IP转发:
sudo nano /etc/sysctl.conf
添加以下行:
net.ipv4.ip_forward=1
使更改生效:
sudo sysctl -p

2.9设置NAT
使用iptables配置 NAT:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
保存 iptables 规则:
sudo mkdir -p /etc/iptables
sudo sh -c "iptables-save > /etc/iptables/rules.v4"

2.10启动并启用服务
启动并启用hostapd和dnsmasq服务:
sudo systemctl unmask hostapd
sudo systemctl unmask dnsmasq
sudo systemctl start hostapd
sudo systemctl start dnsmasq
sudo systemctl enable hostapd
sudo systemctl enable dnsmasq

检查服务状态:
sudo systemctl status hostapd
sudo systemctl status dnsmasq

2.11验证是否成功
输入命令,查看wlan0是否出现IP,出现即为成功配置:
ifconfig

手机和电脑也出现了热点信息,连接即可(网速是很快的哦~如果很慢就是配置过程出错啦)

3.配置ATC
3.1安装python2.7和virtualenv,创建atc虚拟环境
安装python2.7和virtualenv:
sudo apt install virtualenv python2.7 -y

使用Python 2.7解释器创建一个名为 atc 的独立 Python 虚拟环境:
virtualenv -p /usr/bin/python2.7 atc
cd atc/bin

创建atc虚拟环境:
source activate
3.2安装atc
切换到atc目录下:
cd ~/atc
安装atc:
pip2 install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage

用于创建一个新的 Django 项目,项目名称为 atcui:
django-admin startproject atcui
3.3配置django
配置settings.py,在 INSTALLED_APPS 中添加 ATC 的应用:
sudo nano atcui/atcui/settings.py
添加如下:
ALLOWED_HOSTS = ['*'] //'*'表示允许所有地址
INSTALLED_APPS = (
...
'rest_framework',
'atc_api',
'bootstrap_themes',
'django_static_jquery',
'atc_demo_ui',
'atc_profile_storage',
)

配置 django 路由:
sudo nano atcui/atcui/urls.py
添加如下:
from django.views.generic.base import RedirectView
from django.conf.urls import include
urlpatterns = [
...
url(r'^api/v1/', include('atc_api.urls')),
url(r'^atc_demo_ui/', include('atc_demo_ui.urls')),
url(r'^api/v1/profiles/',include('atc_profile_storage.urls')),
url(r'^$', RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
]

更新django的数据库:
bin/python atcui/manage.py migrate

3.4运行 ATC
启动 ATC 的核心流量控制服务atcd:
nohup sudo bin/atcd --atcd-wan eth0 --atcd-lan wlan0 --atcd-dont-drop-packets &

启动ATC的Web管理界面:
nohup bin/python atcui/manage.py runserver 0.0.0.0:8000 &

4.添加 facebook 的默认网络配置
克隆Augmented Traffic Control(ATC)项目的源代码到本地:
git clone https://github.com/facebookarchive/augmented-traffic-control.git

运行当前目录下的restore-profiles.sh脚本,并传入参数192.168.110.1:8000,用于将预定义的网络配置文件恢复到指定 ATC Web API 地址:
cd ~/atc/augmented-traffic-control/utils
./restore-profiles.sh 192.168.110.1:8000
5.打开ATC网页
使用的设备(手机电脑均可)连接前面设置好的热点“haha”,然后打开网页:192.168.110.1:8000
可以看到成功打开:

输入想要造成弱网的设备Address和Token,就可以操控对应设备啦!(不设置就是操控本机)

还有很多对应的参数可以设置:

我想要验证的是丢包率,所以给这个参数设置为“10”,丢包率即为10%

点击Update Shaping即可。

在实际开发与测试工作中,弱网环境的复现往往受限于物理位置和网络条件。通过将Facebook ATC部署在树莓派上作为局域网弱网网关,并配合 Cpolar内网穿透,我们能轻松突破这些限制:
- 当你在家或咖啡馆远程办公时,只需用手机连接树莓派创建的Wi-Fi热点,再通过Cpolar生成的公网链接打开ATC控制面板,即可实时模拟2G、高延迟或丢包场景,调试App在弱网下的加载逻辑、超时处理或降级策略;
- 团队协作时,无需每人搭建一套环境,所有人共用同一台ATC设备,产品经理、测试、前端均可通过同一个Cpolar链接访问并切换网络预设,确保测试条件一致;
- 向远程同事演示问题也变得极其简单——只需分享Cpolar链接,对方就能亲眼看到“为什么用户在地铁里打不开页面”,甚至亲手调整参数复现问题,大幅提升沟通效率。
这种“ATC + Cpolar”组合,以极低的成本实现了专业级的远程弱网测试能力,真正让网络质量可控、可测、可共享。
接下来跟我一起部署cpolar吧!
6.安装cpolar实现随时随地搭建弱网环境
cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。
❤️以下是安装cpolar步骤:
使用一键脚本安装命令:
sudo curl https://get.cpolar.sh | sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)
sudo systemctl status cpolar

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

7.配置公网地址
登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:
- 隧道名称:可自定义,本例使用了:atc,注意不要与已有的隧道名称重复
-
协议:http
-
本地地址:8000
-
域名类型:随机域名
-
地区:选择China Top
点击创建:

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

访问成功。

8.保留固定公网地址
使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

点击左侧的预留,选择保留二级子域名,地区选择china top,然后设置一个二级子域名名称,我这里演示使用的是atcc,大家可以自定义。填写备注信息,点击保留。

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道atc,点击右侧的编辑。

修改隧道信息,将保留成功的二级子域名配置到隧道中
- 域名类型:选择二级子域名
- Sub Domain:填写保留成功的二级子域名
- 地区: China Top
点击更新

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问本地部署的页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

这样,我们就可以在有需要时立刻打造弱网环境啦!
总结
本文详细介绍了如何在树莓派上利用开源的ATC工具,构建一个低成本、便携式的弱网模拟环境。成功实现了对连接设备的网络条件精准控制——包括带宽限制、延迟注入、丢包、乱序等典型弱网场景。
进一步结合Cpolar 内网穿透工具,还将Web控制面板暴露至公网,支持远程访问与协作,极大提升了测试灵活性。
该方案不仅适用于个人开发者在家或外出时调试移动端应用的弱网表现,也便于团队共享统一的测试环境,快速复现和验证网络相关问题。尽管ATC项目已归档,但其轻量、直观、无需客户端的特性,使其在树莓派等边缘设备上仍具有极高的实用价值,是构建真实网络体验验证体系的有效手段。
感谢您对本篇文章的喜爱,有任何问题欢迎留言交流。cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站



