在CentOS上設置您自己的WireGuard VPN服務器

本教程將向您展示如何在CentOS上設置自己的WireGuard VPN服務器。 WireGuard專為Linux內核而設計。 它運行在Linux內核中,並允許您創建快速,現代且安全的VPN隧道。

WireGuard VPN的功能

  • 輕巧和超快的速度,將OpenVPN吹倒了。
  • 跨平台。 WireGuard可以在Linux,BSD,macOS,Windows,Android,iOS和OpenWRT上運行。
  • 用戶身份驗證通過交換類似於SSH密鑰的公共密鑰來完成。
  • 它將靜態隧道IP地址分配給VPN客戶端。 有些人可能不喜歡它,但是在某些情況下它可能很有用。
  • 移動設備可以在Wi-Fi和移動網絡之間無縫切換,而不會斷開任何連接。
  • 它旨在在大多數情況下替換OpenVPN和IPSec。

先決條件

本教程假定VPN服務器和VPN客戶端都在運行 CentOS的 操作系統。

步驟1:在CentOS服務器和桌面上安裝WireGuard

登錄到CentOS服務器,然後運行以下命令來安裝WireGuard。

CentOS的8

sudo dnf install elrepo-release epel-release -y
sudo dnf install kmod-wireguard wireguard-tools -y

CentOS的7

sudo yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
sudo yum install yum-plugin-elrepo
sudo yum install kmod-wireguard wireguard-tools -y

然後使用相同的命令在本地CentOS計算機(VPN客戶端)上安裝WireGuard。

第2步:生成公共/私人密鑰對

服務器

為WireGuard創建目錄。

sudo mkdir -p /etc/wireguard/

在CentOS服務器上運行以下命令以創建一個公鑰/私鑰對,該對將保存在 /etc/wireguard/ 目錄。

wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

客戶

為WireGuard創建目錄。

sudo mkdir -p /etc/wireguard/

運行以下命令以在本地CentOS計算機(VPN客戶端)上創建公鑰/私鑰對。

wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key

步驟3:創建WireGuard配置文件

服務器

使用類似Nano的命令行文本編輯器在CentOS服務器上創建WireGuard配置文件。 wg0 將是網絡接口名稱。

sudo dnf install nano
sudo nano /etc/wireguard/wg0.conf

複製以下文本並將其粘貼到您的配置文件中。 您需要使用自己的服務器私鑰和客戶端公鑰。

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=

[Peer]
PublicKey = AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4=
AllowedIPs = 10.10.10.2/32

centos-wireguard-VPN-服務器配置文件-wg0

哪裡:

  • 地址:指定VPN服務器的專用IP地址。 在這裡,我使用的是10.10.10.0/24網絡範圍,因此它不會與您的家庭網絡範圍衝突。 (大多數家用路由器使用192.168.0.0/24或192.168.1.0/24)。 VPN服務器的專用IP地址為10.10.10.1。
  • 私鑰:VPN服務器的私鑰,可以在 /etc/wireguard/server_private.key 服務器上的文件。
  • 監聽端口:WireGuard VPN服務器將在UDP端口51820上偵聽,這是默認設置。
  • 公鑰:VPN客戶端的公鑰,可以在 /etc/wireguard/client_public.key 客戶端計算機上的文件。
  • 允許的IP:允許VPN客戶端使用的IP地址。 在此示例中,客戶端只能在VPN隧道內使用10.10.10.2 IP地址。

保存並關閉文件。 (要在Nano文本編輯器中保存文件,請按 Ctrl+O,然後按Enter確認。 按 Ctrl+X 退出。)

更改文件權限模式,以便只有root用戶才能讀取文件。

sudo chmod 600 /etc/wireguard/ -R

客戶

使用命令行文本編輯器(如Nano)在本地CentOS計算機上創建WireGuard配置文件。 wg-client0 將是網絡接口名稱。

sudo nano /etc/wireguard/wg-client0.conf

複製以下文本並將其粘貼到您的配置文件中。 您需要使用自己的客戶端私鑰和服務器公鑰。

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=

[Peer]
PublicKey = vxyo4l4I3jWK+KZquNIDJF/hzQq29DOIxSUOrfNZZCs=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

哪裡:

  • 地址:指定VPN客戶端的專用IP地址。
  • 域名解析:指定10.10.10.1(VPN服務器)作為DNS服務器。 它將通過 resolvconf 命令。
  • 私鑰:客戶端的私鑰,可以在 /etc/wireguard/client_private.key 客戶端計算機上的文件。
  • 公鑰:服務器的公共密鑰,可以在 /etc/wireguard/server_public.key 服務器上的文件。
  • 允許的IP:0.0.0.0/0代表整個Internet,這意味着到Internet的所有流量都應通過VPN路由。
  • 終點:VPN服務器的公共IP地址和端口號。 將12.34.56.78替換為服務器的真實公共IP地址。
  • 持久保持:每25秒將經過身份驗證的空數據包發送到對等方,以保持連接有效。 如果未啟用PersistentKeepalive,則VPN服務器可能無法ping通VPN客戶端。

保存並關閉文件。

更改文件模式,以便只有root用戶才能讀取文件。

sudo chmod 600 /etc/wireguard/ -R

步驟4:在服務器上啟用IP轉發

為了使VPN服務器能夠在VPN客戶端和Internet之間路由數據包,我們需要啟用IP轉發。 編輯 sysctl.conf 文件。

sudo nano /etc/sysctl.conf

在此文件的末尾添加以下行。

net.ipv4.ip_forward = 1

保存並關閉文件。 然後使用以下命令應用更改。 的 -p 該選項將從以下位置加載sysctl設置 /etc/sysctl.conf 文件。 此命令將在系統重新引導後保留我們的更改。

sudo sysctl -p

步驟5:在服務器上配置IP偽裝

運行以下命令以在服務器防火牆中啟用IP偽裝。

sudo firewall-cmd --zone=public --permanent --add-masquerade
sudo systemctl reload firewalld

這將使您的VPN網絡與外界隔離。 因此,互聯網只能看到您的VPN服務器的IP,而看不到您的VPN客戶端的IP,就像您的家庭路由器隱藏了您的專用家庭網絡一樣。

如果您的CentOS找不到 firewall-cmd 命令,您需要安裝firewalld並啟動服務。

sudo dnf install firewalld

sudo systemctl start firewalld

步驟6:在服務器上安裝DNS解析器

由於我們將VPN服務器指定為客戶端的DNS服務器,因此我們需要在VPN服務器上運行DNS解析器。 我們可以安裝bind9 DNS服務器。

sudo dnf install bind

使用以下內容啟動BIND 9:

sudo systemctl start named

並在啟動時啟用自動啟動:

sudo systemctl enable named

您可以通過以下方式查看其狀態:

systemctl status named

樣本輸出:

● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disable>
   Active: active (running) since Sun 2020-05-17 11:07:34 EDT; 9s ago
  Process: 7203 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TE>
  Process: 7218 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited,>
  Process: 7215 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; the>
 Main PID: 7220 (named)
    Tasks: 4 (limit: 5045)
   Memory: 55.5M
   CGroup: /system.slice/named.service
           └─7220 /usr/sbin/named -u named -c /etc/named.conf -4

提示:如果上述命令沒有立即退出,請按Q。

編輯BIND主配置文件 /etc/named.conf

sudo nano /etc/named.conf

在裡面 options 子句,您可以找到以下兩行。

listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };

這使得 named 僅在localhost上偵聽。 如果要允許同一網絡中的客戶端查詢域名,請注釋掉這兩行。 (在每行的開頭添加雙斜杠)

// listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };

找到以下行。

allow-query { localhost; };

添加10.10.10.0/24網絡範圍,以便VPN客戶端可以發送DNS查詢。 請注意,您需要以分號結束每個網絡範圍。

allow-query { localhost; 10.10.10.0/24; };

保存並關閉文件。 重新啟動BIND9,以使更改生效。

sudo systemctl restart named

然後,您需要運行以下命令以允許VPN客戶端連接到端口53。

sudo firewall-cmd --zone=public --permanent --add-rich-rule="rule family="ipv4" source address="10.10.10.0/24" accept"

步驟7:在防火牆中打開WireGuard端口

運行以下命令以打開服務器上的UDP端口51820。

sudo firewall-cmd --permanent --add-port=51820/udp
sudo systemctl reload firewalld

步驟8:啟動WireGuard

服務器

在服務器上運行以下命令以啟動WireGuard。

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

要停止它,請運行

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

您也可以使用systemd服務啟動WireGuard。

sudo systemctl start [email protected]

如果啟動失敗,則應檢查日誌以找出問題所在。

sudo journalctl -eu [email protected]

使用以下命令在系統啟動時啟用自動啟動。

sudo systemctl enable [email protected]

使用以下命令檢查其狀態。 它的狀態應該是 active (exited)

systemctl status [email protected]

現在,WireGuard服務器已準備就緒,可以接受客戶端連接。

客戶

啟動WireGuard。

sudo systemctl start [email protected]

如果啟動失敗,則應檢查日誌以找出問題所在。

sudo journalctl -eu [email protected]

如果您在日誌中看到以下錯誤,則可以嘗試重新引導操作系統。

RTNETLINK answers: Operation not supported

在系統啟動時啟用自動啟動。

sudo systemctl enable [email protected]

檢查其狀態:

systemctl status [email protected]

現在去這個網站: http://icanhazip.com/ 檢查您的公共IP地址。 如果一切順利,它將顯示您的VPN服務器的公用IP地址,而不是您的客戶端計算機的公用IP地址。

策略路由

默認情況下,VPN客戶端上的所有流量都將通過VPN服務器路由。 有時,您可能只想根據傳輸層協議和目標端口來路由特定類型的流量。 這稱為策略路由。

策略路由是在客戶端計算機上配置的,我們需要首先停止VPN連接。

sudo systemctl stop [email protected]

然後編輯客戶端配置文件。

sudo nano /etc/wireguard/wg-client0.conf

例如,如果您在 [interface] 部分,然後WireGuard將創建一個名為“ 1234”的路由表,並將ip規則添加到該路由表中。 在此示例中,僅當將TCP用作傳輸層協議且目標端口為25(即客戶端計算機發送電子郵件)時,流量才會通過VPN服務器路由。

Table = 1234
PostUp = ip rule add ipproto tcp dport 25 table 1234
PreDown = ip rule delete ipproto tcp dport 25 table 1234

Wireguard策略路由中心

保存並關閉文件。 然後再次啟動WireGuard客戶端。

sudo systemctl start [email protected]

VPN Kill Switch

默認情況下,VPN連接中斷時,您的計算機可以通過普通網關訪問Internet。 您可能要啟用終止開關功能,該功能可防止未加密的數據包通過非WireGuard接口流動。

停止WireGuard客戶端進程。

sudo systemctl stop [email protected]

編輯客戶端配置文件。

sudo nano /etc/wireguard/wg-client0.conf

將以下兩行添加到 [interface] 部分。

PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

像這樣:

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

[Peer]
PublicKey = RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

保存並關閉文件。 然後啟動WireGuard客戶端。

sudo systemctl start [email protected]

故障排除

您可以從VPN服務器ping通到VPN客戶端,以查看隧道是否正常工作。 如果您在ping中看到以下錯誤消息,

ping: sendmsg: Required key not available

可能是 AllowedIPs 參數是錯誤的,如錯字。

請注意,我不建議使用 SaveConfig=true 在裡面 [Interface] WireGuard配置文件的部分。 SaveConfig 告訴WireGuard在關機時保存運行時配置。 因此,如果您添加其他 [Peer] 在配置文件中,然後重新啟動WireGuard,新添加的配置將被覆蓋。

包起來

而已! 我希望本教程可以幫助您在CentOS上安裝和配置WireGuard。 與往常一樣,如果您發現此帖子有用,請訂閱我們的免費新聞簡報以獲取更多提示和技巧。

Sidebar