それでは、実際の方法を見ていこう。まずはクラウド環境を用意する。
今回はAzureを利用したが、Amazon EC2(無料特典対象のt2.microや低価格なt2.nanoでもOK)など、ほかのサービスでも構わない。
OSにはUbuntu 20.04を利用した。最低限のアップデートをした後、「sudo apt install wireguard」と、一発でWireGuardをインストールできて簡単なのが理由だ。
このほか、VMの設定としては、セキュリティグループでWireGuardのポート(標準51820だが任意でOK)を通過させておく必要がある。
外部からアクセスできるDNS名を設定WireGuardのポートを通過させる準備ができたら、サーバーの設定を行う。まずは、「/etc/sysctl.conf」を編集し、IPv4をフォワードできるようにする。
net.ipv4.ip_forward=1
続いて、以下のように接続に利用する公開鍵と秘密鍵のペアを作成する。サーバーおよび接続する全てのクライアント(ピア)の分が必要となる。ここでは「client1」しか作成していないが、client2、client3などと繰り返して作成しておく。
mkdir wgkeyscd wgkeyswg genkey > server_private.keywg pubkey > server_public.key wg genkey > client1_private.keywg pubkey > client1_public.key sudo chmod 600 *.key
これらの鍵は、WireGuardの設定ファイルに登録する必要があるので、「cat」コマンドなどで中身を表示し、キーを控えておく(秘密鍵は厳重に管理すること)。
準備ができたら、WireGuardの設定ファイル(/etc/wireguard/wg0.conf)を新規作成する。設定情報は次の通りだ。
サーバー設定サーバーとして動作させるクラウド上VMのWireGuard設定情報先に作成したサーバーの秘密鍵、クライアントの公開鍵をクラウド上VMのWireGuardへ登録する。VPNの内部アドレスは今回は「192.168.99.0/24」を利用し、サーバーには「192.168.99.1/24」を割り当てた。
ポイントとなるのは「Peer」セクションだ。今回は、Azure VM上のWireGuardが他拠点の接続を集約するかたちとなるため、拠点側に設置するWireGuardクライアントの情報をまとめて記述しておく。
中でも重要なのが「AllowedIPs」の項目だ。この記述が間違っていると、アクセスできない宛先が発生する。
WireGuardでは、内部でネットワーク間のルーティングを自動的に構成してくれるが、そのベースとなる情報が、この「AllowedIPs」となるのだ。
基本的には、接続先のWireGuardに割り当てる内部アドレスを指定すればいい。上図の「#Client」などのように、PCやモバイル端末などが単独で接続する場合は、その端末にのみアクセスできればいいので、端末の内部アドレスのみで構わない。
一方、サーバー設定の「Peer」セクションにあるSite1やSite2は、拠点間接続の設定例だ。本社と支店のようにネットワーク同士を接続する場合、背後のローカルネットワークにアクセスできるようにする必要があるため、「,(カンマ)」で区切って、接続先の内部ネットワークも追記しておく。
このため、基本的には「つなぎたいネットワーク」をここに記述することで、WireGuardが自動的にそのルートを判断してくれると考えればいい。
ここまでの設定ができたら、次のコマンドで動作を確認する。
sudo wg-quick up wg0sudo wg
エラーがなければ、さらに次のコマンドで自動起動するようにして、サーバー側の設定は完了だ。
sudo systemctl enable wg-quick@wg0