WireGuard 是未來偉大的 VPN 嗎?

WireGuard 是未來偉大的 VPN 嗎?

VPN 不再是大鬍子系統管理員的奇特工具的時代已經到來。 用戶有不同的任務,但事實是VPN已經成為每個人的必需品。

當前 VPN 解決方案的問題在於,它們難以正確配置、維護成本高昂,並且充滿了質量可疑的遺留代碼。

幾年前,加拿大信息安全專家 Jason A. Donenfeld 認為受夠了,並開始研究 WireGuard。 現在 WireGuard 正準備納入 Linux 內核,甚至獲得了來自 萊納斯·托瓦爾茲美國參議院.

WireGuard 聲稱相對於其他 VPN 解決方案的優勢:

  • Простой в использовании。
  • 採用現代密碼學:Noise協議框架、Curve25519、ChaCha20、Poly1305、BLAKE2、SipHash24、HKDF等。
  • 緊湊可讀的代碼,更容易調查漏洞。
  • 高性能。
  • 清晰且精心製作 規格.

銀彈找到了嗎? 是時候埋葬 OpenVPN 和 IPSec 了嗎? 我決定解決這個問題,但同時我也這麼做了 自動安裝個人VPN服務器的腳本.

工作原理

其工作原理可描述如下:

  • 創建 WireGuard 接口,並為其分配私鑰和 IP 地址。 加載其他對等點的設置:它們的公鑰、IP 地址等。
  • 所有到達 WireGuard 接口的 IP 數據包都封裝在 UDP 中 安全交付 其他海盜。
  • 客戶端在設置中設置服務器的公共IP地址。 當來自客戶端的經過正確驗證的數據時,服務器會自動了解客戶端的外部地址。
  • 服務器可以在不中斷工作的情況下更改公共IP地址。 同時,它會向連接的客戶端發送通知,他們將動態更新其配置。
  • 使用了路由的概念 加密密鑰路由。 WireGuard 根據對等方的公鑰接收和發送數據包。 當服務器解密經過正確驗證的數據包時,會檢查其 src 字段。 如果與配置相符 allowed-ips 經過身份驗證的對等方,然後 WireGuard 接口接收數據包。 當發送一個傳出數據包時,會發生相應的過程:獲取數據包的 dst 字段,並根據它選擇相應的對等點,使用自己的密鑰對數據包進行簽名,使用對等點的密鑰進行加密並發送到遠程端點。

WireGuard的整個核心邏輯不到4千行代碼,而OpenVPN和IPSec則有數十萬行代碼。 為了支持現代加密算法,建議在 Linux 內核中包含一個新的加密 API。 。 目前,人們正在討論這個想法有多好。

Производительность

最大的性能優勢(與 OpenVPN 和 IPSec 相比)在 Linux 系統上將非常明顯,因為 WireGuard 是作為內核模塊實現的。 此外,還支持 macOS、Android、iOS、FreeBSD 和 OpenBSD,但它們在用戶空間中運行 WireGuard,從而產生所有隨之而來的性能影響。 預計在不久的將來會添加 Windows 支持。

基準測試結果 官網:

WireGuard 是未來偉大的 VPN 嗎?

我的使用體驗

我不是 VPN 設置專家。 有一次我用手柄設置了 OpenVPN,非常沉悶,IPSec 甚至沒有嘗試。 要做的決定太多,很容易搬起石頭砸自己的腳。 因此,我一直使用現成的腳本來配置服務器。

因此,從我的角度來看,WireGuard 通常是用戶的理想選擇。 所有低級決策均在規範中做出,因此準備典型 VPN 基礎設施的過程只需幾分鐘。 Nafakapit在配置上幾乎是不可能的。

安裝過程 詳細描述 在官方網站上,我想單獨指出優秀的 OpenWRT 支持.

加密密鑰由實用程序生成 wg:

SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )

接下來,您需要創建服務器配置 /etc/wireguard/wg0.conf 包含以下內容:

[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32

並用腳本建立隧道 wg-quick:

sudo wg-quick up /etc/wireguard/wg0.conf

在帶有 systemd 的系統上,您可以使用它 sudo systemctl start [email protected].

在客戶端機器上,創建一個配置 /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.9.0.2/24
[Peer]
PublicKey = $SERVER_PUBKEY
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820 # Внешний IP сервера
PersistentKeepalive = 25 

以同樣的方式升高隧道:

sudo wg-quick up /etc/wireguard/wg0.conf

剩下的就是在服務器上配置 NAT,以便客戶端可以訪問 Internet,就完成了!

代碼庫的這種易用性和緊湊性是通過消除密鑰分發功能來實現的。 沒有復雜的證書系統和所有這些企業恐怖,短加密密鑰的分發方式大致類似於 SSH 密鑰。 但這帶來了一個問題:WireGuard 在某些現有網絡中實施起來並不容易。

在缺點中,值得注意的是 WireGuard 無法通過 HTTP 代理工作,因為只有 UDP 協議作為傳輸。 問題來了,是否有可能混淆協議? 當然,這不是VPN的直接任務,但是對於OpenVPN來說,例如有辦法將自己偽裝成HTTPS,這有助於極權國家的居民充分使用互聯網。

發現

總而言之,這是一個非常有趣且有前途的項目,您已經可以在個人服務器上使用它。 利潤是多少? Linux 系統上的高性能、易於設置和維護、緊湊且可讀的代碼庫。 不過,現在急於將復雜的基礎設施轉移到 WireGuard 還為時過早,值得等待納入 Linux 內核。

為了節省我(和你)的時間,我開發了 電線防護自動安裝程序。 有了它,您可以為自己和您的朋友設置個人 VPN,甚至無需了解任何內容。

來源: www.habr.com

添加評論