iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0
IT Operation

從裸機到叢集:以 Proxmox VE、Ceph、OPNsense 與 PostgreSQL HA 建立可驗證的安全私有雲系列 第 13

Day 13|從 VLAN 到安全區域:802.1Q、跨網段路由與 OPNsense 介面

  • 分享至 

  • xImage
  •  

前文已經完成 VLAN 與 IP 規劃,也確認虛擬交換器如何搬運未標籤與帶有 802.1Q 標籤的乙太網路訊框。本篇要把這些規劃轉成實際的路由邊界:每個用途擁有獨立廣播域、IP 網段與預設閘道,跨網段流量統一交給 OPNsense。

建立這些介面後,OPNsense 才能看見不同區域之間的流量。哪些連線可以通過,會在下一篇以預設拒絕(Default Deny)、別名(Alias)與防火牆規則實作。

本文閱讀方式

  • 完整理解技術與底層原理:依序閱讀全文。
  • 掌握完成部署所需的基本概念:優先閱讀標有「⭐」的章節。
  • 快速了解當天的部署內容:閱讀文末的 Lab/實作章節。
  • 跟著系列建立完整系統:依照 GitHub 詳細部署文件 的天數順序操作。

⭐ 802.1Q 如何標示不同 VLAN 的訊框

虛擬區域網路(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,常見可使用範圍為 14094。優先權碼點(Priority Code Point,PCP)則可供服務品質機制標示第二層優先順序。

乙太網路訊框加入 IEEE 802.1Q 標籤前後的欄位差異

圖(一)IEEE 802.1Q 在來源 MAC 位址後加入 VLAN 標籤

來源:Wikipedia|IEEE 802.1Q

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

  • Access Port 通常只把終端設備放入一個 VLAN。設備收送一般未標籤訊框,交換設備在 VLAN 邊界加入或移除標籤。

Access Port 在 VLAN 邊界加入或移除 VLAN 標籤

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

  • Trunk 連接在同一條鏈路上承載多個 VLAN,訊框保留 VLAN 標籤,讓另一端依 VLAN ID 分流。

Trunk 保留 VLAN 標籤並承載多個 VLAN

圖(三)Trunk 讓另一端依 VLAN ID 分流

  • 未標籤訊框進入交換埠時,Port VLAN ID(PVID)決定它應歸入哪個 VLAN。部分設備的 Trunk 也能指定 Native VLAN,讓該 VLAN 在鏈路上使用未標籤訊框。兩端設定必須一致,安全邊界的 Trunk 也應只允許明確需要的 VLAN。

在 PVE 中,VM 網卡設定單一 VLAN Tag 時,由 VLAN-aware Linux Bridge 替 VM 處理標籤。VM 網卡作為 Trunk 時,標籤則保留到能識別 VLAN 的客體作業系統。

前幾天我們已經建立兩種路徑:

PVE 的 net0、net1、net2 分別連接 OPNsense 的 WAN、LAN 與 VLAN Trunk

圖(四)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 10 與 VLAN 20 形成不同的乙太網路廣播域

圖(六)VLAN 將同一套交換設備分成不同廣播域

VLAN 提供乙太網路範圍的隔離。IPv4 網段、預設閘道與安全政策需要另外配置。

⭐ 同網段與跨網段的傳送方式

主機送出 IPv4 封包前,會使用自己的位址與前綴判斷目的地是否位於本地網段。

目的地在同一個網段時,來源主機先透過 ARP 取得目的主機的 MAC 位址,再直接送出乙太網路訊框。預設閘道不參與這段通訊:

同網段主機透過 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 會另外使用主機防火牆限制服務。
  • Service VLAN 內的 Proxy、App 與監控節點也能直接通訊。若正式環境需要更強隔離,應拆成不同區域。

⭐ 從 VLAN 子介面建立跨 VLAN 路由

單臂路由(Router-on-a-stick)是讓一個實體或虛擬介面以 802.1Q Trunk 連接多個 VLAN,再為每個 VLAN 建立邏輯子介面的設計。每個子介面各自配置一個不重疊的 IP 網段,並成為該網段內主機使用的預設閘道。

vtnet2 作為 Trunk 父介面承載 VLAN 20、30、40 與 50 子介面
圖(九)單臂路由在同一個 Trunk 父介面建立多個 VLAN 子介面

OPNsense 的設定分成三個動作:

  1. 在承載多個帶標籤 VLAN 的父介面(Parent)上建立帶有 VLAN ID 的 VLAN 裝置(VLAN Device)。
  2. 將 VLAN 裝置指派成可管理的介面(Interface)。
  3. 在介面配置不重疊的靜態 IPv4 位址與前綴。

介面配置 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 介面對應一個安全區域的簡單設計:

本系列將 Management、Service、Database、Backup 與 Bastion DMZ 映射到不同網段

圖(十)各安全區域透過 OPNsense 形成可路由與套用政策的邊界

OpenVPN 後續會建立自己的 Tunnel 網段與來源政策,不需要為它建立另一個 802.1Q VLAN。

⭐ 建立介面前的檢查順序

從交換到路由依序檢查,可以避免把所有故障都誤判成防火牆規則問題:

  1. 廣播域:每種用途是否需要獨立 VLAN,同 VLAN 主機是否真的可以互相信任。
  2. 標籤路徑:Access Port 在哪裡終止標籤,Trunk 允許哪些 VLAN,兩端對標籤的處理是否一致。
  3. 網段:每個 VLAN 是否配置唯一且不重疊的 IP 網段。
  4. 閘道:每個網段內的主機是否使用該 VLAN 介面的 IP 作為預設閘道。
  5. 路由表:介面啟用後是否出現正確的直接連線路由。
  6. 安全政策:跨區連線需求是否已記錄,並準備在預設拒絕上逐條放行。

DHCP、DNS 與 NTP 都是主機常見的基礎服務。本系列的內部主機採用固定 IP,因此不使用 DHCP。DNS 與 NTP 的通行規則會在下一篇設定。

本次 Lab:建立 VLAN 介面並驗證直接連線路由

正文已從 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 介面

本次實作摘要

  1. 確認 fw01 的 vtnet2 是 VLAN 20~50 的 Trunk 父介面。
  2. vtnet2 上建立四個 VLAN 裝置。
  3. 將四個裝置指派為 SERVICE、DATABASE、BACKUP 與 BASTION。
  4. 啟用介面並設定各網段的閘道位址。
  5. 從 OPNsense 命令列(Shell)驗證 VLAN Tag、父介面、IPv4 位址與直接連線路由。
  6. 下載加入 VLAN 後的 config.xml 備份。

驗證一:vtnet2 已設定為四個 VLAN 的父介面

fw01 的 vtnet0 連接 WAN、vtnet1 連接 Management,vtnet2 則透過 VLAN Trunk 承載四個內部安全區域:

PVE 的 net0、net1、net2 分別連接 OPNsense 的 WAN、LAN 與 VLAN Trunk

圖(十一)本次 Lab 使用的 PVE Bridge 與 OPNsense 介面對照

InterfacesDevicesVLAN,依序建立 vlan0.2.20vlan0.2.30vlan0.2.40vlan0.2.50。四個裝置的 Parent 都選 vtnet2,VLAN Tag 則分別填入 20、30、40 與 50:

在 vtnet2 上建立 VLAN 20、30、40 與 50 裝置

圖(十二)四個 VLAN 裝置都以 vtnet2 作為父介面

裝置名稱(Device)是 OPNsense/FreeBSD 用來識別介面的名稱,VLAN Tag 才是寫入 802.1Q 標籤的 VLAN ID,兩個欄位必須分別核對。父介面 vtnet2 本身不設定 IP,避免它成為未標籤流量的第三層入口。

驗證二:VLAN 裝置已指派成 OPNsense 介面

InterfacesAssignments,依序加入四個 VLAN 裝置,並將介面命名為 SERVICE、DATABASE、BACKUP 與 BASTION:

將四個 VLAN 裝置指派為 SERVICE、DATABASE、BACKUP 與 BASTION 介面

圖(十三)將 VLAN 裝置指派成可設定 IP 與套用政策的 OPNsense 介面

VLAN 裝置只負責建立標籤。完成介面指派後,才能在 OPNsense 上替它設定 IP,並在後續建立對應的防火牆規則。

驗證三:四個介面使用各自的閘道位址

依序進入 SERVICE、DATABASE、BACKUP 與 BASTION,勾選 Enable Interface,將 IPv4 Configuration Type 設為 Static IPv4

啟用指派後的 OPNsense VLAN 介面

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

為 SERVICE 介面設定靜態 IPv4 位址 10.77.20.1/24

圖(十五)以 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 networksBlock 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 已套用:

使用 ifconfig 確認 SERVICE 介面的位址、VLAN Tag 與父介面

圖(十六)SERVICE 介面的 IPv4 位址、VLAN Tag 與父介面一致

netstat -rn4 則應出現 10.77.20.0/2410.77.30.0/2410.77.40.0/2410.77.50.0/24,而且分別指向對應的 VLAN 介面:

使用 netstat 確認四個 VLAN 的直接連線路由

圖(十七)四個 VLAN 介面產生對應的直接連線路由

這些結果證明 OPNsense 已建立並啟用 VLAN 介面,也具備通往四個網段的直接連線路由。本日驗證範圍到 OPNsense 介面與直接連線路由為止。VM VLAN Tag、端到端 Trunk 與跨 VLAN 防火牆政策會在服務 VM 建立後驗證。

Lab 驗證對照

驗證 主要證據 可以得到的結論
驗證一:VLAN 裝置 Device、Parent 與 VLAN Tag 清單 VLAN 20~50 均已設定 vtnet2 為父介面
驗證二:介面指派 Assignments 清單 四個 VLAN 裝置已成為可設定的 OPNsense 介面
驗證三:靜態位址 Enable Interface 與 Static IPv4 四個網段具有各自的 OPNsense 閘道位址
驗證四:執行狀態 ifconfignetstat -rn4 執行中的標籤、父介面、位址與直接連線路由一致

完成後到 SystemConfigurationBackups 下載 config.xml

今天完成了什麼

  • vtnet2 作為 VLAN 20~50 的 Trunk 父介面,Management 繼續使用獨立的 vtnet1
  • 建立 SERVICE、DATABASE、BACKUP 與 BASTION 四個 VLAN 介面。
  • 為四個網段設定 10.77.20.1/2410.77.50.1/24 的閘道位址。
  • 從執行中的介面確認 VLAN Tag、父介面與 IPv4 位址已正確套用。
  • 確認四個介面已在 OPNsense 路由表中產生直接連線路由。
  • 保留防火牆規則與端到端 VM 連線驗證,避免用尚未建立的端點推論結果。

下一篇預告

下一篇〈Day 14|從預設拒絕到最小權限:OPNsense 防火牆的別名與規則順序〉會建立別名、介面群組(Interface Group)、共同基礎規則與明確的規則順序,再逐步開啟必要的跨區流量。


參考資料


上一篇
Day 12|WAN 如何連上網際網路:OPNsense 的 DHCP、PPPoE、NAT 與 DDNS
下一篇
Day 14|從預設拒絕到最小權限:OPNsense 防火牆的別名與規則順序
系列文
從裸機到叢集:以 Proxmox VE、Ceph、OPNsense 與 PostgreSQL HA 建立可驗證的安全私有雲15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言