WireGuard と Raspberry Pi をサーバーとして使用してシンプルな VPN をセットアップする

ワイヤーガードだから 一部になります 次期 Linux カーネル 5.6 の導入に伴い、この VPN を自分の VPN と統合する最適な方法を検討することにしました。 Raspberry Pi 上の LTE ルーター/アクセス ポイント.

機器

  • LTE モジュールとパブリック IP アドレスを備えた Raspberry Pi 3。 ここに VPN サーバーがあります (以下、本文中では VPN サーバーと呼ばれます)。 エッジウォーカー)
  • すべての通信に VPN を使用する必要がある Android スマートフォン
  • ネットワーク内でのみ VPN を使用する Linux ラップトップ

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 スマートフォンにアプリケーションをインストールしました WireGuardVPN 公式 Google App Store カタログから。

鍵の取り付け

ピア認証の場合、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

これにより、64 つのキー ペア (XNUMX つのファイル) が得られます。 構成内のファイルは参照しませんが、ここに内容をコピーします。各キーは BaseXNUMX の XNUMX 行です。

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

さらに、UDP リスニング ポート (51280) へのトラフィックを許可する iptable ルールを追加しました。

$ 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

備考:

  • Edgewalker の代わりに、パブリック IP または VPN サーバー ホストを指定する必要があります。
  • 設定することにより AllowedIPs на 10.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).

ファイルをモバイル デバイスにコピーする代わりに、QR コードに変換できます。

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

QR コードは ASCII としてコンソールに出力されます。 Android VPN アプリからスキャンでき、VPN トンネルが自動的に設定されます。

出力

OpenVPN に比べれば、WireGuard のセットアップはまさに魔法です。

出所: habr.com

コメントを追加します