PCC断线自动修改脚本遇到问题,寻找解决的方法。
一直用论坛的PCC自动修改脚本,多年来都没什么问题,今天有客人说上不了网。打开马上就发现问题所在。所有pppoe链接正常,个别线路没有数据通过。先不管是机房还是线路问题吧。这样脚本检测就失效了。默认还是链接状态,所以没有修改PCC参数。导致断流或者上不了网。有没有不检测PPPOE状态的切换方法或者脚本呢?
你需的是检修线路 脚本 script多加個ping值判斷即可,
不只pppoe的狀態要running ,而且透過router ping向指定的遠端時也要能通暢.
(ping可以用interface這參數指定出口)
script運作時,即使pppoe的running=yes ,但ping的輸出等於0 ,也得判定pppoe是無效的.
這樣的script就不會再出包了 感谢楼上的朋友的热心回复。当时想过用Watchdog来检测线路状态。由于时间太忙就没深究。
线路状况是这样的。3条20M光纤做PCC,3条ADSL的8M做PCC备用,平时不开的。用防断线脚本自动改PCC参数脚本,因为光纤线路稳定些,而且线路带宽不一样跟AD混着做没必要,基本上都没出过问题。
近段时间出现光纤线路的PPPOE状态都是connected状态,但是没有数据流量。手动拨号就会发现全部不能拨号状态,单独试过错误代码是651。这些应该是机房的问题了。所以我就想把备用的AD用上,在光纤不能正常拨号的时候自动切换到AD的PCC。
可能表达的不是很清楚,毕竟也是略懂而已。所以脚本那些语句我是不会写的,是不是在PCC检测脚本里加一句类似:set a 这类的?
还望赐教,最好能帮写完整的句柄。感谢 本帖最后由 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))}}
}
cspm333 发表于 2016-8-4 22:06
每個人的設定環境都不一樣 ,小弟先假設您匯出環境是這樣的:
/interface pppoe-client
#光纖
首先非常感谢这位朋友的热心帮助。大致看懂了些,师傅点一点,脑子直接通了一大截。我理解为这样您看对不对。
通过ping和检测拨号的running状态来侦测光纤拨号是否正常,如果不是,就改变每组PCC的new-routing-mark值,让其指定AD对应的线路,是这样吗?
那还有个问题就是,如果光纤线路恢复正常了,会跳回原来的PCC值吗?
试了试你的脚本,发现了问题,手动制造了个故障,发现只有PCC1能修改为AD1的mark值,2和3还是光纤线路的mark值没变,看看是不是哪里错了? 本帖最后由 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使用光纖時,光纖才不會重撥. 我认为重拨就不用再麻烦script了,因为断网以后,哪怕还是假连接,迟早都会断开,那么光纤线路就一直处于拨号状态,直到线路恢复正常,pppoe正常拨上。
还有就是,已经切换为AD以后,script还是一直在ping百度吧,这样是否不妥当。如果光纤线路一直正常工作,一直ping百度会不会被drop掉IP呢。这样会误动作的。 zh1000000 发表于 2016-8-5 02:49
试了试你的脚本,发现了问题,手动制造了个故障,发现只有PCC1能修改为AD1的mark值,2和3还是光纤线路的mar ...
标注好了的,确实只切换了pcc1的
本帖最后由 cspm333 于 2016-8-5 03:11 编辑
http://imgur.com/a/fhQal 明白的,但PCC2和3确实没有切换,是不是脚本认为已经切换pcc1就完成了?
万全一点的办法能不能这样,因为pppoe_out1到3是同一根光纤进来的。就单单指定pppoe_out1为监测对象,当百度ping不通是直接切换MARK为AD123,当光纤正常时再切回来。
具体该怎么改script? 不知道怎么截图。我直接复制好了,我图方便改了你写的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:47 编辑
是没提示错误的,三次ping都正常。但为什么不修改第二第三的PCC呢,而且pcc1也是脚本运行了很多次才转换的,我手动断开光纤,脚本运行了6,7次才切换。我设置脚本运行时间为10秒。是怎么回事啊,一头雾水了。 本帖最后由 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}