VPN
 Computer >> コンピューター >  >> ネットワーキング >> VPN

5分で構築できる安全なWireGuard VPN ― 迅速かつ簡単に通信のプライバシーを守る方法

優れたVPNが、モバイル通信のセキュリティとプライバシーを維持するためにどれほど重要であるか、すでにご存じの方も多いでしょう。

空港やカフェの公衆Wi-Fiを使ってスマートフォンでネットバンキングを行う必要がある場合や、オンライン上のやり取りを第三者に盗み見られるのが心配な場合など、信頼できるVPNが提供するトンネル暗号化は非常に大きな価値があります。

しかし問題は、本当に「優れた」VPN、しかも利便性とコスト面でも納得できるものを見つけることです。

商用VPNサービスの課題

世の中には数多くの商用VPNサービスがあり、スマートフォンやノートPC向けの設定も比較的簡単です。しかし、こうしたサービスには次のような潜在的なデメリットがあります。

  • コストが高い:月額平均10ドル前後の支払いが必要になることが多い
  • データの扱いが不透明:サービス側が(故意であれ過失であれ)データを漏洩・悪用していないとは100%断言できない
  • 制限がある:安価なVPNではデータ使用量や接続可能なデバイス数が制限されることが多い

WireGuardがもたらすもの

一方、クラウド上でLinuxサーバーをすでに運用しているのであれば、WireGuard VPNを自前で構築することが、無料で本格的かつ妥協のないセキュリティとプライバシーを実現するシンプルな手段になります。

VPNを自分と友人数人のデバイスだけに限定するのであれば、サーバーへの追加の負荷はほとんど感じないはずです。仮にAWS EC2のt2.microリザーブドインスタンスを新規に立ち上げて費用を払うことになったとしても、年間コストはほとんどの商用VPNより大幅に安く抑えられます。さらに嬉しいことに、自分のデータを完全にコントロールできます。

ここからは、Ubuntu Linuxサーバー上でオープンソースのWireGuardソフトウェアを使って、その仕組みを実際に構築する手順をご紹介します。

なぜWireGuardなのか? それは非常に使いやすく、攻撃への耐性を特に考慮して設計されており、その完成度の高さから最近ではLinuxカーネル本体に組み込まれるまでになったからです。

実際の作業は文字通り5分以内で完了します。ただし、事前の計画立案、予期しないトラブルの切り分け、必要に応じた新規サーバーの起動などには、それなりに時間がかかる場合がある点には留意してください。

環境のセットアップ方法

まず最初に、使用しているファイアウォールでUDPポート51820を開放する必要があります。AWS EC2インスタンスに関連付けられたセキュリティグループの場合、設定イメージは以下のようになります。

次に、Linuxサーバー上でsudo権限のシェルを使い、WireGuardとresolvconfパッケージをインストールします。

厳密にはresolvconfは必須ではありませんが、LinuxマシンをWireGuardのクライアントとして設定する際に必要になるパッケージなので、ここで一緒にインストールしておきます。

apt install wireguard resolvconf

暗号化キーの生成方法

wg genkeyコマンドは新しい秘密鍵を生成し、/etc/wireguardディレクトリ内にファイルとして保存します。このディレクトリはWireGuardのインストール時に自動的に作成されています。

chmodコマンドで、その秘密鍵ファイルに適切な制限的なアクセス権限を設定します。Linuxでは他にもやり方はありますが、確実に正しく行うことが重要です。

wg genkey | sudo tee /etc/wireguard/private.key
chmod go= /etc/wireguard/private.key

次に、この秘密鍵の値をもとに、対応する公開鍵を生成します。これも/etc/wireguardディレクトリに保存されます。目的は、サーバーの公開鍵を使用するすべてのクライアントデバイスのWireGuard設定に追加し、逆にクライアント側の公開鍵をサーバー側の設定に追加することです。

秘密鍵は、生成されたマシンの外に出してはいけません。常に厳重に保護してください。

cat /etc/wireguard/private.key | wg pubkey | sudo tee

WireGuardサーバーの設定方法

これでサーバー設定ファイルを作成する準備が整いました。慣例に従ってファイル名はwg0.confとしますが、任意の名前を付けても構いません。また、異なるファイル名で複数の設定を同時に保持することも可能です。

設定内容は以下のようになります。

[Interface]
Address = 10.5.5.1/24
ListenPort = 51820
# /etc/wireguard/privatekey の自分の秘密鍵を使用
PrivateKey = your_key
[Peer]
# ワークステーションの公開鍵
PublicKey = your_key
# VPN内でのクライアントのIPアドレス
AllowedIPs = 10.5.5.2/32
[Peer]
# ノートPCの公開鍵
PublicKey = your_key
# VPN内でのクライアントのIPアドレス
AllowedIPs = 10.5.5.3/32

このファイルには「Interface」と2つの「Peer」、合計3つのセクションがあります。Interfaceセクションでは、サーバーが使用するプライベートNATネットワークアドレスを定義します。クライアントはまずサーバーのパブリックIPアドレス経由でアクセスを要求し、その後このプライベートアドレスに接続することになります。

アドレス体系は私の例に従う必要はありません。ただし、サーバーまたはクライアントが使用しているどのネットワークブロックとも重複しない、有効なプライベートIP範囲を選択してください。

AWSで先ほど設定したUDPセキュリティグループのルールに合わせて、ListenPortは51820としています。少しでもセキュリティを高めたい場合は、別のポート番号を選んでも構いません。

最後に、サーバーの秘密鍵をPrivateKeyの値として貼り付ければ、WireGuardが着信するクライアントからの認証要求を処理できるようになります。

最初のPeerセクションには、1台目のクライアントの公開鍵と割り当てられたプライベートIPアドレスのみを記載します。2つ目のPeerセクションも同様に、2台目のクライアントマシンに関する情報を記載します。

クライアントから公開鍵を取得する作業が、このセットアップ全体で最も手作業が多い部分です。ただし、これは自分専用のVPNなので、通常はコピー&ペーストで直接サーバー設定に貼り付けることができ、全体を手入力する苦労は不要です。

これで準備完了です。wg-quickコマンドでVPNを起動しましょう。upを指定すると、WireGuardが先ほど作成したwg0.confを読み込み、それをもとに新しいVPNインターフェースを構築します。

wg-quick up wg0

wgコマンドを実行すると、正常に動作していることを確認できます。最後にsystemctl enableを実行し、サーバー再起動のたびにこのWireGuardインターフェースが自動的に読み込まれるよう設定します。

systemctl enable wg-quick@wg0

WireGuardクライアントの設定方法

以上でサーバー側の作業はすべて完了です。クライアントデバイスへのWireGuard導入は、サーバーよりはるかに簡単か、あるいはほぼ同じ難易度のいずれかです。

どういう意味かというと、Windows、macOS、Android、iOSをお使いであれば、wireguard.com/installページからGUIアプリへのリンクが入手できます。これらのアプリはキーペアを自動的に生成してくれるため、入力が必要なのはサーバーのIPアドレス(またはドメイン名)と公開鍵だけです。あとはクライアントの公開鍵を、先ほど説明した方法でサーバーのwg0.confファイルに追加すれば完了です。

一方、Linux PCやノートPCをクライアントとして追加する場合は、やや複雑になります。基本的にはサーバー設定で紹介したすべての手順(キー生成を含む)を実行し、wg0.confという名前の設定ファイルを作成します。クライアント側の設定ファイルは以下のように記述します。

[Interface]
# 自分のコンピュータがVPN上で使用するアドレス
Address = 10.5.5.2/32
DNS = 8.8.8.8
# 秘密鍵をファイルから読み込む
PostUp = wg set %i private-key /etc/wireguard/privatekey
# トンネル初期化確認のためVPNサーバーへping送信
PostUp = ping -c1 10.47.47.1
[Peer]
# VPNサーバーのWireGuard公開鍵
PublicKey = your_key
# VPNサーバーのパブリックIPアドレス(自分の環境に合わせて変更!)
Endpoint = 54.160.21.183:51820
# 10.0.0.0/24 はVPNサブネット
AllowedIPs = 10.47.47.0/24
# PersistentKeepalive = 25

今回はInterfaceセクションがクライアントマシン自身を表し、下のPeerセクションがサーバーを指します。まずInterfaceから見ていきましょう。プライベートIPアドレスは、サーバー側の設定でこのクライアントに割り当てたアドレスと一致させてください。

ローカルのDNSサーバーを経由させたくない場合は、ここでカスタムDNSサーバーを指定できます。上記の例ではGoogleが提供するDNSを使用しています。

サーバー側で行ったように秘密鍵を設定ファイルに直接ハードコードする代わりに、WireGuardに起動時に秘密鍵ファイルを読み込ませることもできます。こちらの方がセキュリティ上のベストプラクティスと言えるでしょう。サーバー側でも同様の設定は可能です。最後に、設定スクリプトはPostUpのpingコマンドで接続をテストします。

Peer(サーバー)設定には、サーバーの公開鍵が必要です。ここに追記してください。

Endpointは、WireGuardにサーバーの場所を伝える項目です。これがないと何も動作しません! サーバーのパブリックIPアドレス(またはドメイン名)に、選択したポート番号を続けて指定します。繰り返しになりますが、51820はWireGuardのデフォルトポートです。

最後に、AllowedIPs設定で使用するネットワークアドレス範囲を定義し、オプションのPersistentKeepalive値を設定すると、接続が切断されるのを防ぐことができます。

クライアント側でのWireGuardの起動は、サーバー側とまったく同じくwg-quick up wg0で行います。ただし、これらの手順が必要なのはLinuxクライアントの場合のみで、その他のプラットフォームではGUIアプリを利用できます。

まとめ

以上で完了です。お約束した通り、わずか5分程度の作業で動作するVPNが手に入りました。これで、オンラインのプライバシーを守り、通信を保護するための言い訳が一つ減ったはずです。

さらに技術情報をお求めの方は、ぜひYouTubeチャンネルを購読ください。また、bootstrap-it.comサイトでは、Linux、セキュリティ、データ分析、AWSに関する多数の書籍やコースも提供しています。

  1. Amazon Fire TV StickでVPNを設定する3つの方法【初心者向け完全ガイド】

    海外のNetflixカタログをチェックしたい、話題のKodiを試してみたい、旅行先でBBC iPlayerを視聴したい——そんな願いは、Amazon Fire TV StickにVPNをインストールすればすべて叶います。第2世代以降のFire Stickをお持ちなら、設定はとても簡単です。では、具体的にどこから始めればよいのでしょうか。この記事で詳しく解説していきます。Fire TV StickでVPNが必要な理由Fire TV StickでVPNを使いたくなる理由は数多くあります。特にサードパーティ製アプリを多用している場合のデータプライバシー保護はその一つです。また、自国でブロックされてい

  2. よくあるネットワークエラー5選!原因とすぐできる解決方法を徹底解説

    誰もが一度はネットワークのトラブルに悩まされた経験があるのではないでしょうか。画面にエラーが表示されることもあれば、気づかないうちにバックグラウンドで通信を妨げていることもあります。ネットワークエラーは種類が非常に多く、インターネット接続にさまざまな影響を及ぼします。 では、最もよく見られるネットワークエラーにはどのようなものがあり、どうすれば解決できるのでしょうか。この記事では、代表的な5つのトラブルとその対処法を詳しくご紹介します。 1. DNSの不具合 DNS(Domain Name System/ドメインネームシステム)とは、ドメイン名をIPアドレスに変換し、ブラウザがWebページを読