匿名通信网络的大规模仿真 Large-Scale Emulation of Anonymous Communication Networks
本文主要介绍了一种搭建一个模拟Tor通信系统的方法,作者将其起名为SNEAC。
介绍
为了尽量降低代价,SNEAC使用Linux容器,主要包含两个组件:核心core和多个边缘节点edge node。核心和边缘节点分别在不同的机器上,可以在这两个组件的基础上配置和运行仿真的Tor网络。
核心提供IP层的仿真,主要提供路由的功能,而边缘节点则运行未经修改的使用TCP或UDP的应用程序。
相关工作
ModelNet
ModelNet可以在类网络环境下进行网络仿真。ModelNet也包含核心和边缘节点,并且分布在不同的计算机上。Core必须运行FreeBSD,而边缘节点则可以运行任意系统。

核心可以仿真路由功能核心可以仿真路由功能,每个边缘节点上可以运行很多未修改的基于TCP或UDP的应用程序。这些应用程序进行通信时,必须经过核心,并被核心模拟路由一下。,每个边缘节点上可以运行很多未修改的基于TCP或UDP的应用程序。这些应用程序进行通信时,必须经过核心,并被核心模拟路由一下。
虽然ModelNet支持多核心+多边缘节点,但是单核心+单边缘节点就可以完成一千个Tor节点左右的系统模拟工作,通常已经足够。
ModelNet的优点是仿真比较真实,因为它的边缘节点可以直接运行未经任何修改的基于TCP或者UDP的应用程序。ModelNet缺点就是它太老了。首先,它受FreeBSD的限制,而FreeBSD在2010年已经停止支持,它在支持的CPU核数、可寻址的物理内存、支持的网卡数量上都有缺陷。此外,ModelNet有一定的bug,而且文档不全。
因此,大多数基于ModelNet进行的测试都是单核心单边缘节点的小规模测试。
Shadow
Shadow可以在单台计算机上模拟大型多样的Tor网络。
Shadow可以模拟网络层通信,使各种通信程序进行必要的交互。Shadow通过为每个模拟节点保留当前运行状态副本来运行多个虚拟节点,当应用程序执行事件时,模拟节点会进行上下文切换。
Shadow内存<-->物理内存<-->应用程序
核心不像ModelNet那样直接模拟多个路由器,而是简化版的功能仿真,重新发明了基本原语,socket和网络协议也是自己设计的,有bug存在的可能。为了节约CPU时间,对包不做加密解密,但是Tor网络其实不应该少这一步。Shadow只能进行单机模拟,不可以同时运行多个实例以提升性能。
总之,Shadow解决了ModelNet不能大规模仿真的缺陷,但是丧失了真实性。
PlanetLab
PlanetLab是一个分布式的在线仿真测试平台,节点遍布全球,但是被用的很少,因为面临以下问题:
- 网络状况不稳定。
- 虽然节点看似很多,但是同一时刻只有少量可用。
- 部署难,节点特征也和Tor有区别。
其他分布式平台往往也有此类问题。
SNEAC设计
设计目标
- 模拟真实通信。
- 能模拟大规模(k起步规模)节点通信。
- 结果准确。
- 开源,易搭建易控制。
结构
基于ModelNet。边缘节点运行未修改的基于TCP或UDP的应用程序,他们将被仿真并连接到核心。

SNEAC使用容器(LXC, Linux Containers)模拟路由器,用netem模拟链路通信,用Open vSwitch来为边缘节点路由数据包。
实际上除了Tor之外,SNEAC可以仿真任何未修改的基于TCP或UDP的应用程序的通信,因为核心忽略了边缘节点的应用程序的配置,它的作用仅仅是仿真网络并重新路由数据包。
核心
核心的任务:
- 仿真链路:由Linux内核的netem模块处理。
- 路由:用容器仿真路由器,用位于核心和边缘节点之间的Open vSwitch来路由数据包。
Mininet
核心需要设计的和真实路由器相似,有带宽、延迟、丢包、抖动。在此我们用了Mininet仿真器。Mininet仿真器是用软件定义网络(SDN)的原型制作的网络仿真器,在单台计算机(核心)上就可以集成终端主机、交换机(或路由器)和链路。Mininet包括:
- Hosts:一组容器,每个容器都自带一个网络设备、路由表和防火墙规则。
- Links:模拟数据链路(双向),由tc控制数据速率,由netem处理延迟、丢包、抖动。
- Switch:使用默认的Linux网桥或Open vSwitch在接口处交换数据包。
- Controller:控制Switch之间的数据包流。
需要注意Open vSwitch在数量增加后会不堪重负,如在数百个Open vSwitch使用的场合中,性能会较差。
Mininet Turbo
可以改进Mininet,称为Mininet Turbo。
- 使用容器代替Open vSwitch。
- 使用容器的静态路由表代替Open vSwitch的软件定义路由表。
- 用多线程代替顺序创建节点和链路的方法。
- 核心只路由,不产生流量,只有边缘节点才产生流量。
- 用多台计算机协作,解除Mininet只能单台计算机的限制。
基于容器的路由
在SNEAC的核心中有两种类型的节点,这些节点在各个容器中:
- 客户端节点:通过root节点(模拟ISP)连接边缘节点,接触到边缘节点中产生流量的程序。
- 非客户端节点:不连接边缘节点,在自治系统中。它们通过链路和边缘节点相连。
为了模拟ISP提供给用户的不同网络的质量,所有客户端节点应当连接root节点以便和外部的边缘节点进行通信。root节点和客户端节点通常有三种不同的链路(down up self)形成veth pair,以模拟不同的上下行带宽、网络质量和自环链路。
控制链路:tc和netem
SNEAC由tc控制数据速率,由netem处理延迟、丢包、抖动。
边缘节点
每个边缘节点(计算机)上可以运行很多未修改的基于TCP或UDP的应用程序。一个SNEAC包含多个边缘节点。
边缘节点的系统不限制,唯一的要求就是要使用LD_PRELOAD库来把多个应用程序绑定到多个特定的IP地址上,并在产生数据包开始传输后翻转IP地址中所需的某个位,使得目的地址发生改变,强行经过仿真路由器转发。
实施
SNEAC使用python编写,使用容器,使用了Mininet Turbo以支持多线程。
核心
核心创建之初,首先从GraphML文件中加载网络拓补,该文件包含相关节点和链路的信息,并指明了带宽、延迟、丢包、抖动等属性。
- 一旦拓补载入内存,Mininet就会创建容器,并在他们之间建立veth pair,加载tc和netem。此阶段各容器不与外部通信。
- 客户端节点连接模拟ISP的root节点,每个客户端节点都会建立三个链路(与root上行,与root下行,自环)以便模拟ISP给每个用户提供的不同质量网络。
- 由于现在流量还没有进去核心中包含非客户端节点的子网,我们基于最短路径算法,在所有节点(容器)之间建立路由。

边缘节点
边缘节点的配置涉及到启动Tor进程并为其配置路由。核心需要获取将要运行的边缘节点(它们的IP地址)的列表,以便它可以配置路由。
可以运行的边缘节点的数量取决于仿真器可以提供的地址空间,比如10.0.0.0/16的IP地址可以提供65534个的地址空间。
我们使用Chutney来配置Tor进程们,它会创建目录、中继器和客户端节点的配置文件,并启动Tor进程。使用LD_PRELOAD库的libipaddr将Tor进程绑定到接口别名,并实现必要的IP翻位,以强制通信经过核心中的路由。
Tor启动后无需后续配置。
实验过程
环境搭建
我们在CrySP RIPPLE平台(一个用于研究大型隐私增强技术的实验平台)上搭建了SNEAC。
硬件配置
使用了单核心(80核160线程 1T内存 4张40G网卡)+七个边缘节点机器(80核160线程 2T内存 4张40G网卡),128Gbps总线。
软件配置
边缘节点使用ubuntu12.04,可以同时两种类型的Tor
- Tor-0.2.5.1-alpha 采用较新的ntor握手方式。
- Tor-0.2.3.25 采用较旧的TAP握手方式。
SNEAC与ModelNet和Mininet的比较
- 在节点数有限的情况下,使用ovs的Mininet和使用容器的SNEAC性能差不多。
- SNEAC和Mininet能处理较大负载而不会影响性能,而ModelNet则遭受性能可变的困扰,在某些情况下会丢弃所有数据包。
僵尸网络(botnet)测试
2013年曾经发生过Tor用户迅速增长的状况,原因是僵尸网络。虽然僵尸网络没有增加新的流量,但是增加了大量电路,而电路的中举需要使用公钥加密,浪费中继节点的计算资源。与此同时,Botnet大量使用Tor的旧版本,使用TAP来握手,而不是像新版Tor那样使用ntor来握手,增加了计算的开销。
因此我们做了一个实验,搭建了一个包含30个中继和2450个客户端节点的Tor网络,分布在5台边缘节点计算机上面。其中Botnet使用Tor的旧版本,即使用TAP来握手,正常Tor节点使用ntor来握手。然后记录隐蔽服务(Hidden service)关闭,让所有电路显明后,电路总数的变化。
随着客户端节点开始试图连接到已经关闭隐藏服务的网络,电路的数量增加了一倍,并影响了下载速度,Tor网络会变得很慢。
未来工作
- 启动时间数H,可以用C代替python搭建平台。
- 虽然证明了相同条件下SNEAC性能等同于ModelNet,但是大规模节点的情况下ModelNet开不起来,也没办法进行这种场景下的比较。
SNEAC的总结
- 可以运行正式的Tor代码。
- 可以扩展到数千个节点。
- 基于ModelNet,不过用容器代替ovs,使用tc和netem。
- 可以多台计算机集群模拟核心中Tor节点的运作。
共有 0 条评论