程式碼

2026年3月22日 星期日

Openwrt 使用MACVLAN

 前言:

    目前Openwrt的主路由器當中,設定了3組pppoe作為連外的網路,分別為static_wan/wan/iot_wan,區分為固定IP 提供服務用/動態IP 作為內網NAT的主界面/動態IP 作為IOT裝置需連外網用。原先的設定是br-lan  (wan, lan2.1, lan3, lan4, lan5)上撥號。在使用約兩個月後發現在重啟Network服務的時候在三個pppoe撥號上線很常會超過120秒,推測原因可能是1. 在br-lan上撥號時可能PADI封包亂跑, 2. 3個界面的都是在br-lan所以可能有資源互搶, 3. 3個界面同時撥號時可能某個端點搞混了封包跑錯了地方。再加上這種架構下,3個撥號界面都是使用到br-lan的MAC Address可能造成混亂,所以就來動工了。


目的:

    將3個ppp界面所使用的裝置獨立出來同時使用不同的MAC Address,並且維持內網與Modem(小烏龜)同網段,之所以會將wan放進br-lan的這種不符合常見邏輯的設定的目的,就是為了存取Modem同時又可以觀看IPTV(MOD)。


環境:

    路由器設備 Mikrotik RB760iGS

    路由器系統 Openwrt 23.05.3

    路由器樓接介面與橋接設定

    static_wan: br-lan

    wan: br-lan

    iot_wan: br-lan

    lan: br-lan

    iot_lan: br-lan2.3

    br-lan: wan, lan2.1, lan3, lan4, lan5

    br-lan2: lan2 with vid 1U/3T


    交換器設備HP 2520G-8-POE

    交換器VLAN: 

        VID1 Defautl _VLAN, 1 4 5 6 8 9 10

        VID2 Modem_VLAN, 2 3 7

        VID3 IOT_VLAN, 4t 5t 6t 8t

    路由器WAN 與交換器P7對接

    路由器LAN2與交換器P5對接

    交換器P2與Modem對接


實作:

    在經過數次的實驗,最後是使用MAC VLAN完成…

    1. 安裝MAC VLAN套件

        opkg install kmod-macvlan

    2. 建立MAC VLAN裝置

        LuCI主選單->Network->Interface, 點選Device

        加入裝置設定 加入裝置設定 選擇 MAC VLAN, 基礎裝置 選擇 wan,模式 選擇 橋接,名稱 預設即可,MAC Address 手動輸入同時避免與其它裝置重複,之後按下儲存,重複三次建立三個裝置。



        將原先br-lan中的wan取消點選。

    3. 修改網路界面使用的裝置

        LuCI主選單->Network->Interface

        將要修改的wan改成剛剛新建立的MAC VLAN裝置,這邊可能會需要重啟Network服務後全部的裝置才能正常…

        常見幾個錯誤…

        DEVICE_CLAIM_FAILED: 找不到指定的裝置,可能kmod-macvlan沒安裝或是MAC Address有衝突造成無法建立裝置,即便在LuCI當中有設定完成,可能實際在建立時發生錯誤沒有在LuCI上表現出來,需要進ssh確認。

        一般的錯誤: 如果後面有括號類似NEGOTIATION FAILED大都是撥號過程當中由ISP回傳的訊息,如果沒有括號的就有可能是與Modem的通訊不良,可能就需要進一步的修改設定或是檢查連線。

        曾經有發生過3個虛擬裝置中固定一個無法撥號完成,將界面指定到另一個則會完成,推測可能是因為被ISP Block掉MAC Address,放個一陣子之後才會正常,可以先將連不上的界面選到其它可以連線的界面,然後過段時間再試著改回去原本的試試看。


        當撥號成功就會看到3個IP並且可以連線,此時會因為第2步從br-lan拿掉wan所以無法從內網去連線到Modem的。接下來就會針對從內網中直接Modem進行設定。

        Openwrt中的LAN2是連接到HP 2520G-8-POE的交換器上,同時交換器上有設定3個VLAN分別為VID1: Default_VLAN,VID2: Modem_VLAN,VID3: IOT_VLAN。而Openwrt中設了br-lan2只有lan2同時帶VID1 Untag與VID3 Tagged作為區網隔離。此時在br-lan2增加VID2 Tagged同時將br-lan2.2加進br-lan的橋接裝置,即可以完成Modem直連了。


修改後的vlan與br-lan設定

    static_wan: wanmac0

    wan: wanmac1

    iot_wan: wanmac2

    lan: br-lan

    iot_lan: br-lan2.3

    br-lan: lan2.1, lan2.2, lan3, lan4, lan5

    br-lan2: lan2 with vid 1U/2T/3T

    交換器VLAN: 

        VID1 Defautl _VLAN, 1 4 5 6 8 9 10

        VID2 Modem_VLAN, 2 3 5t 7

        VID3 IOT_VLAN, 4t 5t 6t 8t

    路由器WAN 與交換器P7對接

    路由器LAN2與交換器P5對接

    交換器P2與Modem對接


    至此已完成預期的功能了,然而是有發現在改這些之後有發現負載比原本的高,根據AI Mode的說法是MT7621AT的HWNAT不支援MACVLAN所以負載會重一些,但還不致於影響效能…

    原先為了Modem直連有試著再產生一個wanmac3併入br-lan,在驗證的時候用ping Modem時沒有回應,進一步驗證的時候發現Modem有回應封包,但被擋掉了。AI Mode的建議是改用NAT的方式進行,相對的複雜很多,後來才想到用br-lan2.2併進br-lan的方式完成。

    有再試著用br-wan搭配vlan的方式讓MT7621AT的HWNAT可以運作,但沒有成功。如果要可以成功可能需要與Modem的LAN也打開vlan互相配合了,比如說Modem開3個vlan對應Openwrt的3個撥號介面這樣。只是修改Modem的設定比較不切實際。


沒有留言:

張貼留言