在當今的數位時代,設定一個安全且專屬的家用網路變得越來越重要。透過使用開源軟體 OpenWRT,我們可以輕鬆地為家中的網路設備建立專屬的虛擬局域網(VLAN),以提供更高程度的安全性與隔離性。
在本篇文章中,我們將透過一個實作範例,詳細介紹如何設定 OpenWRT,將一台路由器切割成兩個 VLAN 區域,並讓這兩個區域互不影響。每個 VLAN 區域都會分到不同的 IP 網段,而且皆有對應的 Wifi 無線網路(2.4G 和 5G)可供使用。最後,我們也會確保每一個 VLAN 區域都能夠對外上網。
這篇文章適合具有基礎網路知識,且對於設定 VLAN 有興趣的讀者。我們將會帶領你逐步了解 VLAN 的基本概念,並實際操作如何在 OpenWRT 中進行設定。
我們用一些筆者自身有用過的機種來做設定範例,詳細探討其中設定值的差異,供大家學習。希望透過本篇文章,你可以瞭解如何透過 OpenWRT 來打造一個安全、專屬的家用網路環境。
那麼,就讓我們開始吧!
設定 VLAN 進行網路隔離 系列文:
- 用 OpenWRT 設定 VLAN 進行網路隔離 – 以 TOTOLINK-X500R 為例
https://blog.jks.coffee/openwrt-vlan-settings-totolink-x500r/
-
用 OpenWRT 設定 VLAN 進行網路隔離 – 以 ASUS RT-AC58U 為例
https://blog.jks.coffee/openwrt-vlan-settings-rt-ac58u/ -
[教學] 用 OpenWRT 做分離式上網設定 (以 小米路由器mini 為例)
https://blog.jks.coffee/setup-isolated-zone-with-openwrt-and-xiaomi-mini/
範例環境說明
假設你的對外網路有一個光世代的盒子(小烏龜),
你透過 DHCP 配發 IP 的方式來上網
我們把一台路由器分成二個 VLAN 區域:
VLAN100
網段 192.168.10.0/24VLAN200
網段 192.168.20.0/24
接孔對應:
- 指定第一埠為
VLAN100
- 指定第二埠為
VLAN200
示意圖如下
等效網路拓墣如下
等於是你在小烏龜這邊裝了一台 Switch,
底下各裝一台 Wifi Router 路由器,各自設定獨立的 IP 位址與網段,
實現完全隔離的網路。
而我們全部都在一台路由器就完成了這件事情,
一般的家用路由器沒辦法做到這樣的功能,
但 OpenWRT 可以,這也是它厲害的地方。
我們把範例情境做複雜一點,
假設我們家用區域很大,是個三層樓透天厝,ADSL 主線在一樓,
想要二樓與三樓都延伸以上雙 VLAN 的情境。要怎麼做?
- 指定第四埠為
VLAN100
、VLAN200
的 trunk port - 多新增一台設定類似的路由器,我們暫稱它為子機
- 多拉一條網路線,來連接母機與子機
示意圖變成如下:
等效網路拓墣如下
原本我們應該需要二台路由器、二條網路線、二台 Switch hub 來延伸這個完全隔離的網路,歸功於 VLAN 與 trunk port 的功能,我們使用二台路由器,一條網路線就可以做到一樣的事情了。
我們用華碩 ASUS RT-AC58U 來實作這個範例,
有因為硬體特性與原廠驅動設計問題,而步驟有一點點不同,
尤其這台較特別,需要另外說說
這次使用的版本為 OpenWrt 22.03.5 20134-515225c1e 供參考。
設定步驟
Step0. 觀察原有設定值
在開始設定之前,我們先觀察一下原有路由器的設定值,
據經驗,這部分不同機器還是會有些微差異,也記錄一下。
RT-AC58U 原有的設定值是這樣子
Network > Interface 頁面,Interfaces 頁籤
Network > Interface 頁面,Devices 頁籤
Network > Switch 的頁面
Network > Wireless 頁面
快速整理一下:
- 有 Network > Switch 的頁面
- 只有
eth1
,eth2
二個 eth - 有一個 Bridge 介面
- 預設綁定 VLAN 1 給 LAN 使用
- 預設綁定 VLAN 2 給 WAN 使用
(這段網頁管理介面沒有顯示,預設是隱藏的,這也是這台特別之處)
Step1. 修改原有 bridge 介面
到 Network > Switch 頁面
設定 VLAN ID,剛剛有提到這台 VLAN 2 是保留給 wan 使用的,而且它 預設在網頁管理介面是隱藏的
這部分我們等一下再來處理
VLAN ID | CPU (eth0) | LAN 1 | LAN 2 | LAN 3 | LAN 4 |
---|---|---|---|---|---|
100 | t | u | off | u | t |
200 | t | off | u | off | t |
到這邊只能按下「Save」存檔,不可按 Save & Apply,不然 會直接斷線!
然後到 Network > Interfaces 頁面,選擇預設的 lan 裝置
General Settings 部分
- Protocol: Static address
- IPv4 address: 192.168.10.1 (Edit)
- IPv4 netmask: 255.255.255.0
- Device: Switch VLAN: "eth0.100"
記得將 Device 調整為 Software VLAN: "eth0.100"
不然會整個連管理介面都連不上。
按 Save and Apply 套用設定
因為有修改路由器 IP,這個時候要更換瀏覽的網址。
http://192.168.1.1/ 要換成 http://192.168.10.1/ 然後重新登入。
Step 3. 設定第二個 VLAN
我們在 Network > Interfaces 的頁面中
按「Add New Interface…」按鈕,新增第二個介面
- Name: lan200
- Protocol: Static address
- Device:
Software VLAN: "eth0.200"
然後接續設定設定值
General Settings 區域
- Protocol: Static address
- IPv4 address: 192.168.20.1
- IPv4 netmask: 255.255.255.0
- Device: Switch VLAN: "eth0.200"
到 DHCP Server 頁籤,設定 DHCP 伺服器
(只有主要的那台路由器需要開,其他台必須關掉此設定值)
原本會顯示 No DHCP Server configured for this interface
按「Set up DHCP Server」按鈕啟動 DHCP 伺服器
DHCP Server > General Setup
- Start: 2
- Limit: 254
這邊設定的是 DHCP 伺服器發放 IP 位址的開始與結束區段,依需求修改
預設給 100 – 150,它可以是 2 – 254
Step4. 防火牆設定
(主要那台路由器需要設定,子機可以不用設定)
到 Network > Firewall 頁面
來到 Firewall – Zone Settings 頁面, General Settings 頁籤
依樣畫葫蘆,按 Add 新增一個區域
-
Name: lan200 (名字可以自己取)
-
Input: accept
-
Output: accept
-
Forward: accept
-
Covered networks: lan200 (Switch VLAN: "eth0.200")
Covered networks 為應用網路區域,這邊選擇前面設定的 lan200
- Allow forward to destination zones:
wanwan (Ethernet Adapter: "eth1") wan6 (Ethernet Adapter: "eth1")
轉送 (forward) 區域,這邊選擇 wan, wan6 即可。
第二個 VLAN 能不能正確上網就看這個設定了。
設定 Wi-Fi
這邊設定 Wi-Fi 步驟就相對簡單
這台它有二個頻段 2.4GHz 與 5GHz
分別設定為
-
SSID: OpenWRT_lan100
-
設定您的密碼
-
對應 VLAN100
-
SSID: OpenWRT_lan200
-
設定您的密碼
-
對應 VLAN200
-
SSID: OpenWRT_lan100_5G
-
設定您的密碼
-
對應 VLAN100
-
SSID: OpenWRT_lan200_5G
-
設定您的密碼
-
對應 VLAN200
這邊應該很直覺,注意不要選錯即可。
Wi-Fi 設定步驟如下:
到 Network > Wireless 頁面
在 radio0.network1 區域,修改原有的 2.4GHz Wi-Fi
General Setup
- Operating frequency
- Mode: N
- Channel: 1 (2412 Mhz)
- Width: 20 MHz
Interface Configuration
General Setup
- Mode: Access Point
- ESSID: OpenWRT_lan100
- Network: lan (Switch VLAN: "eth0.100")
Interface Configuration
Wireless Security
- Encryption: WPA2-PSK/WPA3-SAE Mixed Mode (strong security)
- Key: (Your password)
這邊記得設定你的 Wi-Fi SSID 與密碼,注意不要選錯 vlan 介面
在 radio0.network1 區域,新增一個 2.4GHz 的 Wi-Fi
General Setup
- Operating frequency
- Mode: N
- Channel: 1 (2412 Mhz)
- Width: 20 MHz
Interface Configuration
General Setup
- Mode: Access Point
- ESSID: OpenWRT_lan200
- Network: lan200 (Switch VLAN: "eth0.200")
Interface Configuration
Wireless Security
- Encryption: WPA2-PSK/WPA3-SAE Mixed Mode (strong security)
- Key: (Your password)
這邊記得設定你的 Wi-Fi SSID 與密碼,注意不要選錯 vlan 介面
在 radio1.network1 區域,新增一個 5GHz 的 Wi-Fi
General Setup
- Operating frequency
- Mode: AC
- Channel: 36 (5180 Mhz)
- Width: 80 MHz
Interface Configuration
General Setup
- Mode: Access Point
- ESSID: OpenWRT_lan100_5G
- Network: lan (Switch VLAN: "eth0.100")
Interface Configuration
Wireless Security
- Encryption: WPA2-PSK/WPA3-SAE Mixed Mode (strong security)
- Key: (Your password)
這邊記得設定你的 Wi-Fi SSID 與密碼,注意不要選錯 vlan 介面
在 radio1.network1 區域,新增一個 5GHz 的 Wi-Fi
General Setup
- Operating frequency
- Mode: AC
- Channel: 36 (5180 Mhz)
- Width: 80 MHz
Interface Configuration
General Setup
- Mode: Access Point
- ESSID: OpenWRT_lan200_5G
- Network: lan200 (Switch VLAN: "eth0.200")
Interface Configuration
Wireless Security
- Encryption: WPA2-PSK/WPA3-SAE Mixed Mode (strong security)
- Key: (Your password)
這邊記得設定你的 Wi-Fi SSID 與密碼,注意不要選錯 vlan 介面
Step 5. 修正 WAN 上網介面
這步驟算是 RT-AC58U 特有的步驟,
你會發現整個設定完畢卻無法辦法對外上網,這是正常的
因為剛剛有提到
這台 VLAN 2 是保留給 wan 使用的,而且它 預設在網頁管理介面是隱藏的
所以我們現在要來修正這件事情
使用 ssh 指令連線到路由器:
$ ssh [email protected]
(註:ssh 指令在 Windows powershell 有內建,或者用 putty 都可以)
我們需要直接修改 /etc/config/network
這個檔案
vi /etc/config/network
要比對一下設定檔,如果沒有這個段落的話,要手動加上這段
# this is the VLAN mapping for the internet port
config switch_vlan
option device 'switch0'
option vlan '1'
option vid '2'
option ports '0t 5'
然後重啟網路服務
$ /etc/init.d/network restart
然後測試,應該就可以連上網路了。
Step6. 連接第二台路由器(子機)
我們來實作示意圖上的第二台路由器
第二台(甚至以上)的路由器,設定跟前面非常類似,
唯有幾個需要確認:
- DHCP Server 為關
- 有線網路的對應網段與 VLAN 號碼,都要正確
- Wi-Fi 帳號、密碼、對應網段與 VLAN 號碼,都要正確
然後將 trunk port 與 trunk port 用網路線,連接在一起,這樣就完成了。
文字介面設定參考
我保留了當初右上角系統透過介面自動產生的指令,供大家參考。
如果需要其他文章的話,才知道大概在講什麼。
基本上它就是用 uci
指令來做操作而已,所屬的設定檔案都已經列在註解上了,
# /etc/config/dhcp
uci del dhcp.lan.ra_slaac
uci set dhcp.lan.start='2'
uci set dhcp.lan.limit='254'
uci set dhcp.lan200=dhcp
uci set dhcp.lan200.interface='lan200'
uci set dhcp.lan200.start='100'
uci set dhcp.lan200.limit='150'
uci set dhcp.lan200.leasetime='12h'
uci set dhcp.lan200.start='2'
uci set dhcp.lan200.limit='254'
# /etc/config/firewall
uci add firewall zone # =cfg0edc81
uci set firewall.@zone[-1].name='lan200'
uci set firewall.@zone[-1].input='ACCEPT'
uci set firewall.@zone[-1].output='ACCEPT'
uci set firewall.@zone[-1].forward='ACCEPT'
uci add_list firewall.@zone[-1].network='lan200'
uci add firewall forwarding # =cfg0fad58
uci set firewall.@forwarding[-1].src='lan200'
uci set firewall.@forwarding[-1].dest='wan'
# /etc/config/network
uci add network switch_vlan # =cfg0b1ec7
uci set network.@switch_vlan[-1].device='switch0'
uci set network.@switch_vlan[-1].vlan='2'
uci set network.cfg0a1ec7.ports='0t 4 2 1t'
uci set network.cfg0a1ec7.vid='100'
uci set network.@switch_vlan[-1].ports='0t 3 1t'
uci set network.@switch_vlan[-1].vid='200'
uci set network.lan.device='eth0.100'
uci set network.lan.ipaddr='192.168.10.1'
uci set network.lan200=interface
uci set network.lan200.proto='static'
uci set network.lan200.device='eth0.200'
uci set network.lan200.ipaddr='192.168.20.1'
uci set network.lan200.netmask='255.255.255.0'
uci set network.lan200.type='bridge'
# /etc/config/wireless
uci set wireless.radio0.cell_density='0'
uci set wireless.default_radio0.ssid='OpenWrt_lan100'
uci set wireless.default_radio0.encryption='sae-mixed'
uci set wireless.default_radio0.key='YOUR_PASSWD'
uci del wireless.radio0.disabled
uci set wireless.wifinet2=wifi-iface
uci set wireless.wifinet2.device='radio0'
uci set wireless.wifinet2.mode='ap'
uci set wireless.wifinet2.ssid='OpenWrt_lan200'
uci set wireless.wifinet2.encryption='sae-mixed'
uci set wireless.wifinet2.key='YOUR_PASSWD'
uci set wireless.wifinet2.network='lan200'
uci set wireless.radio1.cell_density='0'
uci set wireless.default_radio1.ssid='OpenWrt_lan100_5G'
uci set wireless.default_radio1.encryption='sae-mixed'
uci set wireless.default_radio1.key='YOUR_PASSWD'
uci del wireless.radio1.disabled
uci set wireless.wifinet3=wifi-iface
uci set wireless.wifinet3.device='radio1'
uci set wireless.wifinet3.mode='ap'
uci set wireless.wifinet3.ssid='OpenWrt_lan200_5G'
uci set wireless.wifinet3.encryption='sae-mixed'
uci set wireless.wifinet3.key='YOUR_PASSWD'
uci set wireless.wifinet3.network='lan200'