使用 WireGuard 和 Raspberry Pi 作為伺服器設定簡單的 VPN

因為 WireGuard 將成為一部分 在即將推出的 Linux 核心 5.6 中,我決定看看如何最好地將這個 VPN 與我的集成 Raspberry Pi 上的 LTE 路由器/存取點.

Оборудование

  • 具有 LTE 模組和公用 IP 位址的 Raspberry Pi 3。 這裡會有一個VPN伺服器(下文稱為 邊緣行者)
  • 必須使用 VPN 進行所有通訊的 Android 手機
  • Linux 筆記型電腦只能在網路內使用 VPN

連接到 VPN 的每台裝置都必須能夠連接到所有其他裝置。 例如,如果筆記型電腦和手機都屬於 VPN 網絡,那麼手機應該能夠連接到筆記型電腦上的 Web 伺服器。 如果設定非常簡單,那麼您可以考慮將桌面連接到 VPN(透過乙太網路)。

考慮到有線和無線連接隨著時間的推移變得越來越不安全(有針對性的攻擊, KRACK WPA2破解攻擊 и 針對 WPA3 的 Dragonblood 攻擊),我正在認真考慮為我的所有設備使用 WireGuard,無論它們處於什麼環境。

軟件安裝

WireGuard 提供 預編譯套件 適用於大多數 Linux、Windows 和 macOS 發行版。 Android 和 iOS 應用程式透過應用程式目錄交付。

我有最新的Fedora Linux 31,安裝前懶得看手冊。 剛找到包包 wireguard-tools,安裝了它們,然後不明白為什麼沒有任何效果。 進一步調查發現我沒有安裝該軟體包 wireguard-dkms (帶有網路驅動程式),但它不在我的發行版的儲存庫中。

如果我閱讀了說明,我會採取正確的步驟:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

我在 Raspberry Pi 上安裝了 Raspbian Buster 發行版,那裡已經有一個軟體包 wireguard,安裝它:

$ sudo apt install wireguard

我在我的 Android 手機上安裝了該應用程式 線衛VPN 來自官方 Google 應用程式商店目錄。

鑰匙的安裝

對於對等方身份驗證,Wireguard 使用簡單的私鑰/公鑰方案來對 VPN 對等方進行身份驗證。 您可以使用以下命令輕鬆建立 VPN 金鑰:

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

這給了我們三個密鑰對(六個檔案)。 我們不會引用配置中的文件,而是將內容複製到此處:每個鍵都是 base64 中的一行。

為 VPN 伺服器(Raspberry Pi)建立設定檔

配置很簡單,我創建了以下文件 /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

一些注意事項:

  • 在適當的位置,您需要使用鍵插入文件中的行
  • 我的 VPN 使用內部頻段 10.200.200.0/24
  • 對於團隊 PostUp/PostDown 我有外部網路介面 wwan0,您可能有不同的介面(例如 eth0)

使用以下命令可以輕鬆建立 VPN 網路:

$ sudo wg-quick up wg0

一個小細節:作為我使用的 DNS 伺服器 dnsmasq 綁定到網路介面 br0,我還添加了設備 wg0 到允許的設備清單。 在 dnsmasq 中,這是透過在設定檔中新增新的網路介面行來完成的 /etc/dnsmasq.conf例如:

interface=br0
interface=wg0

此外,我新增了一條 iptable 規則以允許流量到達 UDP 偵聽連接埠 (51280):

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

現在一切正常,我們可以設定 VPN 隧道的自動啟動:

$ sudo systemctl enable [email protected]

筆記型電腦上的客戶端配置

在筆記型電腦上建立設定檔 /etc/wireguard/wg0.conf 具有相同的設定:

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

注:

  • 您需要指定公用 IP 或 VPN 伺服器主機,而不是 Edgewalker
  • 已安裝 AllowedIPs10.200.200.0/24,我們只使用VPN來存取內部網路。 到所有其他 IP 位址/伺服器的流量將繼續通過「正常」開放通道。 它還將使用筆記型電腦上預先配置的 DNS 伺服器。

對於測試和自動啟動,我們使用相同的命令 wg-quick и systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

在 Android 手機上設定客戶端

對於 Android 手機,我們創建一個非常相似的設定檔(我們稱之為 mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

與筆記型電腦上的配置不同,手機必須使用我們的 VPN 伺服器作為 DNS 伺服器(行 DNS),並且還透過 VPN 隧道傳遞所有流量(AllowedIPs = 0.0.0.0/0).

您可以將其轉換為二維碼,而不是將檔案複製到行動裝置:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

QR 碼將以 ASCII 形式輸出到控制台。 可以從 Android VPN 應用程式進行掃描,並自動設定 VPN 隧道。

產量

與 OpenVPN 相比,設定 WireGuard 簡直是神奇。

來源: www.habr.com

添加評論