主頁 >  其他 > 我為什么不鼓吹 WireGuard

我為什么不鼓吹 WireGuard

2021-01-29 06:59:21 其他

原文鏈接:https://fuckcloudnative.io/posts/why-not-wireguard/

最近有一款新型 VPN 工具備受矚目,相信很多人已經聽說過了,沒錯就是 WireGuard,傳言它有望取代 IPSecOpenVPN,那么 WireGuard 是否真的有傳說中的那么神奇?今天我就來一一解讀,

這是一篇非常長的文章,我建議你先去沖杯咖啡,然后邊喝咖啡邊看,

首先要宣告:我并沒有詆毀 WireGuard 的意思,WireGuard 很棒很優秀,但總是有某些無腦媒體天天說 WireGuard 即將取代 IPSecOpenVPN,這我就不能忍了,今天就來和你們好好掰扯掰扯 WireGuard,

WireGuard 白皮書

本文所有的觀點都是針對 Jason Donenfeld 撰寫的 WireGuard 白皮書,其他的博客和檔案不在我的討論范圍之內,白皮書的第一句話是這么說的:

WireGuard 的目標是在大多數場景下取代 IPsec 和其他基于用戶空間和 TLS 的 VPN(例如 OpenVPN),與其他 VPN 相比,它更簡單、更高效、更容易使用,

可以看到,WireGuard 最大的賣點就是簡單,大多數新技術也都是這個營銷套路,當然,作為一款 VPN 產品,它還有性能和安全這兩個賣點,

有趣的是,作為 VPN,如果你不簡單、不安全、性能不好,那你可能就沒有機會了,這不止是你 WireGuard 的設計目標,其他的 VPN 產品也是這么干的好嗎?

最有趣的部分是 “在大多數場景下” 這幾個字,媒體報道時直接將其洗掉了,混淆大眾的視聽,

WireGuard 能否取代 IPSec?

不!CiscoJuniper 等大廠不可能使用 WireGuard,除非迫不得已,他們是不會上 WireGuard 的車的,后面我會詳細解釋為什么即使他們想賣 WireGuard 服務也賣不出去,

WireGuard 實作了 Road Warrior?

當然沒有,Road Warrior 是具有動態分配 IP 地址的移動客戶端,比如筆記本電腦,你可以直接理解為漫游,WireGuard 目前不能使用動態 IP 來建立連接,要想實作漫游功能,還有很長的路要走,

WireGuard 有一個子專案叫 wg-dynamic,它增加了一個用戶空間守護程式來使 WireGuard 支持動態 IP,然而這個專案最后一次更新是在 2019 年,不知道還維護不維護了,,,

大家都知道,IPv6 就是動態尋址的,如果將來全面進入 IPv6 的世界,WireGuard 還怎么用?從商業角度來看,這是相當令人失望的,

WireGuard 的設計目標之一是保持協議的精簡,現在看來是精簡過頭了,以至于需要更多的輔助軟體才能使它發揮強大的功效,

WireGuard 真的好用嗎?

并沒有,我并沒有說 WireGuard 最終不能替代其他 VPN 產品,我只是說目前 WireGuard 還不行,如果它的目標和我們理解的一樣,目前它還只是處在 Alpha 階段,

WireGuard 到底想解決什么問題?IPsec 真的很難用嗎?

恐怕不是這樣,如果廠商做了正確的功課,并提供了易于使用的界面(比如,IPFire),就不會難用,

要想建立一個 IPSec 隧道,只需要輸入 5 組資訊:你的公網地址、peer 的公網地址、子網、你的預共享秘鑰和 peer 的預共享秘鑰,這樣看來,幾分鐘就可以建立一個隧道,而且每個廠商之間都是兼容的,

當然,也有一些例外,比如與 OpenBSD 系統之間建立隧道,程序可能會比較痛苦,

協議復雜度真的很重要嗎?

作為終端用戶,其實無需考慮協議的復雜度,

如果復雜度真的影響很大,我們肯定早就擺脫 SIPH.323FTP 等不能很好地應對NAT的協議了,然而并沒有,講道理,IPsec 比 WireGuard 更復雜是有原因的:它能做的事情太多了,比如,使用用戶名/密碼或帶有 EAPSIM 卡進行用戶認證;也可以擴展新的加密方式,

而 WireGuard 呢?這些功能都沒有,這就意味著當某一天它的固定的那些加密方式被破解或削弱了之后,就徹底崩盤了,

WireGuard 作者說過:

WireGuard 在加密方式上比較偏執,故意砍掉了加密協議的敏捷性,不支持擴展加密協議,因為這么做會大大降低軟體的復雜度,如果底層的加密協議出現了漏洞,只能更新所有端點來修復漏洞,

我非常同意他這句話里闡述的觀點,因為協商使用何種方式來加密會使 IKETLS 等協議變得更復雜,那么,是我們想不開刻意要搞這么復雜嗎?當然不是啊,即使這樣,在握手程序中也會經常發現各種漏洞,不復雜能行嗎?除此以外,別無他法,

如何更新密碼?

想象一下,你有一個 VPN 服務器,為 200 多個 Road Warrior 客戶端提供服務,而且這些客戶端分布在世界各地,假設現在你改了密碼,那么就需要同時更新所有客戶端的密碼才能正常作業,這簡直就是不可能的事情,作為管理員,你可能會需要幾個月的時間來下方更改后的配置,

IPsecOpenVPN 就沒有這些煩惱,它們都有秘鑰協商功能,可以將新秘鑰逐步更新到所有客戶端,在漫長的更新程序中,仍在使用舊秘鑰的客戶端仍然有效,直到所有客戶端更新完畢后,才會棄用舊秘鑰,整個程序中客戶端不會有任何察覺,也不需要重啟,

加密方式

WireGuard 使用以下加密技術來保障資料的安全:

  • 使用 ChaCha20 進行對稱加密,使用 Poly1305 進行資料驗證,
  • 利用 Curve25519 進行密鑰交換,
  • 使用 BLAKE2 作為哈希函式,
  • 使用 HKDF 進行解密,

而 IPSec 和 OpenVPN 使用的都是標準的 ChaCha20-Poly1305 加密演算法,

BLAKE2演算法是 BLAKE 演算法的升級版,而 BLAKESHA-3 的入圍者,與 SHA-2 非常相似,所以沒有獲獎,如果哪天 SHA-2 被破解了,BLAKE 也很有可能被破解,

IPSec 和 OpenVPN 使用的加密方式和 WireGuard 是類似的,比如對稱加密使用的是標準的 ChaCha20-Poly1305 演算法,唯一沒有用到的就是 BLAKE2,因為它目前沒有列入標準,即使不用 BLAKE2,也沒什么大不了的,因為 VPN 是使用 HMACs 來保障資料的完整性,即使使用 MD5 也仍然沒問題,

我的結論是:實際上所有的 VPN 都可以使用相同的加密技術,WireGuard 在加密或資料完整性方面并沒有比其他的 VPN 更安全或更不安全,

然而白皮書上說了,加密不是重點,速度才是,

好吧,那我們就來看看速度是不是真的有那么快,

WireGuard 真的很快嗎?

答案是否定的,

ChaCha20 是一種流加密演算法,一次只加密一個位元,使用軟體更容易實作,而像 AES 這樣的分塊加密方式,會將明文分成多個等長的模塊,每次加密 128 位的模塊,這種加密方式在硬體中實作時需要更多的晶體管,所以大型處理器都帶有一個指令集擴展 -- AES-NI,它可以提高加密和解密的速度,

今天你能買到的任何一款智能手機都帶有 AES 的硬體加速功能,在這些硬體中使用 AES 會比 ChaCha20 加密解密更快、更節能,幾乎所有的個人 PC 和服務器的 CPU 都帶有 AES-NI,加密解密速度就更不用說了,因此,我預計 AES 在幾乎所有場景下表現都會優于 ChaCha20

然而,WireGuard 的白皮書又說了,ChaCha20-Poly1305 的性能優于 AES-NI,但該指令集只適用于大型處理器,對普通 PC 和移動硬體沒有任何幫助,所以并沒有什么卵用,

WireGuard 執著于一種加密演算法,我覺得不好,而 IPSec 允許你選擇不同的加密演算法,這樣就可以根據不同的使用場景選擇最合適的加密演算法,例如,傳輸 10G 或更多的資料,

既然 WireGuard 選擇了更現代的加密方式,就會帶來很多問題,比如,由于 Linux 內核中缺乏支持這些加密方式的模塊,導致 WireGuard 并沒有使用 Linux 內核提供的模塊,要推遲好幾年才能用上 Linux 內核提供的模塊,我不知道其他作業系統是什么情況,但可能也沒有什么不同,

理想與現實

假設 WireGuard 真的很完美,大廠就一定會用嗎?

現實情況是,每次當客戶要求我幫他們搭建 VPN 時,給到他們手里的證書都是使用舊的加密方式,通常是 3DESMD5 結合,或者 AES-256SHA1 結合,至于秘鑰交換,我們一直在使用 RSA,雖然速度很慢,但足夠安全,

大部分客戶都和政府機構或巨頭公司有關,他們在我們這里的訂單表還是幾十年前的,根本就沒有添加過 SHA-512 的選項,所以阻止創新的不一定是技術,而是緩慢的企業流程,

看到這種情況,我也很痛心?我就不想使用新技術嗎?當然想啊,IPsec 從 2005 年左右就開始支持橢圓曲線加密演算法了,Curve25519 演算法現在也支持了,也有了 AES 的替代方案(比如 CamelliaChaCha20),但很顯然并不是所有的大廠都愿意去適配,比如思科等,思科是這個領域的市場領導者,他們對推動創新其實并不感興趣,

基準測驗

白皮書中還提到了 WIreGuard 的基準測驗,雖然這不是一篇科學論文,但我仍然希望以科學的方法來進行基準測驗,如果測驗不能重復,那么它就毫無價值;如果測驗沒有考慮實際場景,也毫無價值,

WireGuard 的 Linux 版本使用 GSO(Generic Segmentation Offloading,通用分段卸載)來創建一個 64k 位元組的巨大資料包,并一次性對其進行加密或解密,以此來獲得速度優勢,這樣一來,初始化和呼叫加密操作的開銷就被節省了,如果你想最大限度地提高吞吐量,這倒是一個好主意,

然而現實不是這樣的,你想向網路配接器發送如此大的資料包,就需要將其切割成許多小資料包,通常為 1500 位元組,對于 64k 位元組的超大資料包來說,會被切割成 45 個資料包(每個資料包有 1480 位元組的有效載荷和 20 位元組的 IP 頭),這些資料包將會阻塞網路配接器相當長的時間,因為它們想要被一次性發送出去,像 VoIP 呼叫這樣應該優先處理的資料包也不得不慢慢等著,

因此,WireGuard 宣稱的高吞吐量是通過讓其他應用變慢來獲得的,官方團隊已經承認了這一點,

我們再來看看基準測驗的最終資料,吞吐量為 1011 MBit/s

這個資料令人印象深刻,我至今仍感到疑惑,在資料包大小為 1500 位元組的情況下,一個千兆以太網鏈路的最大理論吞吐量為 966 MBit/s,減去 20 個位元組的 IP 頭、8 個位元組的 UDP 頭和 16 個位元組的 WireGuard 頭,再減去封裝資料包中的另一個 IP 頭和另一個 20 個位元組的 TCP 頭,額外的帶寬到底從哪來的?

OK,假設啟用了巨型幀和 GSO9000 位元組幀大小時的理論最大值將是 1014 MBit/s,如果使用更大的巨型幀,理論最大值為 1023 MBit/s,然而這在現實中是絕對不實用的,因為開銷太大了,而且只能在服務器直連的情況下使用,通常 VPN 都是通過互聯網連接的,完全不支持巨型幀,所以這樣的基準測驗根本不切實際,永遠不可能在現實世界中使用,

最侄訓想

WireGuard 的官方網站寫了很多關于容器的內容,很明顯這應該就是 WireGuard 的目的,

通過一個簡單迅速的 VPN 來實作容器通信的 CNI,可以通過 Kubernetes 等大型容器編排工具來快速部署,針對吞吐量和大于 9000 位元組的資料包進行了優化,可以快速分發容器鏡像,等等,

這一切的種種都好像是為容器而設計的,不得不承認超精簡、超優雅、超快速,

但是,它根本不是為資料中心以外的世界而設計的,在外面的世界,你必須要在協議的設計和實作上做出妥協,

總結

我最終的結論是:WireGuard 還沒有準備好,

它是作為一個輕量級和快速的解決方案來起草的,以解決現有解決方案中的一些問題,但不幸的是,它犧牲了許多與用戶相關的功能,因此無法取代 IPsec 和 OpenVPN,

你至少得有動態地址分配和推送路由等配置的功能吧?這些功能都是需要進行秘鑰協商的,

此外,安全性是重中之重,目前我還沒發現 IKE 或者 TLS 有啥明顯的缺陷,它們都支持現代加密方式,而且都經過了幾十年的審計,不能僅僅因為某些東西是新的,就覺得它是好的,

加密方式總會過時,押注在一種加密方式身上,當這種加密方式不再安全時,你該何去何從?


Kubernetes 1.18.2 1.17.5 1.16.9 1.15.12離線安裝包發布地址http://store.lameleg.com ,歡迎體驗, 使用了最新的sealos v3.3.6版本, 作了主機名決議配置優化,lvscare 掛載/lib/module解決開機啟動ipvs加載問題, 修復lvscare社區netlink與3.10內核不兼容問題,sealos生成百年證書等特性,更多特性 https://github.com/fanux/sealos ,歡迎掃描下方的二維碼加入釘釘群 ,釘釘群已經集成sealos的機器人實時可以看到sealos的動態,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/253862.html

標籤:其他

上一篇:物以類聚人以群分:聚類分析的一些挑戰和進展

下一篇:新年送禮哪家強?盤點各大互聯網公司送的新年禮盒!

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more