即使沒有設定隧道 IP 位址,Wireguard 也可以運作,也就是設定允許的 IP、端點位址、私鑰和公鑰就足夠了。
在文件中光感,有以下警告:
筆記:隧道位址必須採用 CIDR 表示法,並且必須是您的網路的唯一 IP 和子網路。 [..]請勿使用 /32 (IPv4) 或 /128 (IPv6) 隧道位址
pfSense 有一個可能的解釋:
筆記:系統路由表中不會自動建立路由。除隧道網路本身之外的其他網路的路由必須使用靜態或動態路由單獨配置。
在網路上搜尋並沒有得到太多解釋:
該子網路似乎沒有任何功能,我們做了一些測試:
- 它與本地流量路由無關,即路由到第二個連接的對等點無論是否包含包含兩個對等點的子網路都適用。
- 它與「停留在介面上」與透過核心無關。在這兩種情況下,我們都可以使用防火牆規則來控制流量。
那麼,隧道ip中的子網路遮罩的用途是什麼?
答案1
子網路遮罩什麼也沒做WireGuard 特定的。
WireGuard 本身不使用或關心其介面位址上的子網路遮罩(甚至不使用或關心位址本身)。但是,WireGuard 主機上的網路堆疊和其他網路工具確實關心為每個網路介面註冊的 IP 位址和子網,並將使用它們來嘗試確定特定介面是否直接連接到特定網路。
您觀察到的行為可能會根據您使用的作業系統和特定網路工具(例如OPNSense/pfSense 及其所有雜項外掛程式)而有所不同,但很多內容(例如路由表、防火牆規則、ARP 訊息、鄰居表等)都可能會產生會根據您為每個網路介面配置的 IP 位址和子網路自動進行。然而,在許多情況下,您仍然可以透過自訂路由/防火牆規則、核心設定、網路守護程式配置等來覆寫這些預設值。
例如,當您使用標準啟動 WireGuard 介面時快速工作小組Linux 上的腳本,該腳本將使用ip路由2用於新增您為介面配置的每個位址和子網路的工具。對於新增的每個位址,iproute2 會自動將對應的路由新增至主路由表中以符合該位址的子網路。使用該腳本啟動一個wg0
位址為 的介面10.0.0.123/24
將導致 iproute2 將以下路由新增至主路由表:
10.0.0.0/24 dev wg0 proto kernel scope link src 10.0.0.123
這不是 WireGuard 的問題,它只是 Linux 上一些標準網路工具的預設行為。您可以隨意刪除該路由並添加其他路由,或者只是使用一組不同的工具來設定 WireGuard 介面。 (但請記住,添加到 WireGuard 介面的此路由或任何其他路由在介面自身的配置中沒有相應的AllowedIPs
條目將實際上成為黑洞。)
結果是,在大多數情況下,在 WireGuard 介面上使用具有 /32 或 /128 子網路遮罩的位址是完全可以的。您可以設定自己的路由和防火牆規則,以將所需的任何流量傳送到該介面。但對於更高級的情況 - 特別是當您想要在代理 ARP、NDP 代理、OSPF 等接口上運行工具(用於本地子網內)時 - 您可以避免與這些工具的默認行為作鬥爭通過將WireGuard介面及其虛擬鄰居分配到一致的邏輯子網路。