关于PCC与NTH
本帖最后由 jike106397 于 2012-1-1 18:07 编辑网大的PCC脚本中为什么还要有INPUT OUTPUT标记,很难理解.下面是我写的,用着也很不错。如果有人理解原理,请指导下。
我的教程免费贴上。好像粘不过来图片。可到我空间来看。
http://hi.baidu.com/1063971928qq/blog/item/6a14bc24c38989098b82a137.html
测试是在虚拟机里测试的
虚拟机三个网卡,两个外网,一个内网,两个外网使用两个PPPOE拨号,内网段采用172.16.0.0/24 网卡分别命名为wan1,wan2,lan
首先,添加两个外网的拨号,我已经加好了。
/interface pppoe-client add interface=wan1 user="test1" password="test1" add-default-route=no disable=no
/interface pppoe-client add interface=wan2 user="test2" password="test2" add-default-route=no disable=no
我做的拨号是固定IP的,pppoe-out1: address 10.10.10.2 gateway 10.10.10.1
pppoe-out2: address 10.10.20.2 gateway 10.10.20.1
内网添加IP
/ip address add address=172.16.0.1/24 interface=lan
这样IP已经配置好了,下面配置PCC
由于为了测试效果,我只对我的客户机(设置IP:172.16.0.2)进行PCC负载。
/ip firewall mangle add chain=prerouting action=mark-connection new-connection-mark=conn1 passthrough=yes src-address=172.16.0.2per-connection-classifier=both-addresses:2/0
/ip firewall mangle add chain=prerouting action=mark-connection new-connection-mark=conn2 passthrough=yes src-address=172.16.0.2per-connection-classifier=both-addresses:2/1
/ip firewall mangle add chain=prerouting action=mark-routing new-routing-mark=rout1 passthrough=yes src-address=172.16.0.2 connection-mark=conn1
/ip firewall mangle add chain=prerouting action=mark-routing new-routing-mark=rout2 passthrough=yes src-address=172.16.0.2 connection-mark=conn2
在标记连接的地方,网上好多地方说要标记非本地地址,还要对INPUT 和OUTPUT 进行标记。我看着,觉得好无根据,不按它的做。并且大部分是复制的,很可能是以讹传讹。
标记好就,就使用PCC计算方法对数据进行了标记,然后就是策略路由的问题了
在路由表里做策略
/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 distance=1 routing-mark=rout1
/ip route add dst-address=0.0.0.0/0 gateway=10.10.20.1 distance=1 routing-mark=rout2
由于只是测试,没有可能掉线,所以,没有添加默认路由,及防掉线。
再在出口处做地址伪装。
/ip firewall nat add chain=srcnat out-interface=pppoe-out1 action=masquerade
/ip firewall nat add chain=srcnat out-interface=pppoe-out2 action=masquerade
由于是为了测试PCC的负载效果,所以做了两条根据出口的伪装,如果用的话,只做一个就行了,不必限定出口。
下面是用批处理做发包,来测试对包的负载效果。当然要保证172.16.0.2机器的绝对干净,没有其它连网程序。比如QQ之类的软件都要退出。
第一个批处理发240个包,代码如下:
@echo off
for /l %%i in (1 1 240) do (
ping -n 1 -w 1 219.134.240.%%i
)
pause
测试结果
可以看出,发了240个包中,走第一条线的是116个包,走第二条线的是124个包。
第二个批处理发400个包,代码如下:
@echo off
for /l %%i in (1 1 200) do (
ping -n 1 -w 1 219.134.240.%%i
ping -n 1 -w 1 219.135.240.%%i
)
pause
下面是测试结果:
可以看出,发出的400个包中,走第一条线的是195个包,走第二条线的是205个包
第三次测试,发了1000个包,代码如下
@echo off
for /l %%i in (1 1 200) do (
ping -n 1 -w 1 219.134.240.%%i
ping -n 1 -w 1 219.135.240.%%i
ping -n 1 -w 1 219.136.240.%%i
ping -n 1 -w 1 219.137.240.%%i
ping -n 1 -w 1 219.138.240.%%i
)
pause
测试结果:
可以看出,走第一条线的496个包,走第二条线的504个包
走240 个包时 ,相差8个包
走400个包时,相差10个包
走1000个包时,相差8个包
整体效果很不错。
下面是NTH策略的千包结果:
可见,还不如PCC。
本人打开了四家网上银行的登录,及用支付宝,未发现不能登录的错误提示。
并且测试表明,NTH打开网页的响应速度没有PCC快。
一个纳闷的问题是为什么总是第二条线走的比第一条线多?,这可能要到PCC在HASH运算时的具体算法寻求答案了。
INPUT和OUTPUT是针对ROS自身通信的规则,对客户机转发没什么用。 我做了INPUT和OUTPUT后QQ空间跟QQ邮箱之类的都打不开,关了就正常了。。。网上的PCC教程大体差不多,细节上的差别就有很大的区别。好像都能用。我做的是加了标记非本地地址的这个动作。
页:
[1]