[ConoHa VPS] WireGuardでVPNサーバー構築 [Ubuntu 22.04 LTS]

スポンサーリンク
Linux

ConoHa VPSサービスを利用して、Ubuntu 22.04環境にWireGuard VPNサーバーを構築したときの記録を共有します。

ConoHa VPSは初期状態でrootユーザーが有効になってしまっているため、§1. ConoHa VPSの初期設定 ではrootユーザーの無効化など最低限のセキュリティ設定をしています。

ConoHa VPSではない方は §2. WireGuardのインストール・設定 から読み進めてください。

この記事を読んでConoHa VPSに興味をもたれた方へ!下のリンクからご契約頂ければ、すぐ使えるクーポン1,000円分が貰えます!個人情報的なものは双方に連絡ないのでご安心ください。(契約後に2,000円分以上ご利用頂くと私にもクーポンが出るらしい?けど貰ったことはありません笑)
レンタルサーバーならConoHa|登録者数45万アカウント突破
ConoHaではレンタルサーバー、VPS(仮想専用サーバー)、Windows Serverなどのホスティングサービスを提供しております。充実のラインナップからご利用用途に合わせてお好きなサービスをお選びいただけます。
スポンサーリンク

§1. ConoHa VPSの初期設定

前提

  • ConoHa VPSで「Ubuntu 22.04 (64bit)」のサーバーを追加していること
  • ConoHa VPSの管理画面からコンソールを開く、または、SSH接続した状態で、rootユーザーでログインしていること

ユーザーの設定

ユーザーを追加する

好きなユーザー名を追加してください。

# "mulong"という名前のユーザーを追加する場合の例です
adduser mulong
Adding user `mulong' ...
Adding new group `mulong' (1000) ...
Adding new user `mulong' (1000) with group `mulong' ...
Creating home directory `/home/mulong' ...
Copying files from `/etc/skel' ...
New password: 

作成したユーザーにsudo権限を付与する

gpasswd -a mulong sudo
Adding user mulong to group sudo

ログアウト

logout

追加したユーザーでログインし直す

SSH接続の場合
# サーバーのグローバルIPアドレスが"198.51.100.120"の場合の例です
ssh mulong@198.51.100.120
VPS管理画面のコンソールの場合
Ubuntu 22.04 LTS 198-51-100-120 tty1

login: mulong
Password:

rootアカウントを無効化する

sudo passwd -l root

SSHとファイアウォールの設定

Ubuntu標準搭載のファイアウォール管理ツールUFWを使い、ファイアウォールの設定をします。

UFWのデフォルトポリシーを設定する

# 全てのポートを閉じます。
sudo ufw default deny

UFWで接続ログを残す設定をする

sudo ufw logging on
sudo ufw logging medium

SSHの設定を変更する

sudo vim /etc/ssh/sshd_config
: (省略)
#Port 22
: (省略)
PermitRootLogin yes
: (省略)
: (省略)
Port 54321 👈 sshのポート番号を変更(54321番の場合)
: (省略)
PermitRootLogin no 👈 rootでのsshログインを無効化
: (省略)

SSHの設定を反映する

sudo systemctl restart sshd
【注意】
この時点ではまだSSH接続できません。
このまま続けて、変更後のSSHポート番号に合わせてファイアウォールを設定します。

SSH接続用にUFWを設定する

接続元のIPアドレスが固定の場合、IPアドレスを限定してポートを開くと安心です。

# 接続元IPアドレスを"203.0.113.32"に限定する場合の例です
sudo ufw allow from 203.0.113.32 to any port 54321

接続元が固定IPアドレスではない場合や、よりセキュリティを高めるには、公開鍵認証も追加すると良いでしょう。(手順は下記記事を参照してください。)

UFWを有効化する

sudo ufw enable

新しいポート番号で再接続する

exit
# サーバーのIPアドレスが"198.51.100.120"、SSHポートを"54321"に設定していた場合の例です
ssh -p 54321 mulong@198.51.100.120
ちなみに、もし設定ミスでSSH接続できなくなっても、ConoHaのVPS管理画面のコンソールからであればログインできます。(便利ですね!)

UFWの不要なルールを削除する

現在のルールを確認します。

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
54321                      ALLOW       203.0.113.32
OpenSSH (v6)               ALLOW       Anywhere (v6)

SSH (OpenSSH: 22) ポートは変更済みなので削除します。

sudo ufw delete allow OpenSSH
Status: active

To                         Action      From
--                         ------      ----
54321                      ALLOW       203.0.113.32

これで必要最小限の初期設定は完了です。

お待たせしました。それではWireGuardの設定をしましょう!

スポンサーリンク

§2. WireGuardのインストール・設定

インストール

sudo apt install wireguard

鍵の発行

事前準備として、先にWireGuardの設定で使う鍵を発行しておきます。

発行する鍵が沢山あるので、混乱しないようにフォルダ分けしておくと良いと思います。

サーバー用のキーペア(公開鍵&秘密鍵)の作成

mkdir -p ~/wireguard/server
cd ~/wireguard/server
wg genkey | tee privatekey | wg pubkey > publickey

作成した2つのファイル(privatekey, publickey)のファイルアクセス権を変更します。

chmod 600 privatekey publickey

作成したキー値はcatコマンドで確認できます。

cat privatekey publickey

クライアント用のキーペア(公開鍵&秘密鍵)と事前共有鍵の作成

サーバーとほぼ同様の方法でクライアント用の鍵を発行します。
クライアント用では事前共有鍵も作ります。

接続したいクライアントの数だけ作ります。(下記の例では3つ作成しています)

mkdir -p ~/wireguard/client_001
cd ~/wireguard/client_001
wg genkey | tee privatekey | wg pubkey > publickey
wg genpsk > preshared
chmod 600 privatekey publickey preshared
cat privatekey publickey preshared

mkdir -p ~/wireguard/client_002
cd ~/wireguard/client_002
wg genkey | tee privatekey | wg pubkey > publickey
wg genpsk > preshared
chmod 600 privatekey publickey preshared
cat privatekey publickey preshared

mkdir -p ~/wireguard/client_003
cd ~/wireguard/client_003
wg genkey | tee privatekey | wg pubkey > publickey
wg genpsk > preshared
chmod 600 privatekey publickey preshared
cat privatekey publickey preshared

IPフォワードの設定

IPv4とIPv6のパケットフォワーディングを有効にします。

sudo vim /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1 👈 コメント(#)を外す

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
net.ipv6.conf.all.forwarding=1 👈 コメント(#)を外す

変更を反映します。

sudo sysctl -p

ファイアウォールの設定

WireGuardはデフォルトでは51820ポートを使います。

この記事でもそれにならって51820にしていますが、実際には別のポート番号に変えると良いでしょう。

# WireGuardで"51820"ポートを使う場合の例です。
sudo ufw allow 51820/udp

WireGuardのconfファイル作成

WireGuardは後述するwg-quickコマンドを実行すると、自動で/etc/wireguard内のconfファイルを読み込んで設定・起動する仕組みになっています。

読み込ませるconfファイルを作成しましょう。

サーバー用のconfファイル作成

sudo vim /etc/wireguard/wg0.conf
[Interface]
# server
Address = 10.0.25.1/24 # CIDR表記を使います。例はVPNで使うアドレス範囲を 10.0.25.1 ~ 10.0.25.254 にする場合。
ListenPort = 51820 # WireGuardサーバーのポート番号
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/server/privatekey の値

PostUp = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# client_001
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_001/publickey の値
PresharedKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_001/preshared の値
AllowedIPs = 10.0.25.2/32 # client_001に割り当てるIPアドレス

[Peer]
# client_002
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_002/publickey の値
PresharedKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_002/preshared の値
AllowedIPs = 10.0.25.3/32 # client_002に割り当てるIPアドレス

[Peer]
# client_003
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_003/publickey の値
PresharedKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_003/preshared の値
AllowedIPs = 10.0.25.4/32 # client_003に割り当てるIPアドレス
PostUp, PreDownの部分

wg0ネットワークからの通信をeth0へフォワーディングし、その通信がWireGuardサーバーから直接行われたように見せかける設定をしています。以下のサイトを参考にしました。

How To Set Up WireGuard on Ubuntu 20.04 | DigitalOcean
In this tutorial, you will set up WireGuard on an Ubuntu 20.04 server, and then configure another machine to connect to it as a peer using both IPv4 and IPv6…

クライアント用のconfファイル作成

sudo vim ~/wireguard/client_001.conf
[Interface]
# client_001
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_001/privatekey の値
Address = 10.0.25.2/24
DNS = XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX 👈 ConoHaの場合は管理画面でDNS1,DNS2のアドレスを設定する(確認方法は後述)と良いと思います。

[Peer]
# server
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/server/publickey の値
PresharedKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_001/preshared の値
AllowedIPs = 0.0.0.0/0 👈 WireGuard経由で接続したいIPアドレスを指定します。0.0.0.0/0にすると全ての通信がWireGuard経由になります。
Endpoint = 198.51.100.120:51820 👈 WireGuardサーバーのグローバルIPアドレス:ポート番号を指定

クライアント側のconfファイルでは、[Peer]がWireGuardサーバーのことを意味します。

同様にして、client_002, client003についても書くとこうなります。

[Interface]
# client_002
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_002/privatekey の値
Address = 10.0.25.3/24
DNS = XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX 👈 ConoHaの場合は管理画面でDNS1,DNS2のアドレスを設定する(確認方法は後述)と良いと思います。

[Peer]
# server
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/server/publickey の値
PresharedKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_002/preshared の値
AllowedIPs = 0.0.0.0/0 👈 WireGuard経由で接続したいIPアドレスを指定します。0.0.0.0/0にすると全ての通信がWireGuard経由になります。
Endpoint = 198.51.100.120:51820 👈 WireGuardサーバーのグローバルIPアドレス:ポート番号を指定
[Interface]
# client_003
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_003/privatekey の値
Address = 10.0.25.4/24
DNS = XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX 👈 ConoHaの場合は管理画面でDNS1,DNS2のアドレスを設定する(確認方法は後述)と良いと思います。

[Peer]
# server
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/server/publickey の値
PresharedKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= 👈 cat ~/wireguard/client_003/preshared の値
AllowedIPs = 0.0.0.0/0 👈 WireGuard経由で接続したいIPアドレスを指定します。0.0.0.0/0にすると全ての通信がWireGuard経由になります。
Endpoint = 198.51.100.120:51820 👈 WireGuardサーバーのグローバルIPアドレス:ポート番号を指定
AllowedIPsの書き方

WireGuardサーバー経由で通信したい、接続先IPアドレスを記述します。

海外から日本のサービスを使うときや、IPアドレス制限の掛かっているサービスにアクセスするときだけWireGuardサーバー経由で通信したいけど、その他はクライアントPCから直接通信したい。

という場合は、AllowIPsにWireGuardサーバー経由で接続したいサービスのIPアドレスを指定すると実現できます。

面倒臭がって0.0.0.0/0を指定すると、全てのIPアドレス(ローカルIPアドレス範囲含む(!))に対する通信がWireGuardサーバー経由になるため、ローカルネットワーク内で通信したい場合は、そのローカルネットワークのIPアドレス範囲を除外したアドレスを指定する必要があります。

[ConoHa VPSの場合] DNS1, DNS2サーバーアドレスの確認方法

VPS管理画面に入って、下画像の赤枠部分に記載されています。

WireGuardクライアントにconfファイルを読み込ませる

WireGuardクライアントを下記リンク(WireGuard公式)からダウンロードします。

Installation - WireGuard

クライアント用confファイルを、WireGuardクライアントに読み込ませて下さい。

動作確認

sudo wg-quick up /etc/wireguard/wg0.conf

これでWireGuardサーバーが立ち上がるので、クライアントから接続を試してみましょう。

【失敗メモ】
はじめ、sudo wg setconf wg0 /etc/wireguard/wg0.conf を実行してWireGuardに設定を読み込ませるものと勘違いしていたため、
Line unrecognized: `Address=10.0.25.1/24'
Configuration parsing error
というエラーが出てきて躓きました。
wg-quickコマンドとwgコマンドでは、confファイルの書き方が違います。
wg-quick用に書かれたconfファイルを、wgコマンドで読み込むと上記エラーが出ます。

接続が確認できたらWireGuardサーバーを終了します。

sudo wg-quick down /etc/wireguard/wg0.conf

自動起動の設定

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

おまけ)VPN接続中にSSH接続するためのファイアウォール設定

sudo ufw allow from 10.0.25.0/24 to any port 54321 proto tcp

以上です!

コメント

タイトルとURLをコピーしました