[RouterOS] 自動重播 PPPoE-client 以取得特定網段 IP Address

前言

最近觀察到知名花店業者某些浮動 IP 連外特別塞,所以寫了以下腳本來協助取得連外速度較佳的 IP 位置

相關討論:111夜間聯陸暴PING~石牌二機房過海纜第一站300ms

腳本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#Script:
# Auto Redial PPPoE-client
#Version:
# RouterOS v6.37
#Descript:
# 自動重播PPPoE-client以取得特定網段IP Address
#History:
# 2014/01/10 Relk(http://blog.downager.com/)
#---------------------------------------------------------------
#在此設定PPPoE Interface及所需要的IP網段
:local PPPoEInt "Hinet-PPPoE-out";
:local Network 1.160.0.0/12;

#取得Interface IP address
:local IntIPAddress [/ip address get [find interface=$PPPoEInt] address];
:set IntIPAddress [:pick $IntIPAddress 0 [:find $IntIPAddress "/"]];
:local CheckIP ([:toip $IntIPAddress] in $Network);

#確認目前IP是否在目標網段內
:if ($CheckIP = false) do={
:do {
/interface pppoe-client disable $PPPoEInt;
/interface pppoe-client enable $PPPoEInt;
:log info ($PPPoEInt . ": " . $IntIPAddress);
:log info ($PPPoEInt . ": " . "IP不符需求");
:delay 10;
#重新寫入新取得的IP
:set IntIPAddress [/ip address get [find interface=$PPPoEInt] address];
:set IntIPAddress [:pick $IntIPAddress 0 [:find $IntIPAddress "/"]];
:set CheckIP ([:toip $IntIPAddress] in $Network)} while=($CheckIP = false)}
:log info ($PPPoEInt . ": " . $IntIPAddress);
:log info ($PPPoEInt . ": " . "IP符合需求");

另外,也可以使用此 script 搭配 Multi-Session PPPoE 做策略路由,進一步優化連外速度。

參考資料