主机A到主机B之间有某条待测线路C<->D,其中A、B、C、D均为IP地址,A、B为公网地址,C、D为内网地址。C<->D线路上可能出现极端的丢包情况,也可能是某个单向出现问题,这时却因为owamp无法建立控制连接导致不能测量单向丢包。
owamp设计时是允许通过别的链路建立控制连接进行测量的。
在owping的参数中,可以增加创建控制连接用的server地址。但是3.2rc4版本的实现中,在上述背景下,owping会通过A创建到B的控制连接,随后进行的是A和D这两个地址之间的单向延时丢包信息,不是C<->D。owping的-S选项在manpage中说会将本地socket绑定到指定的IP上,然而它会将控制连接和测试的本地IP都指定为源地址。此时,指定-S C后,C到B根本无法创建控制连接(公网、内网不互通),也无法正确测试C<->D的单向延时丢包信息。
为此我修改了owping的代码,将-S参数的作用仅仅限定为测试时使用这个本地地址,控制连接不绑定到本地IP。补丁见:owping.patch。
在patch代码后,owping就是通过系统(自动使用地址A)创建到B的控制连接,再测量C<->D链路了。然而patch owping的代码仍然不能正确运行:为了防止owping被用来攻击,(B上运行的)owampd拒绝了测试IP(C)跟控制连接的客户端(A)不同的测试请求。
/*
* Check for possible DoS as advised in Section 7 of owdp
* spec.
* (control-client MUST be receiver if openmode.)
*/
阅读owamp/sapi.c可以发现,只要不是openmode,这种测量行为就被允许。
为此,只要对owping和owampd加上验证信息,并进行正确配置。
增加验证信息的方式十分简单:在B上执行pfstore -f /etc/owampd/owampd.pfs -n yangzhe输入密码即可创建yangzhe的认证信息。将owampd.pfs中yangzhe这行复制到机器A的owampd.pfs中去。
在owampd.limits中,还可以增加assign user yangzhe root取消用户yangzhe的流量限制。
在B上重启owampd后,在A上就可以通过owping -S C -i 0.001 -c 1000 -k /etc/owampd/owampd.pfs -u yangzhe D B以0.001秒的间隔来回发送1000个数据包对C<->D线路进行双向测试了,并且控制连接是在A、B间建立的,不用担心C<->D本身的不稳定造成无法测量。
Posted by korvintan on 09/03/2011 at 1:51 pm
虽然看不懂……………