1 引言
1.1 什么是WireGuard
官方介紹如下:
WireGuard ? 是一款極其簡單但快速且現(xiàn)代的 VPN,采用最先進的加密技術。它的目標是比 IPsec 更快、更簡單、更精簡、更有用,同時避免令人頭疼的問題。它的性能遠高于 OpenVPN。
WireGuard 被設計為通用 VPN,可在嵌入式接口和超級計算機上運行,適合許多不同的情況。它最初針對 Linux 內核發(fā)布,現(xiàn)在已跨平臺(Windows、macOS、BSD、iOS、Android)且可廣泛部署。它目前正在大力開發(fā)中,但它可能已被視為業(yè)內最安全、最易于使用且最簡單的 VPN 解決方案。
我們可以用一句話概括它:
WGuard是一款可以組建虛擬私人局域網(VPN)的軟件,允許用戶通過公共網絡(如互聯(lián)網)安全地傳輸數(shù)據(jù),同時保持數(shù)據(jù)的機密性和完整性。
WireGuard有如下優(yōu)勢:
- 更輕便:以Linux內核模塊的形式運行,資源占用小。
- 更高效:相比目前主流的IPSec、OpenVPN等協(xié)議,WireGuard的效率要更高。
- 更快速:比目前主流的VPN協(xié)議,連接速度要更快。
- 更安全:使用了更先進的加密技術。
- 更易搭建:部署難度相對更低。
- 更隱蔽:以UDP協(xié)議進行數(shù)據(jù)傳輸,比TCP協(xié)議更低調。
- 不易被封鎖:TCP阻斷對WireGuard無效,IP被墻的情況下仍然可用。
- 更省電:不使用時不進行數(shù)據(jù)傳輸,移動端更省電。
1.2 WireGuard可以用來做什么
-
建立VPN(不限設備類型)
WireGuard支持多種平臺,包括電腦、智能手機和路由器。這一特性使其成為構建虛擬私有網絡(VPN)的理想選擇,能在這些設備上實現(xiàn)安全連接。無論是用于遠程工作、保護數(shù)據(jù)隱私,還是繞過地理限制,WireGuard都能提供穩(wěn)定且安全的網絡連接。
-
實現(xiàn)內網穿透
內網穿透,即NAT(Network Address Translator)穿透,是指計算機在內網(局域網)內使用私有IP地址,在連接外網(互聯(lián)網)時使用全局IP地址的技術。該技術被普遍使用在有多臺主機但只通過一個公有IP地址訪問的私有網絡中。
舉個例子:比如我在實驗室配置了一個服務器 Server A,當我在實驗室的時候,就可以通過自己的筆記本使用SSH連接【因為我和服務器處于一個局域網】,當我回宿舍以后,就沒有辦法直接使用SSH連接了【因為我和服務器不在一個局域網】,這個時候就需要進行NAT穿透,讓我在宿舍也可以使用SSH連接Server A。
通過Wireguard可以將廣域網上的主機連接起來,形成一個局域網。只需要有一臺具有固定公網IP的服務器,就可以將其作為我們搭建的局域網的中心節(jié)點,讓其他的主機(不論是否有公網IP,不論是否在NAT內),都通過這個中心節(jié)點和彼此相連。由此就構建了一個中心輻射型的局域網,實現(xiàn)了內網穿透等功能。
-
Docker容器通信
WireGuard還可用于Docker容器之間的通信。在Docker環(huán)境中,容器之間的網絡通信是一個重要的問題。WireGuard通過提供一種安全的通信方式,能夠在不同容器之間建立一個加密的網絡連接,從而保障數(shù)據(jù)的安全傳輸。這對于需要在不同容器間安全共享數(shù)據(jù)的應用尤為重要。
1.3 WireGuard原理
WireGuard源碼地址
WireGuard 是一種在第 3 層(網絡層)運行的安全網絡隧道,與傳統(tǒng)的 VPN 解決方案(如 IPsec 和 OpenVPN)相比,它的設計更安全、性能更高且更易于使用。它是作為 Linux 內核虛擬網絡接口實現(xiàn)的,基于安全隧道的基本原理:將peer的公鑰與隧道源 IP 地址關聯(lián)。
相關術語:
Peer/Node/Device
連接到VPN 并為自己注冊一個VPN子網地址(如 192.0.2.3)的主機。還可以通過使用逗號分隔的 CIDR 指定子網范圍,為其自身地址以外的 IP 地址選擇路由。
中繼服務器(Bounce Server)
一個公網可達的peer,可以將流量中繼到
NAT
后面的其他peer。Bounce Server
并不是特殊的節(jié)點,它和其他peer一樣,唯一的區(qū)別是它有公網 IP,并且開啟了內核級別的 IP 轉發(fā),可以將 威屁恩 的流量轉發(fā)到其他客戶端。子網(Subnet)
一組私有 IP,例如
192.0.2.1-255
或192.168.1.1/24
,一般在 NAT 后面,例如辦公室局域網或家庭網絡。CIDR 表示法
CIDR,即無類域間路由(Classless Inter-Domain Routing),是一種用于對IP地址進行靈活表示和分配的標準。
NAT
子網的私有 IP 地址由路由器提供,通過公網無法直接訪問私有子網設備,需要通過 NAT 做網絡地址轉換。路由器會跟蹤發(fā)出的連接,并將響應轉發(fā)到正確的內部 IP。
公開端點(Public Endpoint)
節(jié)點的公網 IP 地址:端口,例如
123.124.125.126:1234
,或者直接使用域名some.domain.tld:1234
。如果peer節(jié)點不在同一子網中,那么節(jié)點的公開端點必須使用公網 IP 地址。私鑰(Private key)
單個節(jié)點的 WireGuard 私鑰,生成方法是:
wg genkey > example.key
。公鑰(Public key)
單個節(jié)點的 WireGuard 公鑰,生成方式為:
wg pubkey < example.key > example.key.pub
。DNS
域名服務器,用于將域名解析為 VPN 客戶端的 IP,不讓 DNS請求泄漏到 VPN 之外。
主要功能和原理如下
WireGuard 通過添加一個(或多個)網絡接口來工作,例如
eth0
或wlan0
,稱為wg0
(或wg1
、wg2
、wg3
等)。然后可以使用ifconfig(8)
或ip-address(8)
正常配置該網絡接口,并使用route(8)
或ip-route(8)
添加和刪除其路由,以及所有普通網絡實用程序都是如此。接口的特定 WireGuard 方面使用wg(8)
工具進行配置。該接口充當隧道接口。WireGuard 將隧道 IP 地址與公鑰和遠程端點相關聯(lián)。當接口向peer發(fā)送數(shù)據(jù)包時,它會執(zhí)行以下操作:
- 該數(shù)據(jù)包適用于 192.168.30.8。那是哪位peer???讓我看看…好吧,這是給peer
ABCDEFGH
的。 (或者,如果它不適合任何已配置的peer,則丟棄該數(shù)據(jù)包。)- 使用peer
ABCDEFGH
的公鑰加密整個 IP 數(shù)據(jù)包。- Peer
ABCDEFGH
的遠程端點是什么?讓我看看…好的,端點是主機 216.58.211.110 上的 UDP 端口 53133。- 使用 UDP 通過 Internet 將步驟 2 中的加密字節(jié)發(fā)送到 216.58.211.110:53133。
當接口收到數(shù)據(jù)包時,會發(fā)生以下情況:
- 我剛剛從主機 98.139.183.24 上的 UDP 端口 7361 收到一個數(shù)據(jù)包。讓我們來解密吧!
- 它為peer
LMNOPQRS
正確解密和驗證。好的,讓我們記住,peerLMNOPQRS
的最新 Internet 端點是使用 UDP 的 98.139.183.24:7361。- 解密后,明文數(shù)據(jù)包來自 192.168.43.89。是否允許peer
LMNOPQRS
以 192.168.43.89 向我們發(fā)送數(shù)據(jù)包?- 如果是,則在接口上接受數(shù)據(jù)包。如果沒有,就放棄它。
WireGuard 的核心是一個稱為加密密鑰路由的概念,它的工作原理是將公鑰與隧道內允許的隧道 IP 地址列表相關聯(lián)。每個網絡接口都有一個私鑰和一個peer點列表。每個peer都有一個公鑰。公鑰短小且簡單,由peer用來相互驗證。它們可以通過任何帶外方法傳遞以在配置文件中使用,類似于將 SSH 公鑰發(fā)送給朋友以訪問 shell 服務器的方式。
1.4 WireGuard安裝
wireGuard官方安裝教程
2 WireGuard組網實現(xiàn)內網穿透
2.1 前提條件
- 公網服務器: 必須擁有一臺具有公網IP地址的服務器,這是內網穿透的關鍵。該服務器充當中轉站,負責將外部請求傳遞到內部網絡。
- 網絡設備配置權限: 需要對內部網絡的路由器或防火墻有一定的配置權限,以便進行端口映射或其他必要的網絡設置。這確保了從公網服務器到內網的連接是有效的。
- 安裝WireGuard: 在公網服務器和內網設備上都需要安裝和配置WireGuard軟件。確保兩端的WireGuard配置一致,包括公私鑰的生成和網絡接口的配置。
- 開啟相應端口: 在公網服務器的防火墻配置中,需要打開WireGuard所使用的端口(默認是51820/UDP),以確保能夠接收來自內網設備的連接請求。
- 合適的網絡拓撲: 確保了解內部網絡的拓撲結構,以便正確設置WireGuard配置,包括允許流量通過的子網、路由等。
2.2 網絡拓撲結構
2.3 具體步驟
2.3.1 中繼服務器配置
-
創(chuàng)建密鑰對
wg genkey | tee server_privatekey | wg pubkey > server_publickey
執(zhí)行以上兩條命令后,會在執(zhí)行命令的當前文件夾自動生成2個文件:
-
開啟IP地址轉發(fā)
sudo sysctl net.ipv4.ip_forward
如果顯示1則說明已開啟,否則則未開啟。
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf sysctl -p /etc/sysctl.conf
-
設置IP地址偽裝
# 允許防火墻偽裝IP firewall-cmd --add-masquerade # 檢查是否允許偽裝IP firewall-cmd --query-masquerade # 禁止防火墻偽裝IP firewall-cmd --remove-masquerade
-
配置wireguard虛擬網卡(不推薦,只是讓讀者直觀了解過程)
sudo ip link add wg0 type wireguard # 添加一塊叫 wg0 的虛擬 wireguard 網卡 sudo ip addr add 192.168.71.1/24 dev wg0 # 給 wg0 網卡添加 ip 地址 192.168.71.1,子網掩碼 255.255.255.0 sudo wg set wg0 private-key ./server-privatekey # wireguard 設置密鑰 sudo ip link set wg0 up # 啟用剛剛添加的網卡
我們可以通過
ip addr
命令查看到wg0網卡的狀態(tài)可以看到網卡
wg0
接口是已啟用的,具有 IPv4 地址192.168.71.1
輸入
wg
命令則可以看到配置信息,配置文件通常在/etc/wireguard/
目錄中有想繼續(xù)嘗試這種方式的可以看一下官方教程
-
編寫配置文件配置網卡(推薦,應該
wg set
命令需要提供很多參數(shù),很容易出錯)我們在
/etc/wireguard
目錄中創(chuàng)建wg0.conf
并編寫配置,配置項請看2.4 配置項說明[Interface] # 本機密鑰 PrivateKey = KIDTljv66CgVYBNlrSD13Au6qfUdIcFJkTBkuErhTEk= # 本機地址 Address = 192.168.71.1/24 # 監(jiān)聽端口 ListenPort = 51820 [Peer] # 對端的publickey PublicKey = iWy57DmR6wVXcVzMDOa2WyywO0WT5JRAGYIlh0v/nW8= # 對端地址 AllowedIPs = 192.168.71.2/24
-
重新啟動網卡
sudo wg-quick down wg0 sudo wg-quick up wg0
2.3.2 其他peer
我這里只列舉MacOS的操作方式(其他都同理,就是要配置私鑰和公鑰)
操作完之后,它會給出密鑰對,我們只需要添加好其他信息即可。
配置文件如下:
[Interface]
# 本機密鑰
PrivateKey = kDUqWzkbaB1EU5C2ADoId1TXtZF89xxn0VV45EcjFHs=
# 本機地址
Address = 192.168.71.2/24
[Peer]
# 對端公鑰,即公網服務器公鑰
PublicKey = bEm1p736FQySfKlTTUCeHmiwTmna5umZWOWLGWqioSk=
# 允許此對等方的傳入流量并指定傳出流量的目標。
AllowedIPs = 192.168.71.0/24
# 公網IP+監(jiān)聽端口號
Endpoint = 1.1.1.1:51820
PersistentKeepalive = 25
2.3.3 測試
MacOS端:
服務器Ping 主機:
2.4 WireGuard配置文件說明
-
interface部分:
-
PrivateKey
: 由wg genkey
生成的 Base64 編碼的私鑰。必須配置。 -
ListenPort
: 用于監(jiān)聽的 16 位端口??蛇x,如果未指定,則隨機選擇端口。 -
DNS
: 指定 DNS 服務器的 IP 地址。 -
FwMark
: 用于傳出數(shù)據(jù)包的 32 位 fwmark。如果設置為 0 或 “off”,則禁用此選項??蛇x??梢砸允M制形式指定,例如,以 “0x” 開頭。可選。
-
-
Peer 部分:
-
PublicKey
: 由wg pubkey
根據(jù)私鑰計算的 Base64 編碼的公鑰。必須配置。 -
PresharedKey
: 由wg genpsk
生成的 Base64 編碼的預共享密鑰??蛇x,可以省略。此選項為現(xiàn)有的公鑰加密提供了額外的對稱密鑰加密層,以增強對抗后量子計算的能力。 -
AllowedIPs
: 逗號分隔的 IP 地址(IPv4 或 IPv6)列表,帶有 CIDR 掩碼,用于允許此對等方的傳入流量并指定傳出流量的目標??梢远啻沃付ā?捎?0.0.0.0/0 匹配所有 IPv4 地址,使用 ::/0 匹配所有 IPv6 地址。 -
Endpoint
: 一個 IP 地址或主機名,后跟冒號,然后是一個端口號。此端點將自動更新為來自對等方的正確經過身份驗證的數(shù)據(jù)包的最新源 IP 地址和端口??蛇x。 -
PersistentKeepalive
: 保持活躍的時間間隔,介于 1 和 65535 之間,表示多久發(fā)送一次對等方的身份驗證空數(shù)據(jù)包,以保持有狀態(tài)的防火墻或 NAT 映射的有效性。如果設置為 0 或 “off”,則禁用此選項??蛇x,默認情況下此選項被禁用。
-
下面是一個簡單的配置文件示例:
[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort = 51820
[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
Endpoint = 192.95.5.67:1234
AllowedIPs = 10.192.122.3/32, 10.192.124.1/24
[Peer]
PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
Endpoint = [2607:5300:60:6b0::c05f:543]:2468
AllowedIPs = 10.192.122.4/32, 192.168.0.0/16
[Peer]
PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
Endpoint = test.wireguard.com:18981
AllowedIPs = 10.10.10.230/32
3 WireGuard工具
3.1 wg-easy
github地址
這是一個用于管理 WireGuard 設置的 Web 用戶界面。使用它之前我們得先安裝docker和docker-compose。這里我給出docker-compose.yml
配置文件示例。還有很多配置項可在倉庫中找到,靈活配置VPN
version: '3'
services:
wg-easy:
image: weejewel/wg-easy
container_name: wg-easy
environment:
- WG_HOST=YOUR_SERVER_IP # 公網IP
- PASSWORD=YOUR_ADMIN_PASSWORD # Web UI登錄密碼
- WG_PORT=51820 # 監(jiān)聽端口
- WG_PERSISTENT_KEEPALIVE=25 # 保持“連接”打開的值(以秒為單位)
- WG_DEFAULT_ADDRESS=192.168.71.0 # 客戶端 IP 地址范圍
- WG_ALLOWED_IPS=192.168.71.0/24 # 客戶端將使用的允許 IP
volumes:
- ~/.wg-easy:/etc/wireguard
ports:
- 51820:51820/udp
- 51821:51821/tcp
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv4.ip_forward=1
restart: unless-stopped
通過docker compose up -d
部署好后,我們進入Web界面即可添加Client。
這里,我們只需要將這三個配置文件分給對應的Client的即可完成網絡搭建,特別方便!
3.2 wg-gen-web
wg-gen-web
跟wg-easy類似,不過功能更強大。
3.3 dsnet
github地址
一款用于管理集中式wireguard VPN 的FAST 命令。
文章來源:http://www.zghlxwxcb.cn/news/detail-753219.html
官網配置教程文章來源地址http://www.zghlxwxcb.cn/news/detail-753219.html
到了這里,關于WireGuard 組網教程:快速構建安全高效的私密網絡并實現(xiàn)內網穿透的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!