zh1000000 发表于 2016-7-29 13:09:20

PCC断线自动修改脚本遇到问题,寻找解决的方法。

一直用论坛的PCC自动修改脚本,多年来都没什么问题,今天有客人说上不了网。打开马上就发现问题所在。所有pppoe链接正常,个别线路没有数据通过。先不管是机房还是线路问题吧。这样脚本检测就失效了。默认还是链接状态,所以没有修改PCC参数。导致断流或者上不了网。

有没有不检测PPPOE状态的切换方法或者脚本呢?

47771885 发表于 2016-7-29 14:21:09

你需的是检修线路 脚本

cspm333 发表于 2016-7-29 20:45:12

script多加個ping值判斷即可,
不只pppoe的狀態要running ,而且透過router ping向指定的遠端時也要能通暢.
(ping可以用interface這參數指定出口)

script運作時,即使pppoe的running=yes ,但ping的輸出等於0 ,也得判定pppoe是無效的.
這樣的script就不會再出包了

zh1000000 发表于 2016-8-4 18:21:57

感谢楼上的朋友的热心回复。当时想过用Watchdog来检测线路状态。由于时间太忙就没深究。

线路状况是这样的。3条20M光纤做PCC,3条ADSL的8M做PCC备用,平时不开的。用防断线脚本自动改PCC参数脚本,因为光纤线路稳定些,而且线路带宽不一样跟AD混着做没必要,基本上都没出过问题。
近段时间出现光纤线路的PPPOE状态都是connected状态,但是没有数据流量。手动拨号就会发现全部不能拨号状态,单独试过错误代码是651。这些应该是机房的问题了。所以我就想把备用的AD用上,在光纤不能正常拨号的时候自动切换到AD的PCC。
可能表达的不是很清楚,毕竟也是略懂而已。所以脚本那些语句我是不会写的,是不是在PCC检测脚本里加一句类似:set a 这类的?

还望赐教,最好能帮写完整的句柄。感谢

cspm333 发表于 2016-8-4 22:06:12

本帖最后由 cspm333 于 2016-8-5 02:11 编辑

zh1000000 發表於 2016-8-4 18:21
感謝樓上的朋友的熱心回覆。當時想過用Watchdog來檢測線路狀態。由於時間太忙就沒深究。

線路狀況是這樣 ...
每個人的設定環境都不一樣 ,小弟先假設您匯出環境是這樣的:
/interface pppoe-client
#光纖
add ac-name="" add-default-route=no allow=pap dial-on-demand=no disabled=no interface=vrrp1 keepalive-timeout=60 \
      max-mru=1480 max-mtu=1480 mrru=disabled name=pppoe-out1 password=??? profile=default service-name="" use-peer-dns=no user=???
add ac-name="" add-default-route=no allow=pap dial-on-demand=no disabled=no interface=vrrp2 keepalive-timeout=60 \
      max-mru=1480 max-mtu=1480 mrru=disabled name=pppoe-out2 password=??? profile=default service-name="" use-peer-dns=no user=???
add ac-name="" add-default-route=no allow=pap dial-on-demand=no disabled=no interface=vrrp3 keepalive-timeout=60 \
      max-mru=1480 max-mtu=1480 mrru=disabled name=pppoe-out3 password=??? profile=default service-name="" use-peer-dns=no user=???

#ADSL
add ac-name="" add-default-route=no allow=pap dial-on-demand=no disabled=no interface=vrrp4 keepalive-timeout=60 \
      max-mru=1480 max-mtu=1480 mrru=disabled name=pppoe-out4 password=??? profile=default service-name="" use-peer-dns=no user=???
add ac-name="" add-default-route=no allow=pap dial-on-demand=no disabled=no interface=vrrp5 keepalive-timeout=60 \
      max-mru=1480 max-mtu=1480 mrru=disabled name=pppoe-out5 password=??? profile=default service-name="" use-peer-dns=no user=???
add ac-name="" add-default-route=no allow=pap dial-on-demand=no disabled=no interface=vrrp6 keepalive-timeout=60 \
      max-mru=1480 max-mtu=1480 mrru=disabled name=pppoe-out6 password=??? profile=default service-name="" use-peer-dns=no user=???

/ip firewall mangle
add action=mark-routing chain=prerouting disabled=no comment=pcc1 new-routing-mark=to_pppoe1 passthrough=no \
      src-address=192.168.1.0/24 per-connection-classifier=both-ports:3/0
add action=mark-routing chain=prerouting disabled=no comment=pcc2 new-routing-mark=to_pppoe2 passthrough=no \
      src-address=192.168.1.0/24 per-connection-classifier=both-ports:3/1
add action=mark-routing chain=prerouting disabled=no comment=pcc3 new-routing-mark=to_pppoe3 passthrough=no \
      src-address=192.168.1.0/24 per-connection-classifier=both-ports:3/2
=================================================================
script:

:for i from=1 to=3 \
    do={
            :local array
            :if (www.baidu.com count=3 interface="pppoe-out$i"]>0) \
                do={:if (!="to_pppoe$i") \
                            do={/ip firewall mangle set $array new-routing-mark="to_pppoe$i"}} \
                else={:if (!=("to_pppoe".($i+3))) \
                           do={/ip firewall mangle set $array new-routing-mark=("to_pppoe".($i+3))}}
         }


zh1000000 发表于 2016-8-5 01:41:06

cspm333 发表于 2016-8-4 22:06
每個人的設定環境都不一樣 ,小弟先假設您匯出環境是這樣的:
/interface pppoe-client
#光纖


首先非常感谢这位朋友的热心帮助。大致看懂了些,师傅点一点,脑子直接通了一大截。我理解为这样您看对不对。

通过ping和检测拨号的running状态来侦测光纤拨号是否正常,如果不是,就改变每组PCC的new-routing-mark值,让其指定AD对应的线路,是这样吗?


那还有个问题就是,如果光纤线路恢复正常了,会跳回原来的PCC值吗?

zh1000000 发表于 2016-8-5 02:49:55

试了试你的脚本,发现了问题,手动制造了个故障,发现只有PCC1能修改为AD1的mark值,2和3还是光纤线路的mark值没变,看看是不是哪里错了?

cspm333 发表于 2016-8-5 02:58:52

本帖最后由 cspm333 于 2016-8-5 13:20 编辑

要加上光纖自動重撥,其實不難.
因為透過script將光纖換成adsl ,即代表光纖是無效的.
您只要將光纖換成adsl的同時,也要求光纖重撥一次,就這麼簡單:
:for i from=1 to=3 \
    do={
            :local array
            :if (www.baidu.com count=3 interface="pppoe-out$i"]>0) \
                do={:if (!="to_pppoe$i") \
                            do={/ip firewall mangle set $array new-routing-mark="to_pppoe$i"}} \
                else={:if (!=("to_pppoe".($i+3))) \
                           do={/ip firewall mangle set $array new-routing-mark=("to_pppoe".($i+3))}
                        /interface enable "pppoe-out$i"}
         }

如上描束,將pppoe再enable一次,pppoe就重新撥號了.
假如重撥後沒用,下次檢查再使用adsl的同時,又會再重撥光纖一次.

唯有new-routing-mark使用光纖時,光纖才不會重撥.

zh1000000 发表于 2016-8-5 03:01:11

我认为重拨就不用再麻烦script了,因为断网以后,哪怕还是假连接,迟早都会断开,那么光纤线路就一直处于拨号状态,直到线路恢复正常,pppoe正常拨上。

还有就是,已经切换为AD以后,script还是一直在ping百度吧,这样是否不妥当。如果光纤线路一直正常工作,一直ping百度会不会被drop掉IP呢。这样会误动作的。

zh1000000 发表于 2016-8-5 03:07:44

zh1000000 发表于 2016-8-5 02:49
试了试你的脚本,发现了问题,手动制造了个故障,发现只有PCC1能修改为AD1的mark值,2和3还是光纤线路的mar ...

标注好了的,确实只切换了pcc1的

cspm333 发表于 2016-8-5 03:09:06

本帖最后由 cspm333 于 2016-8-5 03:11 编辑

http://imgur.com/a/fhQal

zh1000000 发表于 2016-8-5 03:21:54

明白的,但PCC2和3确实没有切换,是不是脚本认为已经切换pcc1就完成了?

万全一点的办法能不能这样,因为pppoe_out1到3是同一根光纤进来的。就单单指定pppoe_out1为监测对象,当百度ping不通是直接切换MARK为AD123,当光纤正常时再切回来。

具体该怎么改script?

zh1000000 发表于 2016-8-5 03:24:43

不知道怎么截图。我直接复制好了,我图方便改了你写的to_pppoe为L。

> :for i from=1 to=3 \
\...   do={                                             
{...             :local array
{...             :if (www.baidu.com count=3 interface="pppoe-out$i"]>0 && [/interface pppoe-client get "
pppoe-out$i" running]) \
{\...               do={:if (!="L$i") \                     
{{\...                           do={/ip firewall mangle set $array new-routing-mark="L$i"}} \
{\...               else={:if (!=("L".($i+3))) \
{{\...                              do={/ip firewall mangle set $array new-routing-mark=("L".($i+3))}}
{...            }                                                                                    
HOST                                     SIZE TTL TIMESTATUS                                                
14.215.177.38                              5656 19ms
14.215.177.38                              5656 14ms
14.215.177.38                              5656 13ms
    sent=3 received=3 packet-loss=0% min-rtt=13ms avg-rtt=15ms max-rtt=19ms
HOST                                     SIZE TTL TIMESTATUS                                                

HOST                                     SIZE TTL TIMESTATUS                                                
14.215.177.37                              5656 16ms
14.215.177.37                              5656 16ms
14.215.177.37                              5656 15ms
    sent=3 received=3 packet-loss=0% min-rtt=15ms avg-rtt=15ms max-rtt=16ms
HOST                                     SIZE TTL TIMESTATUS                                                

HOST                                     SIZE TTL TIMESTATUS                                                
14.215.177.38                              5656 16ms
14.215.177.38                              5656 16ms
14.215.177.38                              5656 14ms
    sent=3 received=3 packet-loss=0% min-rtt=14ms avg-rtt=15ms max-rtt=16ms
HOST                                     SIZE TTL TIMESTATUS

zh1000000 发表于 2016-8-5 03:46:01

本帖最后由 zh1000000 于 2016-8-5 03:47 编辑

是没提示错误的,三次ping都正常。但为什么不修改第二第三的PCC呢,而且pcc1也是脚本运行了很多次才转换的,我手动断开光纤,脚本运行了6,7次才切换。我设置脚本运行时间为10秒。是怎么回事啊,一头雾水了。

cspm333 发表于 2016-8-5 03:58:05

本帖最后由 cspm333 于 2016-8-5 13:19 编辑

傻瓜script ,總沒道理錯誤吧:o

:if (www.baidu.com count=3 interface=pppoe-out1]>0) \
         do={:if ( new-routing-mark]!="to_pppoe1") \
                     do={/ip firewall mangle set new-routing-mark=to_pppoe1}} \
         else={:if ( new-routing-mark]!="to_pppoe4") \
                     do={/ip firewall mangle set new-routing-mark=to_pppoe4}
                   /interface enable pppoe-out1}

:if (www.baidu.com count=3 interface=pppoe-out2]>0) \
         do={:if ( new-routing-mark]!="to_pppoe2") \
                     do={/ip firewall mangle set new-routing-mark=to_pppoe2}} \
         else={:if ( new-routing-mark]!="to_pppoe5") \
                     do={/ip firewall mangle set new-routing-mark=to_pppoe5}
                   /interface enable pppoe-out2}

:if (www.baidu.com count=3 interface=pppoe-out3]>0) \
         do={:if ( new-routing-mark]!="to_pppoe3") \
                     do={/ip firewall mangle set new-routing-mark=to_pppoe3}} \
         else={:if ( new-routing-mark]!="to_pppoe6") \
                     do={/ip firewall mangle set new-routing-mark=to_pppoe6}
                   /interface enable pppoe-out3}
页: [1] 2 3 4 5
查看完整版本: PCC断线自动修改脚本遇到问题,寻找解决的方法。