2020年3月5日 星期四

OPENWRT與DD-WRT 組合應用於IPTV的環境當中. VLAN設定

因為種種原因, IPTV set-top box 必需與Modem直接連線, 在自家透天厝的環境當中就得需要拉兩條網路線才能夠同時提供無線上網的涵蓋, 以及IPTV的觀看.

目前每台電視旁邊都放了台無線AP(兩台TPLINK Archer C8與一台Linksys WRT1200AC). 同時也已經拉好網路線接上了, 不想再拉第二條線讓線變得複雜, 而且Modem本身只提供4 Port的接口, 而目前已經用了3個了 (長輩網路用, 第一台STB, 無線網路), 而剩的一個則是保留, 如果有需要對Modem作修改的時候用的...

預期是要有下圖般的網路, 其中右下角的三台STB是要等設定完才會正常動作.




1. 因為WNDR3800內部的硬體架構(後述), 沒辦法用WAN完成要作的事, 所以要將LAN4切成VLAN並作為WAN, 再將LAN1~3設成一個VLAN並與WAN作Bridge. 在設定先Save(不要Apply)再去Interface重新指定PPPOE介面為eth0.2, 並將eth0.1與eth1作Bridge成為LAN. 再Apply. 這時候你的LAN1~3皆都無法使用, 因為已經變成Tagged Port. 所以建議是把WNDR3800的WIFI AP打開, 並用無線連接. 或是從實體的WAN Port去連接.

2. Archer C8的VLAN設定, 要將WAN設為Trunk Port, 並且劃分出VLAN 1與2, VLAN 1作為原本的LAN使用, 而VLAN 2作為IPTV使用. 這部份因為DD-WRT已經提供了圖形化介面, 所以直接勾一勾就好. 依照以下順序作操作.
Setup -> Basic Setup -> WAN Connection Type: Disable, Save.
Basic Setup -> Advanced Route -> Operating Mode: Router, Save.
Setup -> Switch Config-> Uncheck WAN, Uncheck ALL in VLAN 0 (If checked), Check Tagged on W (Scroll Down), Check W 1 2 3 on VLAN 1, Check W 4 on VLAN 2, Save.
Setup -> Networking -> Networking Configuration vlan 2 -> Bridge Assignment: Unbridged, Multicasting Forward: Enable, Net Isolation: Enable, Save.
Apply or Reboot
這時候就可以等開獎看結果了.


3. WRT1200AC則又是不一樣的設定方式, 雖然DD-WRT有提供了GUI, 但實際使用上卻不如C8那樣. 而這台用的是Marvell的SoC與Switch. 同時又是較特別的配置方式 (後述) 所以得靠swconfig作設定. 使用UART連線比較不會設定到一半炸掉, 但這要拆機殼 所幸是沒有太多的卡準就是了. 也可以用ssh 只是設定錯的時候在apply時就會需要炸掉一次(30/30/30 reset).
經過反覆的試驗結果, 是只要輸入以下幾行指令 並存成開機指令就可以了.
swconfig dev switch0 set reset 1
swconfig dev switch0 set enable_vlan 1
swconfig dev switch0 vlan 1 set ports "1 2 3 4t 6"
swconfig dev switch0 vlan 2 set ports "0 4t"
swconfig dev switch0 set apply 1
其中有一個port_based的參數預設為0, 當設成1反而會有問題
另外在WAN Connection Type等地方也如同C8的設定相同.


至此已經可以達成預期的功能, 如果在接IPTV的接口上接電腦並自動取得IP時會取得192.168.0.x的IP, 而其它接口則是192.168.1.x, 表示VLAN的功能已經完成了.

WNDR3800使用OPENWRT 19.07.0-rc2
DD-WRT三台都是v3.0-r42174 std (01/30/20)

後記1.
WNDR3800用的是AR7161 + RTL8366S. RTL8366S是一個6 port的Switch IC, 裡面含的是一個6 Port Switch Core以及2 Port的RGMII. SoC與Switch之間是透過RGMII連接, 其中一個RGMII(eth1)透過Switch內部結構與WAN Port的P4 GMAC相連. 因此從swconfig dev switch0 show看到的結果是P4永遠都是Link Down. 而另一個RGMII(eth0)則是使用P5 GMAC並與Switch內的Core連接 而在OPENWRT的GUI上則顯示為CPU(eth0). 如下圖


而OPENWRT的VLAN function是建立在Switch Core可以控制的範圍內, 而WAN port沒有經過Switch Core, 因此無法對WAN進行VLAN的設定控制, 用原本架構是辦不到預期的功能.
因此衍生出將LAN4改成WAN, 同時將WAN改成LAN去接NAS.


後記2.
WRT1200AC其實有點類似WNDR3800. 差別是在於Switch用的是7 Port, 同時全部的Port都有接進Switch Core當中. 預設的架構是LAN 1~4對應到Port 3~0, WAN對應Port 4. eth0對應Port 5與WAN相連, eth1對應Port 6與LAN相連.
而DD-WRT的GUI設定VLAN只有針對Broadcom有較好的成果, 其它家的都還是得靠swconfig進行設定. 實際使用上在GUI設定完後會導致一定要回復初始設定才能夠繼續使用.

在預設環境下是將0 1 2 3 6接在一起作為LAN, 4 5接在一起作為WAN. 考慮到預期的效果, 因此先用swconfig將0 1 2 3 4 6設為VLAN 1, 並將網路線從LAN 1 2 3 4與WAN接都有取得同一個ip, 表示此時變成一個5 Port的switch. 接著再將VLAN 1改為1 2 3 4t 6, VLAN 2改為0 4t再測試接LAN4為192.168.0.x, 接LAN1~3為192.168.1.x.
VLAN 2如果設0 4t 5會造成廣播風暴 因此不能用

後記3.
那台WNDR3800本體是D-Link 825 B1. 改過DRAM/Flash/UBOOT才變成3800的 純粹爽而已. 平時都是關WIFI, 只撥號與dhcp server.



沒有留言:

張貼留言