前文已經完成 VLAN 與 IP 規劃,也確認虛擬交換器如何搬運未標籤與帶有 802.1Q 標籤的乙太網路訊框。本篇要把這些規劃轉成實際的路由邊界:每個用途擁有獨立廣播域、IP 網段與預設閘道,跨網段流量統一交給 OPNsense。
建立這些介面後,OPNsense 才能看見不同區域之間的流量。哪些連線可以通過,會在下一篇以預設拒絕(Default Deny)、別名(Alias)與防火牆規則實作。
本文閱讀方式
- 完整理解技術與底層原理:依序閱讀全文。
- 掌握完成部署所需的基本概念:優先閱讀標有「⭐」的章節。
- 快速了解當天的部署內容:閱讀文末的 Lab/實作章節。
- 跟著系列建立完整系統:依照 GitHub 詳細部署文件 的天數順序操作。
虛擬區域網路(Virtual Local Area Network,VLAN)可以在同一套實體或虛擬交換網路中建立多個彼此分離的邏輯網路。交換設備要在共用鏈路上辨認每個乙太網路訊框屬於哪個 VLAN,就需要一個共同的標示方式。
早期設備商曾使用各自的 VLAN Trunk 封裝,例如 Cisco 的 ISL。不同廠牌要互相傳遞 VLAN 流量,需要共同標準。電機電子工程師學會(Institute of Electrical and Electronics Engineers,IEEE)旗下的 IEEE 802.1 Working Group 因此制定 802.1Q,統一橋接網路辨認 VLAN 的方式。
IEEE 802.1Q 會在乙太網路訊框中加入 VLAN 標籤。標籤內的 VLAN ID 用來辨認訊框所屬的 VLAN,常見可使用範圍為 1~4094。優先權碼點(Priority Code Point,PCP)則可供服務品質機制標示第二層優先順序。

圖(一)IEEE 802.1Q 在來源 MAC 位址後加入 VLAN 標籤
802.1Q 標籤只需要出現在必須區分多個 VLAN 的傳送路徑。前面已經介紹 Access Port 與 Trunk,這裡簡單複習標籤在哪裡加入、移除與分流:

圖(二)Access Port 只向終端設備交付未標籤訊框

圖(三)Trunk 讓另一端依 VLAN ID 分流
在 PVE 中,VM 網卡設定單一 VLAN Tag 時,由 VLAN-aware Linux Bridge 替 VM 處理標籤。VM 網卡作為 Trunk 時,標籤則保留到能識別 VLAN 的客體作業系統。
前幾天我們已經建立兩種路徑:

圖(四)PVE 與 OPNsense 的 WAN、Management Access Port 及 VLAN Trunk 對照
Management 已由獨立的 vtnet1 負責,本系列不在 vtnet2 重複建立 VLAN 10。重複建立會形成兩條看似通往相同網段的介面,造成路由、ARP 與管理入口難以判讀。
前面提到,同 VLAN 流量可能不會經過 OPNsense。這裡從乙太網路廣播、ARP、MAC 位址與預設閘道簡單說明原因,再銜接 VLAN 介面與跨 VLAN 路由。
交換器會依目的 MAC 位址轉送乙太網路訊框。遇到廣播訊框,則會送往同一個廣播域內的其他連接埠。位址解析協定(Address Resolution Protocol,ARP)也會先用廣播詢問哪一個 MAC 位址持有指定的 IPv4 位址。
所有設備都在同一個廣播域時,ARP、服務探索與其他廣播會同時抵達所有設備。同網段主機也能直接交換訊框,不必經過路由器。中央防火牆因此看不到這些連線,也無法只靠跨介面規則限制它們。
VLAN 會把一套交換網路切成多個獨立廣播域。同一台實體或虛擬交換器可以同時承載多個 VLAN,但交換器只會在相同 VLAN 內學習與轉送對應流量。

圖(五)未分割的交換網路共享同一個廣播域

圖(六)VLAN 將同一套交換設備分成不同廣播域
VLAN 提供乙太網路範圍的隔離。IPv4 網段、預設閘道與安全政策需要另外配置。
主機送出 IPv4 封包前,會使用自己的位址與前綴判斷目的地是否位於本地網段。
目的地在同一個網段時,來源主機先透過 ARP 取得目的主機的 MAC 位址,再直接送出乙太網路訊框。預設閘道不參與這段通訊:

圖(七)同網段主機先以 ARP 廣播解析目的 MAC 位址
來源:Network Academy|What is ARP?
目的地位於其他網段時,來源主機會保留真正的目的 IPv4 位址,但乙太網路訊框會先送給預設閘道的 MAC 位址。路由器收到封包後查詢路由表,再從目的網段的介面送出一個新的乙太網路訊框:

圖(八)同網段直接傳送與跨網段經過路由器的路徑差異
路由器轉送時,來源與目的 IPv4 通常保持不變。每一段乙太網路的來源與目的 MAC 位址則會重新建立。NAT 是否改寫 IPv4 位址是另一項功能,不是跨 VLAN 路由的必要條件。
不同 VLAN 之間的流量必須交給 OPNsense 路由。OPNsense 因此可以記錄來源介面、目的網段與通訊協定,後續再依安全政策放行或阻擋。
同一個 VLAN 內的主機會直接交換訊框。若兩台主機位於相同網段,中央防火牆上的跨區規則通常看不到它們的連線。需要限制同 VLAN 流量時,可採用更細的 VLAN/網段、交換器埠隔離、Private VLAN、分散式防火牆或主機防火牆。
這個差異會直接影響後續設計:
jump01 只連接 Bastion DMZ,不再增加 Management 網卡。管理流量必須經過 OPNsense,避免 jump01 成為繞過防火牆的非預期路由器。ca01 與 PostgreSQL 節點同在 Database VLAN,兩者之間的連線可能不經 OPNsense,因此 ca01 會另外使用主機防火牆限制服務。單臂路由(Router-on-a-stick)是讓一個實體或虛擬介面以 802.1Q Trunk 連接多個 VLAN,再為每個 VLAN 建立邏輯子介面的設計。每個子介面各自配置一個不重疊的 IP 網段,並成為該網段內主機使用的預設閘道。

圖(九)單臂路由在同一個 Trunk 父介面建立多個 VLAN 子介面
OPNsense 的設定分成三個動作:
Parent)上建立帶有 VLAN ID 的 VLAN 裝置(VLAN Device)。介面配置 10.77.20.1/24 後,路由表會形成 10.77.20.0/24 的直接連線路由(Connected Route)。這條路由表示該網段可直接從此介面到達,不必手動指定下一站。其他三個 VLAN 介面也會各自產生一條直接連線路由。
OPNsense 26.7 的 IPv4 gateway rules 用來設定介面與閘道規則的關聯。本系列的內部 VLAN 介面維持 Disabled。這些介面是各 VLAN 用戶端的預設閘道,上游閘道則由 WAN 負責。
前面提到,安全區域會依用途、信任程度與通訊需求組合介面,不必與 VLAN 一對一。多個政策需求相同的介面也可以歸入同一區域。這裡把規劃對應到 VLAN、IP 網段、OPNsense 介面與預設閘道。
VLAN 與 IP 網段是兩種不同的網路設定。VLAN 劃分乙太網路廣播域,決定哪些設備位於同一個第二層網路。IP 網段則定義可直接互相傳送的 IPv4 位址範圍,以及離開該網段時使用的預設閘道。本系列讓 Service、Database、Backup 與 Bastion 分別使用獨立 VLAN,並為每個 VLAN 配置一個 /24 網段與 .1 閘道。
VLAN ID 與 IP 網段彼此獨立,無法互相換算。同一個 VLAN 技術上可以同時使用多個 IP 網段,但這些網段會共享同一個廣播域,不會因此形成新的第二層隔離。本系列採用一個 VLAN 搭配一個 IP 網段的設計,讓廣播域、路由邊界與排錯範圍保持一致。VLAN 裝置指派成 OPNsense 介面並配置 IP 後,才形成可供路由與套用防火牆規則的網路邊界。
本系列採用一個 VLAN、一個 IP 網段、一個 OPNsense 介面對應一個安全區域的簡單設計:

圖(十)各安全區域透過 OPNsense 形成可路由與套用政策的邊界
OpenVPN 後續會建立自己的 Tunnel 網段與來源政策,不需要為它建立另一個 802.1Q VLAN。
從交換到路由依序檢查,可以避免把所有故障都誤判成防火牆規則問題:
DHCP、DNS 與 NTP 都是主機常見的基礎服務。本系列的內部主機採用固定 IP,因此不使用 DHCP。DNS 與 NTP 的通行規則會在下一篇設定。
正文已從 802.1Q 標籤、廣播域與跨網段路由說明 VLAN 如何形成網路邊界。接著在 OPNsense 的 vtnet2 上建立 VLAN 20、30、40 與 50,將每個 VLAN 指派成可管理的介面,並確認介面啟用後會產生對應的直接連線路由。
Management 已由 vtnet1 使用 10.77.10.1/24,因此不在 vtnet2 上重複建立 VLAN 10。今天也不建立服務 VM 或跨 VLAN 防火牆規則,避免把尚未部署的端點與下一篇的安全政策混入介面驗證。
GitHub 詳細實作文件:Day 13|從 VLAN 到安全區域:802.1Q、跨網段路由與 OPNsense 介面
vtnet2 是 VLAN 20~50 的 Trunk 父介面。vtnet2 上建立四個 VLAN 裝置。config.xml 備份。fw01 的 vtnet0 連接 WAN、vtnet1 連接 Management,vtnet2 則透過 VLAN Trunk 承載四個內部安全區域:

圖(十一)本次 Lab 使用的 PVE Bridge 與 OPNsense 介面對照
到 Interfaces → Devices → VLAN,依序建立 vlan0.2.20、vlan0.2.30、vlan0.2.40 與 vlan0.2.50。四個裝置的 Parent 都選 vtnet2,VLAN Tag 則分別填入 20、30、40 與 50:

圖(十二)四個 VLAN 裝置都以 vtnet2 作為父介面
裝置名稱(Device)是 OPNsense/FreeBSD 用來識別介面的名稱,VLAN Tag 才是寫入 802.1Q 標籤的 VLAN ID,兩個欄位必須分別核對。父介面 vtnet2 本身不設定 IP,避免它成為未標籤流量的第三層入口。
到 Interfaces → Assignments,依序加入四個 VLAN 裝置,並將介面命名為 SERVICE、DATABASE、BACKUP 與 BASTION:

圖(十三)將 VLAN 裝置指派成可設定 IP 與套用政策的 OPNsense 介面
VLAN 裝置只負責建立標籤。完成介面指派後,才能在 OPNsense 上替它設定 IP,並在後續建立對應的防火牆規則。
依序進入 SERVICE、DATABASE、BACKUP 與 BASTION,勾選 Enable Interface,將 IPv4 Configuration Type 設為 Static IPv4:

圖(十四)啟用指派後的 VLAN 介面

圖(十五)以 SERVICE 為例設定 VLAN 介面的靜態 IPv4 位址
四個介面的設定如下:
| 介面 | VLAN Tag | 靜態 IPv4 位址 |
|---|---|---|
| SERVICE | 20 | 10.77.20.1/24 |
| DATABASE | 30 | 10.77.30.1/24 |
| BACKUP | 40 | 10.77.40.1/24 |
| BASTION | 50 | 10.77.50.1/24 |
這些位址會成為各網段主機使用的預設閘道。四個介面的 IPv4 gateway rules 維持 Disabled,上游閘道由 WAN 負責。不啟用 DHCP 服務,Block private networks 與 Block bogon networks 也不套用在這些內部介面。逐一儲存後按下 Apply Changes。
從 OPNsense Console 選擇 8) Shell,執行以下完整命令:
ifconfig vlan0.2.20
ifconfig vlan0.2.30
ifconfig vlan0.2.40
ifconfig vlan0.2.50
netstat -rn4
ifconfig 應同時顯示介面為 UP、IPv4 位址、vlan Tag 與 parent interface。以下畫面以 SERVICE 為例,確認 10.77.20.1、VLAN Tag 20 與父介面 vtnet2 已套用:

圖(十六)SERVICE 介面的 IPv4 位址、VLAN Tag 與父介面一致
netstat -rn4 則應出現 10.77.20.0/24、10.77.30.0/24、10.77.40.0/24 與 10.77.50.0/24,而且分別指向對應的 VLAN 介面:

圖(十七)四個 VLAN 介面產生對應的直接連線路由
這些結果證明 OPNsense 已建立並啟用 VLAN 介面,也具備通往四個網段的直接連線路由。本日驗證範圍到 OPNsense 介面與直接連線路由為止。VM VLAN Tag、端到端 Trunk 與跨 VLAN 防火牆政策會在服務 VM 建立後驗證。
| 驗證 | 主要證據 | 可以得到的結論 |
|---|---|---|
| 驗證一:VLAN 裝置 | Device、Parent 與 VLAN Tag 清單 | VLAN 20~50 均已設定 vtnet2 為父介面 |
| 驗證二:介面指派 | Assignments 清單 | 四個 VLAN 裝置已成為可設定的 OPNsense 介面 |
| 驗證三:靜態位址 | Enable Interface 與 Static IPv4 | 四個網段具有各自的 OPNsense 閘道位址 |
| 驗證四:執行狀態 | ifconfig 與 netstat -rn4 |
執行中的標籤、父介面、位址與直接連線路由一致 |
完成後到 System → Configuration → Backups 下載 config.xml。
vtnet2 作為 VLAN 20~50 的 Trunk 父介面,Management 繼續使用獨立的 vtnet1。10.77.20.1/24~10.77.50.1/24 的閘道位址。下一篇〈Day 14|從預設拒絕到最小權限:OPNsense 防火牆的別名與規則順序〉會建立別名、介面群組(Interface Group)、共同基礎規則與明確的規則順序,再逐步開啟必要的跨區流量。