如何在Ubuntu 18.04上設置WireGuard VPN

WireGuard是具有最新加密技術的現代VPN(虛擬專用網)技術。 與IPsec和OpenVPN等其他類似解決方案相比,WireGuard更快,更易於配置且性能更高。 它是一個跨平台,幾乎可以在任何地方運行,包括Linux,Windows,Android和macOS。 Wireguard是對等VPN。 它不使用客戶端-服務器模型。 根據其配置,對等方可以充當傳統的服務器或客戶端。

WireGuard通過在充當隧道的每個對等設備上創建網絡接口來工作。 對等方通過交換和驗證公共密鑰(類似於SSH模型)來相互認證。 公鑰與隧道中允許的IP地址列表進行映射。 VPN流量封裝在UDP中。

在本教程中,我們將在充當VPN服務器的Ubuntu 18.04計算機上設置WireGuard。 我們還將向您展示如何將WireGuard配置為客戶端。 客戶端的流量將通過Ubuntu 18.04服務器進行路由。

此設置可用於防禦中間人攻擊,匿名瀏覽網絡,繞過受地域限制的內容或在遠程工作時允許您的同事安全連接到公司網絡。

先決條件

您將需要一個Ubuntu 18.04服務器,您可以使用sudo特權以root用戶或帳戶訪問。

設置WireGuard服務器#

在本節中,我們將在Ubuntu機器上安裝WireGuard並將其設置為充當服務器。 我們還將配置系統以通過它路由客戶端的流量。

在Ubuntu 18.04上安裝WireGuard#

WireGuard包含在默認的Ubuntu存儲庫中。 要安裝它,請運行以下命令:

sudo apt updatesudo apt install wireguard

WireGuard作為內核模塊運行,該模塊被編譯為DKMS模塊。 成功後,您將看到以下輸出:

wireguard:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.15.0-88-generic/updates/dkms/

depmod...

DKMS: install completed.

更新內核時,將根據新內核編譯WireGuard模塊。

配置WireGuard#

WireGuard附帶了兩個名為的命令行工具 wgwg-quick 允許您配置和管理WireGuard接口。

運行以下命令以生成公鑰和私鑰:

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

文件將在 /etc/wireguard 目錄。 您可以使用 cat 要麼 less 。 私鑰絕對不能與任何人共享。

現在已經生成了密鑰,我們將需要配置將路由VPN流量的隧道設備。

可以使用命令行從命令行設置設備 ipwg 或通過使用文本編輯器創建配置文件。

創建一個名為 wg0.conf 並添加以下內容:

sudo nano /etc/wireguard/wg0.conf

/etc/wireguard/wg0.conf

[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

該接口可以命名為任何名稱,但是建議使用諸如include之類的名稱 wg0 要麼 wgvpn0。 界面部分中的設置具有以下含義:

  • 地址-逗號分隔的v4或v6 IP地址列表 wg0 接口。 使用專用於專用網絡的範圍內的IP(10.0.0.0/8、172.16.0.0/12或192.168.0.0/16)。

  • ListenPort-WireGuard接受傳入連接的端口。

  • PrivateKey-由 wg genkey 命令。 (要查看文件內容,請運行: sudo cat /etc/wireguard/privatekey

  • SaveConfig-設置為true時,關閉時接口的當前狀態保存到配置文件中。

  • PostUp-在啟動界面之前執行的命令或腳本。 在此示例中,我們使用iptables啟用偽裝。 這將允許流量離開服務器,從而使VPN客戶端可以訪問Internet。

    確保更換 ens3-A POSTROUTING 匹配您的公共網絡接口的名稱。 您可以通過運行以下命令輕鬆找到該接口:

    ip -o -4 route show to default | awk '{print $5}'
  • PostDown-在關閉接口之前執行的命令或腳本。 接口關閉後,iptables規則將被刪除。

wg0.confprivatekey 普通用戶不應該閱讀這些文件。 使用 chmod 將權限設置為 600

sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

完成後,將 wg0 使用配置文件中指定的屬性進行接口連接:

sudo wg-quick up wg0

該命令將產生類似於以下內容的輸出:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

wg show wg0 檢查接口狀態和配置:

sudo wg show wg0
interface: wg0
  public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  private key: (hidden)
  listening port: 51820

你也可以跑 ip a show wg0 驗證接口狀態:

ip a show wg0
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.0.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever

要在啟動時啟用WireGuard接口,請運行以下命令:

sudo systemctl enable [email protected]

服務器網絡和防火牆配置

為了使NAT正常工作,我們需要啟用IP轉發。 打開 /etc/sysctl.conf 文件並添加或取消注釋以下行:

sudo nano /etc/sysctl.conf

/etc/sysctl.conf

net.ipv4.ip_forward=1

保存文件並應用更改:

sudo sysctl -p
net.ipv4.ip_forward = 1

如果您使用UFW管理防火牆,則需要在端口上打開UDP通信 51820

sudo ufw allow 51820/udp

而已。 已設置將充當服務器的Ubuntu對等端。

Linux和macOS客戶端安裝程序#

有關所有受支持平台的安裝說明,請訪問https://wireguard.com/install/。 在Linux系統上,您可以使用分發軟件包管理器來安裝軟件包,而在macOS上可以 brew。 安裝WireGuard後,請按照以下步驟配置客戶端設備。

設置Linux和macOS客戶端的過程幾乎與服務器相同。 首先生成公鑰和私鑰:

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

創建文件 wg0.conf 並添加以下內容:

sudo nano /etc/wireguard/wg0.conf

/etc/wireguard/wg0.conf

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

接口部分中的設置與設置服務器時的含義相同:

  • 地址-逗號分隔的v4或v6 IP地址列表 wg0 接口。
  • PrivateKey-要在客戶端計算機上查看文件的內容,請運行: sudo cat /etc/wireguard/privatekey

對等部分包含以下字段:

  • PublicKey-您要連接的對等方的公共密鑰。 (服務器的內容 /etc/wireguard/publickey 文件)。
  • 端點-您要連接的對等方的IP或主機名,後跟冒號,然後是遠程對等方偵聽的端口號。
  • AllowedIPs-v4或v6 IP地址的逗號分隔列表,從該列表允許對等方的傳入流量,並定向到該對等方的傳出流量。 我們使用0.0.0.0/0是因為我們正在路由流量,並希望服務器對等方發送具有任何源IP的數據包。

如果您需要配置其他客戶端,只需使用其他專用IP地址重複相同的步驟即可。

Windows客戶端安裝程序#

從WireGuard網站下載並安裝Windows msi軟件包。

安裝後,打開WireGuard應用程序,然後單擊“添加隧道”->“添加空隧道…”,如下圖所示:

將自動創建一個公鑰對並將其顯示在屏幕上。

WireGuard Windows隧道

輸入隧道的名稱並按如下所示編輯配置:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

在接口部分,添加新行以定義客戶端隧道地址。

在對等部分中,添加以下字段:

  • PublicKey-Ubuntu服務器的公鑰(/etc/wireguard/publickey 文件)。
  • 端點-Ubuntu服務器的IP地址,後跟冒號和WireGuard端口(51820)。
  • 允許的IP-0.0.0.0/0

完成後,單擊“保存”按鈕。

將客戶端對等方添加到服務器上

最後一步是將客戶端公鑰和IP地址添加到服務器:

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

確保更改 CLIENT_PUBLIC_KEY 使用您在客戶端計算機上生成的公鑰(sudo cat /etc/wireguard/publickey)並調整客戶端IP地址(如果不同)。 Windows用戶可以從WireGuard應用程序複製公鑰。

完成後,返回客戶端計算機並打開隧道接口。

Linux和macOS客戶端#

在Linux客戶端上,運行以下命令以打開界面:

sudo wg-quick up wg0

現在,您應該連接到Ubuntu服務器,並且來自客戶端計算機的流量應通過該服務器進行路由。 您可以使用以下方法檢查連接:

sudo wg
interface: wg0
  public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
  private key: (hidden)
  listening port: 48052
  fwmark: 0xca6c

peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 1 minute, 22 seconds ago
  transfer: 58.43 KiB received, 70.82 KiB sent

您也可以打開瀏覽器,鍵入“ what is my ip”,然後您應該會看到Ubuntu服務器的IP地址。

要停止隧道,請降低 wg0 接口:

sudo wg-quick down wg0

Windows客戶端

如果您在Windows上安裝了WireGuard,請單擊“激活”按鈕。 連接對等體後,隧道狀態將更改為“活動”:

WireGuard Windows連接隧道

結論#

我們向您展示了如何在Ubuntu 18.04計算機上安裝WireGuard並將其配置為VPN服務器。 通過此設置,您可以通過保持流量數據私有來匿名瀏覽Web。

如果您遇到任何問題,請隨時發表評論。

VPN安全Ubuntu

Sidebar