2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LinodeでWireGuardを月額5ドルで構築する

Posted at

Linodeとは

Linodeについてはこちらを参照。

WireGuardとは

image.png
WireGuard®は、最先端の暗号技術を利用した、非常にシンプルかつ高速な最新の VPN です。
IPsecやOpenVPNよりも高速で、シンプルで、高いパフォーマンスを発揮することを目的としています。
サイト間VPNや端末型VPNを低コストでセキュアに構築することができます。
WireGuardは汎用VPNとして設計されており、さまざまなプラットフォームに対応します。
現在はクロスプラットフォーム(Windows、macOS、BSD、iOS、Android)で広く展開されています。

Linodeで構築するWireGuard

今回はLinode上でWireGuardのサーバーを構築し、WindowsにWireGuardのクライアントをインストールしてVPN接続をする構成となります。

image.png

この構成では、以下のような様々な用途でWireGuardを利用することができます。

  • 送信元IP固定が必要なSaaSなどへアクセスするために利用する
  • LinodeのインスタンスにVPN経由でセキュアにアクセスするために利用する
  • 接続元IPに地理的なロケーションが必要な要件に利用する

インスタンスの選定

WireGuardを最小構成で構築する場合、Linode側は Shared CPU(共有)プランのNanode 1GB 月額5ドルから構築することができます。
Nanode 1GBでは、インバウンド40Gbps、アウトバウンド1Gbpsの帯域が確保されており、5ドルのインスタンス費用の中に、ネットワークのアウトバウンド転送量1TB分の料金が含まれています。
1TB分のアウトバウンド転送量の範囲での利用であれば、追加の費用はかかりません。
もし超過した場合には1GBあたり0.01ドルがかかります。インバウンド転送量は無料です。

image.png

今回は、最小構成であるNanode 1GBで構成します。
インスタンスの選定に関しては以下の記事を参照ください。

リージョンの選定

執筆時点でLinodeは11のリージョンに拠点を展開しています。
今回は、接続元(VPNクライアント側)は日本、接続先となるリージョンはFremontとして構築を行います。

image.png

各リージョンではSpeed Testできる環境を用意しており、リージョンの選定の参考にすることができます。

Linodeインスタンスの構築

Linodeのコンソールからインスタンスを作成します。

  • Ubuntu 最新のLTSを選択
  • RegionはFremontを選択
  • InstanceはNanode 1GBを選択

image.png

  • Private IPにチェック(同一リージョンのインスタンスへ接続するため)
  • Create Linodeを選択し、インスタンスを作成

image.png

作成された際に表示されるインスタンスのIPアドレスを控えておきます。

image.png

サーバーにWireGuardをインストール

VPNのネットワークから別のネットワークに通信するため、IPフォワーディングを許可する。

root@localhost:~# vim /etc/sysctl.conf

net.ipv4.ip_forward=1  # コメントアウトを外す

設定を反映する。

root@localhost:~# sysctl -p
net.ipv4.ip_forward = 1

net.ipv4.ip_forwardが1になっていれば問題ない。

root@localhost:~# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

WireGuardをインストールします。

apt update
apt install wireguard

WireGuardで使用する鍵を作成します。
鍵は以下の3種類を用意する必要があります。

  • サーバー用のPrivate Key(秘密鍵)とPublic Key(公開鍵)
  • クライアント用のPrivate Key(秘密鍵)とPublic Key(公開鍵)
  • サーバーとクライアントで利用する、preshared-key(事前共有鍵)

サーバー用のPrivate Key(秘密鍵)を作成。

wg genkey | sudo tee /etc/wireguard/server_private.key
chmod 600 /etc/wireguard/server_private.key

サーバー用のPublic Key(公開鍵)を作成。

cat /etc/wireguard/server_private.key | wg pubkey | tee /etc/wireguard/server_public.key
chmod 600 /etc/wireguard/server_public.key

クライアント用のPrivate Key(秘密鍵)を作成。

wg genkey | tee /etc/wireguard/client1_private.key
chmod 600 /etc/wireguard/client1_private.key

クライアント用のPublic Key(公開鍵)を作成。

cat /etc/wireguard/client1_private.key | wg pubkey | tee /etc/wireguard/client1_public.key
chmod 600 /etc/wireguard/client1_public.key

preshared-key(事前共有鍵)を作成。

wg genkey | tee /etc/wireguard/client1_preshared.key
chmod 600 /etc/wireguard/client1_preshared.key

VPN用のインターフェイスの設定を作成。

root@localhost:~# cat /etc/wireguard/wg0.conf
[Interface]
PrivateKey = [/etc/wireguard/server_private.key の内容を記載]
Address = 172.16.0.254/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = [/etc/wireguard/client1_public.key の内容を記載]
PresharedKey = [/etc/wireguard/client1_preshared.key の内容を記載]
AllowedIPs = 172.16.0.1/32

クライアント用の設定を作成。
今回の場合、VPN接続時に利用するDNSはGoogle Public DNS(8.8.8.8)を指定しています。

root@localhost:~# cat /etc/wireguard/wireguard_client1.conf
[Interface]
PrivateKey = [/etc/wireguard/client1_private.key の内容を記載]
Address = 172.16.0.1/24
DNS = 8.8.8.8

[Peer]
PublicKey = [/etc/wireguard/server_public.key の内容を記載]
PresharedKey = [/etc/wireguard/client1_preshared.key  の内容を記載]
EndPoint = [LinodeのIPアドレスを記載]:51820
AllowedIPs = 0.0.0.0/0

VPNインターフェイスを起動し、自動起動をするように設定する。

wg-quick up wg0
systemctl enable wg-quick@wg0

クライアントにWireGuardをインストール

SCP等を利用して先程作成したクライアント用の設定をダウンロードします。

scp root@[LinodeのIPアドレス]:/etc/wireguard/wireguard_client1.conf ./

クライアントはWindowsになるため、Windowsのインストーラーをダウンロードしてインストールします。

アプリを起動したら「ファイルからトンネルをインポート」を選択し、先程ダウンロードした設定ファイルを読み込みます。

image.png

「有効化」を選択し、VPNが接続できれば設定は完了です。

image.png

クライアントの接続確認

接続元がLinodeのIPになっていることを確認します。
今回は、whatismyipのサイトでFremontとして扱われていることを確認しています。

image.png

同一リージョンのLinodeインスタンスへ、SSH接続できることを確認します。
コンソールからプライベートIPアドレスを確認します。

image.png

ssh root@192.168.211.253

Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-47-generic x86_64)

プライベートIPへのSSHの接続がVPN経由で行うことができました。

ネットワーク転送量の確認

各インスタンスの設定から、「Network」のタブを選択することでネットワーク使用量が確認できます。

image.png

「Settings」のタブからは、追加のネットワーク転送料がかかる前に、設定されたしきい値を超えたらメールにてアラートを通知してくれる設定ができます。

image.png

まとめ

WireGuardをLinodeで利用することで、低コストでVPN環境を構築することができました。
他のインスタンスへ接続する際の接続元としても利用することができ、セキュアなサーバー環境を用意するためにも利用することができます。

関連記事

アカマイ・テクノロジーズ合同会社のQiitaではLinode関連など開発者向けの記事を記載しております。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?