WireGuard 教程:WireGuard 的工作原理
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
無論你是想破墻而出,還是想在服務(wù)器之間組網(wǎng),WireGuard 都不會讓你失望,它就是組網(wǎng)的『樂高積木』,就像 ZFS 是構(gòu)建文件系統(tǒng)的『樂高積木』一樣。 WireGuard 與其他 威屁恩 協(xié)議的性能測試對比: 可以看到 WireGuard 直接碾壓其他 威屁恩 協(xié)議。再來說說 WireGuard 優(yōu)點:
WireGuard 不能做的事:
當(dāng)然,你可以使用 WireGuard 作為底層協(xié)議來實現(xiàn)自己想要的功能,從而彌補上述這些缺憾。 本系列 WireGuard 教程分為兩個部分,第一部分偏理論,第二部分偏實踐。本文是第一部分,下面開始正文教程。 1. WireGuard 術(shù)語 Peer/Node/Device連接到 威屁恩 并為自己注冊一個 威屁恩 子網(wǎng)地址(如 192.0.2.3)的主機。還可以通過使用逗號分隔的 CIDR 指定子網(wǎng)范圍,為其自身地址以外的 IP 地址選擇路由。 中繼服務(wù)器(Bounce Server)一個公網(wǎng)可達(dá)的對等節(jié)點,可以將流量中繼到 子網(wǎng)(Subnet)一組私有 IP,例如 CIDR 表示法這是一種使用掩碼表示子網(wǎng)大小的方式,這個不用解釋了。 NAT子網(wǎng)的私有 IP 地址由路由器提供,通過公網(wǎng)無法直接訪問私有子網(wǎng)設(shè)備,需要通過 NAT 做網(wǎng)絡(luò)地址轉(zhuǎn)換。路由器會跟蹤發(fā)出的連接,并將響應(yīng)轉(zhuǎn)發(fā)到正確的內(nèi)部 IP。 公開端點(Public Endpoint)節(jié)點的公網(wǎng) IP 地址:端口,例如 私鑰(Private key)單個節(jié)點的 WireGuard 私鑰,生成方法是: 公鑰(Public key)單個節(jié)點的 WireGuard 公鑰,生成方式為: DNS域名服務(wù)器,用于將域名解析為 威屁恩 客戶端的 IP,不讓 DNS請求泄漏到 威屁恩 之外。 2. WireGuard 工作原理 中繼服務(wù)器工作原理中繼服務(wù)器(Bounce Server)和普通的對等節(jié)點一樣,它能夠在 如果所有的對等節(jié)點都是公網(wǎng)可達(dá)的,則不需要考慮中繼服務(wù)器,只有當(dāng)有對等節(jié)點位于 NAT 后面時才需要考慮。 在 WireGuard 里,客戶端和服務(wù)端基本是平等的,差別只是誰主動連接誰而已。雙方都會監(jiān)聽一個 UDP 端口,誰主動連接,誰就是客戶端。主動連接的客戶端需要指定對端的公網(wǎng)地址和端口,被動連接的服務(wù)端不需要指定其他對等節(jié)點的地址和端口。如果客戶端和服務(wù)端都位于 NAT 后面,需要加一個中繼服務(wù)器,客戶端和服務(wù)端都指定中繼服務(wù)器作為對等節(jié)點,它們的通信流量會先進(jìn)入中繼服務(wù)器,然后再轉(zhuǎn)發(fā)到對端。 WireGuard 是支持漫游的,也就是說,雙方不管誰的地址變動了,WireGuard 在看到對方從新地址說話的時候,就會記住它的新地址(跟 mosh 一樣,不過是雙向的)。所以雙方要是一直保持在線,并且通信足夠頻繁的話(比如配置 Wireguard 如何路由流量利用 WireGuard 可以組建非常復(fù)雜的網(wǎng)絡(luò)拓?fù)洌@里主要介紹幾個典型的拓?fù)洌?/p> ① 端到端直接連接 這是最簡單的拓?fù)?,所有的?jié)點要么在同一個局域網(wǎng),要么直接通過公網(wǎng)訪問,這樣 ② 一端位于 NAT 后面,另一端直接通過公網(wǎng)暴露 這種情況下,最簡單的方案是:通過公網(wǎng)暴露的一端作為服務(wù)端,另一端指定服務(wù)端的公網(wǎng)地址和端口,然后通過 ③ 兩端都位于 NAT 后面,通過中繼服務(wù)器連接 大多數(shù)情況下,當(dāng)通信雙方都在 NAT 后面的時候,NAT 會做源端口隨機化處理,直接連接可能比較困難??梢约右粋€中繼服務(wù)器,通信雙方都將中繼服務(wù)器作為對端,然后維持長連接,流量就會通過中繼服務(wù)器進(jìn)行轉(zhuǎn)發(fā)。 ④ 兩端都位于 NAT 后面,通過 UDP NAT 打洞 上面也提到了,當(dāng)通信雙方都在 NAT 后面的時候,直接連接不太現(xiàn)實,因為大多數(shù) NAT 路由器對源端口的隨機化相當(dāng)嚴(yán)格,不可能提前為雙方協(xié)調(diào)一個固定開放的端口。必須使用一個信令服務(wù)器( 如果某一端同時連接了多個對端,當(dāng)它想訪問某個 IP 時,如果有具體的路由可用,則優(yōu)先使用具體的路由,否則就會將流量轉(zhuǎn)發(fā)到中繼服務(wù)器,然后中繼服務(wù)器再根據(jù)系統(tǒng)路由表進(jìn)行轉(zhuǎn)發(fā)。你可以通過測量 ping 的時間來計算每一跳的長度,并通過檢查對端的輸出( WireGuard 報文格式WireGuard 使用加密的 UDP 報文來封裝所有的數(shù)據(jù),UDP 不保證數(shù)據(jù)包一定能送達(dá),也不保證按順序到達(dá),但隧道內(nèi)的 TCP 連接可以保證數(shù)據(jù)有效交付。WireGuard 的報文格式如下圖所示: 關(guān)于 WireGuard 報文的更多信息可以參考下面幾篇文檔: WireGuard 的性能WireGuard 聲稱其性能比大多數(shù) 威屁恩 協(xié)議更好,但這個事情有很多爭議,比如某些加密方式支持硬件層面的加速。 WireGuard 直接在內(nèi)核層面處理路由,直接使用系統(tǒng)內(nèi)核的加密模塊來加密數(shù)據(jù),和 Linux 原本內(nèi)置的密碼子系統(tǒng)共存,原有的子系統(tǒng)能通過 關(guān)于性能比較的更多信息可以參考下面幾篇文檔:
WireGuard 安全模型WireGuard 使用以下加密技術(shù)來保障數(shù)據(jù)的安全:
WireGuard 的加密技術(shù)本質(zhì)上是 關(guān)于 WireGuard 加密的更多資料請參考下方鏈接: WireGuard 密鑰管理WireGuard 通過為每個對等節(jié)點提供簡單的公鑰和私鑰來實現(xiàn)雙向認(rèn)證,每個對等節(jié)點在設(shè)置階段生成密鑰,且只在對等節(jié)點之間共享密鑰。每個節(jié)點除了公鑰和私鑰,不再需要其他證書或預(yù)共享密鑰。 在更大規(guī)模的部署中,可以使用 下面是一些有助于密鑰分發(fā)和部署的服務(wù): 如果你不想在
從技術(shù)上講,多個服務(wù)端之間可以共享相同的私鑰,只要客戶端不使用相同的密鑰同時連接到兩個服務(wù)器。但有時客戶端會需要同時連接多臺服務(wù)器,例如,你可以使用 該文章在 2024/7/24 18:54:39 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |