MikroTik hAP ac² - 在逆向翻墙自动修正断link的script
在逆向翻墙自动修正断link的script
我们从大陆VPN到香港,然后通过这条link反大陆,就如你身在大陆一样,用大陆IP看CCTV5,CCTV5+,奇艺网。但是这种逆向翻墙回大陆有一个不好的地方就是,大陆VPN过来的link经常会断,那么每次都有去router重置一些settings,这做成极不方便,为了解决这个问题,我写了一个script,能格5分钟就检查一次,如果断了就会自动更正。有时间我会解析一下这个script原理。
下面的script放在哪里?用GUI,点击[system]->[Scripts]就可以。
Script name: Res-China-IP- :local a (/interface find name=pptp-China)
- :local b ([/ip firewall nat get [find comment=China-IP] out-interface]="<pptp-China>")
- :if (!b && a) do={
- /ip route set [find comment="China Gateway"] gateway=<pptp-China>
- /ip firewall nat set [find comment=China-IP] out-interface=<pptp-China>
- :log info "China IP NAT and Route were updated.";
- }
複製代碼 .
01. Define local variable a, which receives the truth value of (/interface find name=pptp-China).
China给大陆vpn过来的user login ID,大家根据自己的settings来决定。a 将会是 true or false. 用括号是提取expression的true value。
02. Define local variable b,which receives the truth value of "([/ip firewall nat get [find comment=China-IP] out-interface]="<pptp-China>")".
这句比较长,大家看先从里面看。首先ip firewall nat table里有那么多条rules,script怎样知道在哪条rule找呢?我用的方法是先把某条rule先一些comment,然后通过这个comment找到那条rule的ID。Rule ID是什么,你打开nat rule table就知道(/ip/firewall/nat/print),在表里左手边的数字就是rule ID。忘了说一句这个中括号[]有什么用? 这是把return value,不是truth value,truth value用括号(),其他用[], 因为ID是数字value,所以用[]。“[/ip firewall nat get [find comment=China-IP] out-interface]”, 就是提取了那个rule的out-interface是什么?然后做logical comparision with “pptp-China”。如果是就通过括号()给出true,otherwise给false。
04:if (!b && a) do,这一步就是看看是nat的b = not(out-interface="pptp-China") and 大陆vpn过来过来的Link是否ready?如果 (!b && a)是true的就进行修改,什么是true?如果不是就scheduler再trigger后再检查。
Scheduler- /system scheduler
- add interval=5m name=Res-China-Gateway on-event=\
- "/system script run Restore-China-IP"
複製代碼 |