WireGuard 是由 Jason A Donenfeld 開發的自由及開源加密 VPN 程式及協議，旨在獲得比 IPsec 和 OpenVPN 更好的效能，後兩者都是常見的隧道協議。WireGuard 協議的流量經由 UDP 傳輸。 2020 年 3 月，該軟體的 Linux 版本達到了穩定的生產版本，並被納入 Linux 56 核心，並在一些 Linux 發行版中向後移植到早期的 Linux 核心。Linux 核心元件在 GNU 通用公共許可證（GPL）版本 2 下獲得許可；其他實現則在 GPLv2 或其他自由 開源許可證下獲得許可。 協議 WireGuard 使用以下協議： Curve25519 用於金鑰交換 ChaCha20 用於對稱加密 Poly1305 用於訊息認證碼 用於雜湊表鍵 BLAKE2s 用於加密雜湊函式 用於金鑰派生函式 僅基於 UDP 用於傳輸 Base64 編碼的私鑰、公鑰和預共享金鑰 2019 年 5 月，INRIA 的研究人員使用釋出了 WireGuard 協議的機器驗證證明。 可選的預共享對稱金鑰模式 WireGuard 支援模式，該模式提供了一層額外的對稱加密，以減輕未來量子計算的進步帶來的風險。這消除了流量被儲存後，未來可能被量子計算機解密的風險，因為量子計算機最終可能破解 Curve25519（Wireguard 中基於非對稱金鑰的金鑰交換方法）。預共享金鑰 從金鑰管理的角度來看通常很麻煩，而且可能更容易被盜，但在短期內，如果對稱金鑰被洩露，Curve25519 金鑰仍能提供足夠的保護。 網路 WireGuard 僅使用 UDP，這是因為 TCPoverTCP 存在潛在的缺點。在基於 TCP 的連線上隧道化 TCP 被稱為 TCPoverTCP，這樣做會導致傳輸效能急劇下降（該問題被稱為 TCP 熔斷，）。當一個 TCP 連線被承載於另一個 TCP 連線之上時，就可能發生 TCP 熔斷：基礎層遇到問題的時候會嘗試進行補償，而其（被承載著的）上層則會因此過度補償，這種過度補償會導致延遲並使傳輸效能下降。 其預設伺服器埠為 UDP 之 51820。 WireGuard 完全支援 IPv6，無論是在隧道內部還是外部。它僅支援第 3 層的 IPv4 和 IPv6，並且可以封裝 v4inv6，反之亦然。 MTU 開銷 WireGuard 的開銷細分如下： 20 位元組的 IPv4 報頭或 40 位元組的 IPv6 報頭 8 位元組的 UDP 報頭 4 位元組的型別 4 位元組的金鑰索引 8 位元組的隨機數 N 位元組的加密資料 16 位元組的身份驗證標籤 MTU 操作注意事項 假設傳輸 WireGuard 資料包的底層網路保持 1500 位元組的 MTU，則將所有相關對等方的 WireGuard 介面配置為 1420 位元組的 MTU 是傳輸 IPv6IPv4 流量的理想選擇。但是，當僅承載傳統的 IPv4 流量時，WireGuard 介面的 MTU 可以設定為更高的 1440 位元組。 從操作角度和網路配置一致性來看，選擇為 WireGuard 介面配置 1420MTU 是有利的。這種方法確保了一致性，並促進了將來為 WireGuard 對等方和介面啟用 IPv6 的更平穩過渡。 注意事項 在某些情況下，例如，一個對等方位於 MTU 為 1500 位元組的網路之後，而另一個對等方位於 LTE 等無線網路之後，運營商通常會選擇遠低於 1420 位元組的 MTU。在這種情況下，主機的底層 IP 網路堆疊將對 UDP 封裝的資料包進行分片併發送，但隧道內的包將保持一致，並且不需要分片，因為將檢測對等方之間的 MTU（在本例中為 1420 位元組）並在對等方之間傳送固定大小的資料包。 可擴充套件性 WireGuard 旨在由第三方程式和指令碼進行擴充套件。這已被用於增強 WireGuard 的各種功能，包括更友好的管理介面（包括更輕鬆的金鑰設定）、日誌記錄、動態防火牆更新、動態 IP 分配，以及 LDAP 整合。 從最小的核心程式碼庫中排除此類複雜功能可以提高其穩定性和安全性。為了確保安全性，WireGuard 限制了實現加密控制元件的選項，限制了金鑰交換過程的選擇，並將演算法 對映到現代的一小部分。如果在任何原語中發現缺陷，可以釋出解決該問題的新版本。 反響 ArsTechnica 的一篇評論發現，WireGuard 易於設定和使用，使用了強大的加密演算法，並且程式碼庫最小，攻擊面小。 WireGuard 已獲得開放技術基金會的資助，並接受了 Mullvad、Private Internet Access、IVPN、NLnet 基金會和 OVPN 的捐贈。 俄勒岡州參議員 Ron Wyden 已建議美國國家標準與技術研究院評估 WireGuard 作為現有技術的替代方案。 可用性 實現 WireGuard 協議的實現包括： Donenfeld 使用 C 語言和 Go 語言編寫的初始實現。 Cloudflare 的 BoringTun，一個使用 Rust 語言編寫的使用者空間實現。 Matt Dunwoodie 為 OpenBSD 編寫的使用 C 語言的實現。 Ryota Ozaki 為 NetBSD 編寫的使用 C 語言的 wg 4 實現。 FreeBSD 的實現是用 C 語言編寫的，並且與 OpenBSD 的實現共享大部分資料路徑。 自 2021 年 8 月起，名為 wireguardnt 的原生 Windows 核心實現。 支援 FritzOS 739 及更高版本的 AVMFritzBox 調製解調 路由器。從 750 版本開始允許站點到站點的 WireGuard 連線。 歷史 程式碼庫的早期快照存在於 2016 年 6 月 30 日。WireGuard 的四個早期採用者是 VPN 服務提供商 Mullvad，AzireVPN，IVPN 和 cryptostorm。該協議標誌的靈感源於 Jason Donenfeld 在參觀德爾斐的博物館時見到的一塊希臘神話中的巨蟒石刻。 2019 年 12 月 9 日，Linux 網路堆疊的主要維護者 DavidMiller 接受了 WireGuard 補丁到 netnext 維護者樹中，以便包含在即將釋出的核心中。 2020 年 1 月 28 日，Linus Torvalds 合併了 David Miller 的 netnext 樹，WireGuard 進入了 mainline Linux 核心樹。 2020 年 3 月 20 日，Debian 開發人員在其 Debian 11 版本（測試版）的核心配置中啟用了 WireGuard 的模組構建選項。 2020 年 3 月 29 日，WireGuard 被納入 Linux 56 版本樹。Windows 版本的軟體仍處於測試階段。 2020 年 3 月 30 日，Android 開發人員在其通用核心映像中添加了對 WireGuard 的原生核心支援。 2020 年 4 月 22 日，NetworkManager 開發人員 BeniaminoGalvani 在 GNOME 中合併了對 WireGuard 的 GUI 支援。 2020 年 5 月 12 日，Matt Dunwoodie 提出了在 OpenBSD 中對 WireGuard 的原生核心支援的補丁。 2020 年 6 月 22 日，在 MattDunwoodie 和 Jason A Donenfeld 的努力下，WireGuard 支援被匯入 OpenBSD。 2020 年 11 月 23 日，Jason A Donenfeld 釋出了 Windows 軟體包的更新，改進了安裝、穩定性、ARM 支援和企業功能。 2020 年 11 月 29 日，WireGuard 支援被匯入 FreeBSD13 核心。 2021 年 1 月 19 日，在 pfSense 社群版 CE 250 開發快照中添加了對 WireGuard 的預覽支援。 2021 年 3 月，在 FreeBSDWireGuard 中緊急程式碼清理無法快速完成之後，核心模式 WireGuard 支援從仍在測試中的 FreeBSD130 中刪除。 基於 FreeBSD 的 pfSense 社群版 CE 250 和 pfSense Plus 2102 也刪除了基於核心的 WireGuard。 2021 年 5 月，WireGuard 支援作為 pfSense 社群成員 Christian McDonald 編寫的實驗包重新引入 pfSense CE 和 pfSense Plus 開發快照中。pfSense 的 WireGuard 軟體包包含了最初由 Netgate 贊助的 Jason A Donenfeld 正在進行的核心模式 WireGuard 開發工作。 2021 年 6 月，pfSense CE 252 和 pfSense Plus 2105 的官方軟體包儲存庫都包含了 WireGuard 軟體包。 2023 年，WireGuard 從德國的獲得了超過 200000 歐元的支援。 參見 虛擬私人網路 OpenSSH 註釋 參考來源 外部連結 WireGuard 官網 WireGuard 原始碼 WireGuard 原始碼 GitHub 映象 WireGuard Android 客戶端 WireGuard iOS 客戶端 WireGuard macOS 客戶端 Category 網路協議 Category 網路安全 Category 安全軟體 Category 開放原始碼 Category 用 Go 程式設計的自由軟體 Category 穿隧協議 Category 虛擬私人網路