空中交通管制守护进程
atcd的Python项目详细描述
#ATCD
\它。
要求
`ATCD`网关**必须**看到设备的实际IP。换句话说,如果您使用
natting,NAT后面的所有设备都将使用相同的整形规则进行整形。
`ATCD`取决于以下软件包:
*python 2.7
*pyroute2==0.3.3
*pyotp==1.4.1
*sparts==0.7.1
*atc节俭==0.1.6
` ATCD是直接从[PIP(https://pypi.pypi.org/pypi/pypi/pypi/pip)上直接安装的。
<<
`` bash
/>` pip安装ATCD
` ` ` `
` ` ` `
` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `
` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `
` ` ` ` ` ` ` ` ` ` `/>配置
`ATCD`通过命令行参数,要获取选项的完整列表,请运行:
````
ATCD-h
````
最重要的配置选项是:
*--ATCD WAN:用于连接到Internet的接口。
*--ATCD LAN:用于连接到设备的接口。
*--sqlite file:位置ATCD将保留当前的设备设置。
`ATCD`Debian和RHEL发行版的init文件可以在[Chef Cookbook]中找到(../../Chef/atc/files/default/init.d/)
` atcd"利用了linux的内置[交通控制子系统][tchowto]。与流量控制子系统的通信通过netlink api完成,并由纯python netlink库[pyroute2][pyroute2]提供便利。
基于这个标记,分类器将把数据包放在正确的"bucket"中,然后它将限制带宽,增加延迟,丢弃数据包,损坏它们…根据成形设置。
下图说明IP数据包经过的流:
![空中交通管制图][空中交通管制图]
标记是在数据包穿过"转发"链上的路由器时完成的,例如在为IPS10.0.2.2塑造数据包时,10.0.2.4和10.0.2.5:10.0.0.10.0.4和10.0.2.10和10.0.2.5:
`` bash
`` bash
-a forward-D 10.0.2.2/32-i eth0-j标记——设置xmark 0x2/0xffffffffffff
-a forward-S 10.0.2.2/32-i eth0-j标记——设置xmark 0x3/0xffffffffffffffff
-a forward-D 10.0.0.0.2.2.4/32-i eth0-j标记——设置xmark 0xmark 0xmark 0xmark 0x3/0x.0.2.4/32-第1部分-Jmark——设置xmark 0x3/0xffffff
-a forward-d 10.0.2.5/32-i eth0-j mark——设置xmark 0x4/0xffffffff
-a forward-s 10.0.2.5/32-i eth1-j mark——设置xmark 0x4/0xffffffff
```
eth0是连接到Internet的网络接口。
数据包
流量控制部分更为复杂。下面是3个IPS10.0.2.2设备的上行链路成形情况,10.0.2.4和10.0.2.5:
`` bash
tc filter show dev eth0
filter parent 1:协议IP pref 1 fw
filter parent 1:协议IP pref 1 fw handle 0x2 classid 1:2 police 0x1 rate 100000bit burst 12000b mtu 2kb action drop overhead 0b
ref 1 bind 1
filter parent 1:协议ip pref 1 fw handle 0x3 classid 1:3 policy 0x3 rate 200000bit burst 12000b mtu 2kb action drop overhead 0b
ref 1 bind 1
filter parent 1:protocol ip pref 1 fw handle 0x4 classid 1:4 policy 0x5 rate 200000bit burst 12000b mtu 2kb action drop overhead 0b
ref 1 bind 1
#tc类显示dev eth0
类htb 1:4根叶8005:prio 0速率200000bit ceil 200000bit突发1600b cburst 1600b
类htb 1:2根叶8001:prio 0速率100000bit ceil 10000bit突发1600b cburst 1600b
类htb 1:3根叶8003:prio 0速率200000bit ceil 200000bit突发1600b cburst 1600b
tc qdisc show dev eth0
qdisc htb 1:根refcnt 2 r2q 10默认0个直接数据包u stat 3755 direct qlen 1000
qdisc netem 8001:父级1:2限制1000延迟10.0ms损失1%
qdisc netem 8003:父级1:3限制1000延迟20.0ms损失2%
qdisc netem 8005:父级1:4限制1000延迟20.0ms损失2%
```
当一个包进入时,它通过根qdisc(第4行),实际上是无限的,过滤器被检查,如果一个包被标记为0x2,它将被传递到id为1:2的类中,在那里发生限制。之后,包被传递给它的子qdisc,它使用netem提供包丢失、损坏、重新排序…下面的图表表示了"filter"、"class"和"qdisc"是如何组合在一起的:
````
root 1:
uuuult;--filter matching
/
/
/
/|\
1:2 1:3 1:4<;--带宽限制
8001:8003:8005:<;--请求"ATCD"为给定设备塑造/取消缩放流量时,延迟、数据包丢失、重新排序和损坏,` atcd将设置/取消设置所需的iptables规则和filter、class和qdisc来控制流量。除此之外,它还将运行一些定期的内务处理任务(如过期的形状设置…。
\建议让"atcd"只监听"localhost",并将身份验证卸载到api。
[tchowto]:http://www.tldp.org/howto/traffic control howto/
[pyroute2]:https://github.com/svinota/pyroute2
[atc_diagram]:https://facebook.github.io/augmented-traffic-control/images/atc_diagram.png
\它。
要求
`ATCD`网关**必须**看到设备的实际IP。换句话说,如果您使用
natting,NAT后面的所有设备都将使用相同的整形规则进行整形。
`ATCD`取决于以下软件包:
*python 2.7
*pyroute2==0.3.3
*pyotp==1.4.1
*sparts==0.7.1
*atc节俭==0.1.6
` ATCD是直接从[PIP(https://pypi.pypi.org/pypi/pypi/pypi/pip)上直接安装的。
<<
`` bash
/>` pip安装ATCD
` ` ` `
` ` ` `
` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `
` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `
` ` ` ` ` ` ` ` ` ` `/>配置
`ATCD`通过命令行参数,要获取选项的完整列表,请运行:
````
ATCD-h
````
最重要的配置选项是:
*--ATCD WAN:用于连接到Internet的接口。
*--ATCD LAN:用于连接到设备的接口。
*--sqlite file:位置ATCD将保留当前的设备设置。
`ATCD`Debian和RHEL发行版的init文件可以在[Chef Cookbook]中找到(../../Chef/atc/files/default/init.d/)
` atcd"利用了linux的内置[交通控制子系统][tchowto]。与流量控制子系统的通信通过netlink api完成,并由纯python netlink库[pyroute2][pyroute2]提供便利。
基于这个标记,分类器将把数据包放在正确的"bucket"中,然后它将限制带宽,增加延迟,丢弃数据包,损坏它们…根据成形设置。
下图说明IP数据包经过的流:
![空中交通管制图][空中交通管制图]
标记是在数据包穿过"转发"链上的路由器时完成的,例如在为IPS10.0.2.2塑造数据包时,10.0.2.4和10.0.2.5:10.0.0.10.0.4和10.0.2.10和10.0.2.5:
`` bash
`` bash
-a forward-D 10.0.2.2/32-i eth0-j标记——设置xmark 0x2/0xffffffffffff
-a forward-S 10.0.2.2/32-i eth0-j标记——设置xmark 0x3/0xffffffffffffffff
-a forward-D 10.0.0.0.2.2.4/32-i eth0-j标记——设置xmark 0xmark 0xmark 0xmark 0x3/0x.0.2.4/32-第1部分-Jmark——设置xmark 0x3/0xffffff
-a forward-d 10.0.2.5/32-i eth0-j mark——设置xmark 0x4/0xffffffff
-a forward-s 10.0.2.5/32-i eth1-j mark——设置xmark 0x4/0xffffffff
```
eth0是连接到Internet的网络接口。
数据包
流量控制部分更为复杂。下面是3个IPS10.0.2.2设备的上行链路成形情况,10.0.2.4和10.0.2.5:
`` bash
tc filter show dev eth0
filter parent 1:协议IP pref 1 fw
filter parent 1:协议IP pref 1 fw handle 0x2 classid 1:2 police 0x1 rate 100000bit burst 12000b mtu 2kb action drop overhead 0b
ref 1 bind 1
filter parent 1:协议ip pref 1 fw handle 0x3 classid 1:3 policy 0x3 rate 200000bit burst 12000b mtu 2kb action drop overhead 0b
ref 1 bind 1
filter parent 1:protocol ip pref 1 fw handle 0x4 classid 1:4 policy 0x5 rate 200000bit burst 12000b mtu 2kb action drop overhead 0b
ref 1 bind 1
#tc类显示dev eth0
类htb 1:4根叶8005:prio 0速率200000bit ceil 200000bit突发1600b cburst 1600b
类htb 1:2根叶8001:prio 0速率100000bit ceil 10000bit突发1600b cburst 1600b
类htb 1:3根叶8003:prio 0速率200000bit ceil 200000bit突发1600b cburst 1600b
tc qdisc show dev eth0
qdisc htb 1:根refcnt 2 r2q 10默认0个直接数据包u stat 3755 direct qlen 1000
qdisc netem 8001:父级1:2限制1000延迟10.0ms损失1%
qdisc netem 8003:父级1:3限制1000延迟20.0ms损失2%
qdisc netem 8005:父级1:4限制1000延迟20.0ms损失2%
```
当一个包进入时,它通过根qdisc(第4行),实际上是无限的,过滤器被检查,如果一个包被标记为0x2,它将被传递到id为1:2的类中,在那里发生限制。之后,包被传递给它的子qdisc,它使用netem提供包丢失、损坏、重新排序…下面的图表表示了"filter"、"class"和"qdisc"是如何组合在一起的:
````
root 1:
uuuult;--filter matching
/
/
/
/|\
1:2 1:3 1:4<;--带宽限制
8001:8003:8005:<;--请求"ATCD"为给定设备塑造/取消缩放流量时,延迟、数据包丢失、重新排序和损坏,` atcd将设置/取消设置所需的iptables规则和filter、class和qdisc来控制流量。除此之外,它还将运行一些定期的内务处理任务(如过期的形状设置…。
\建议让"atcd"只监听"localhost",并将身份验证卸载到api。
[tchowto]:http://www.tldp.org/howto/traffic control howto/
[pyroute2]:https://github.com/svinota/pyroute2
[atc_diagram]:https://facebook.github.io/augmented-traffic-control/images/atc_diagram.png