會造成 RouterBoard 的 PPPoE 斷線重連,有夠怪的問題
這個問題追了好久,終於找到兩者竟然有關聯
經過多次驗證,確認了這個關聯性,就在機上盒關機後的兩分鐘(正負5秒),
RouterBoard 的 PPPoE 必定斷線重連
Log 呈現大概是這樣
交叉測試已知的結果:
- 只有影響 RouterBoard,手邊兩台(註2)都有這狀況,同時間用 Linux 電腦撥號的不影響,RouterOS CHR 版本也不影響
- 6.x 版及 7.x 版都有此狀況(註3),6.x 版斷線時間較長,大約30秒到1分鐘,可以察覺到斷線,7.x 版只是瞬斷,PING 只會掉一個包或甚至沒掉,沒看 Log 應該無法察覺有斷線
- 跟假固定 IP 無關 (HNnumber@ip.hinet.net)
- 跟數據機後面的 Port 位無關
註1: MOD 機上盒型號 MOD502A,HiNet 數據機型號 Alcatel-Lucent I-040GW
註2: 按電源開關整個關機,非遙控器按鈕
註3: 兩台型號是 RB2011UiAS-2HnD 及 RB3011UiAS
註4: 測試時的版本是 6.49.17 及 7.16.1
問題的答案:
經過抓包後找到答案,在機上盒關機後兩分鐘,
頭端設備都會送出一個 PPPoED Active Discovery Terminate (PADT) 斷線訊號
此封包是在 RouterBoard packet sniffer 抓的
第一個封包,是頭端設備(Nokia BRAS)送 PADT 給機上盒(L2封包),此時已經是關機兩分鐘,
Port Down,MAC Address 會直接消失在數據機的 MAC Table
數據機的 Switch 晶片在處理上就用廣播的方式送出 PADT 封包,所以直接接在數據機後面的都可以收到 PADT
RouterBoard 在收到 PADT 封包時,沒有判斷 Dest MAC Address 不是給自己的,直接 PPPoE 斷線反應,
接電腦抓封包並不會看到這個包,看起來是有判斷 Dest MAC Address 不是給自己的所以 Drop 該封包
解決方式:
若是使用 7.x 的 RouterOS,此問題造成的斷線重連其實無感,不需特別去解。
要解的話也簡單,在下面多接一台 Switch 即可,機上盒接 Switch,不要直接接數據機,
MAC Address 的 aging time 通常是 300 秒。
接在 Switch 下的機上盒關機了,數據機的 MAC Table 並不會立刻消失,
當頭端要送出 PADT 封包時,因為 MAC entry 仍在,所以不會用廣播方式,
如此 RouterBoard 就不會收到 PADT 封包,也就不會斷線重連了。
後續觀察數據機的 MAC Table,並沒有 aging time 300 秒的機制,跟一般 Switch 的行為不同,
曾經學過的 MAC 都不會消失,只會多,不會少,除非 Port Down。