ソフトウェアVPN試してみます

こんにちは。皆様Oracle Cloud使っていますか?

前回は、OCIのマーケットプレイスから「OpenVPN」を使ってのVPN接続を紹介しました。

2回目である今回は「WireGuard」を使ってVPN接続を試してみます。

  • OpenVPN   ← 前回
  • WireGuard ← 今回

WireGuardもソフトウェアVPNのうちの1つで、とても簡単にVPN環境を構築することが可能です。また、OpenVPN同様にWindowsやLinux、iOSやAndroidでも利用することができます。

参考:https://www.wireguard.com/
https://www.wireguard.com/quickstart/
https://docs.oracle.com/cd/F22978_01/vpn/vpn-wguard.html

前回の記事も是非ごらんくださいね

今回の目標です(前回と同じです)

 目標

クライアントマシン(Windows10)からVPN経由でOCI上のプライベートサブネット内インスタンスへSSH接続できること

 前提

  • 構成は以下の通りとします。
  • OCI上のVCN、パブリックサブネット、プライベートサブネット及びプライベートサブネット内のインスタンスは作成済みとします。
  • OCI上のプライベートサブネット内インスタンスは、セキュリティリストもしくはネットワーク・セキュリティ・グループを設定し、パブリックサブネット内のIPアドレスからping、SSHが可能の状態となっています。

WireGuard サーバーの作成と設定をします

 インスタンスを作成し、WireGuardをインストールします

OCI管理コンソールにログインして、あらかじめ作成済みのパブリックサブネット内にインスタンスを作成します。シェイプとOSは任意で選択します。

今回OSはOracleLinux8を使用します。
インスタンスには、パブリックIPを付けてください。

インスタンスが作成できたら、SSHでログインします。

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

# dnf install –y wireguard-tools

これだけでインストールできちゃうの!

サーバーに必要な設定をします

/etc/sysctl.confファイルを編集し、以下を追記します。

net.ipv4.ip_forward = 1

編集内容を反映させます。

# sysctl –p

サーバーとクライアントが接続するための公開鍵、秘密鍵を作成します
まず、サーバー用とクライアント用のキーを格納するためのディレクトリを作成します。

# mkdir –p ~/.wireguard/server
# mkdir ~/.wireguard/client
# cd ~/.wireguard/
# umask 077

次に作成したディレクトリ内でキーを生成します。
serverとclient両方で実行します。

# wg genkey | tee privatekey | wg pubkey > publickey

キーの内容をserver、clientそれぞれで確認します。

(例)
# cat ~/.wireguard/server/publickey

/etc/wireguard/wg0.confファイルを作成し、次を例に内容を編集します。

[Interface]
Address = 10.0.1.96/24 →サーバーのプライベートIPアドレス
ListenPort = 51820
PrivateKey = 生成したサーバーの秘密鍵
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

 [Peer]
PublicKey = 生成したクライアントの秘密鍵
AllowedIPs = 192.168.0.0/24 →接続を許可するIPアドレス

PostUp、PostDownはそれぞれ起動時、停止時に実行するコマンドを指定することができます。
Firewalldの設定をここに記述することによって、WireGuard使用時にポートの開け閉めを行うことができます。

wg0.confでポートの開放を行わない場合は、firewalldでUDP51820ポートを開放します。

PostUP、PostDownはfirewall-cmdを使うのもいいね!

OCI管理画面で、セキュリティリストもしくはネットワーク・セキュリティ・グループから、クライアントのパブリックIPからの接続に対しポートを開放します。

WireGuardトンネルを起動します。

# wg-quick up wg0

ステータスを確認します。

# wg

停止する場合は以下のコマンドです。

# wg-quick down wg0

これでサーバー側の設定はおしまい。
ポートはUDPだよ、注意してね!

クライアント用ソフトをインストールして接続してみます。

クライアント用WireGuardのインストールと設定ファイルの作成

WireGuardのサイトからWindows用のインストーラをダウンロードし、インストールします。
https://www.wireguard.com/install/

次を例にクライアント側の設定ファイルを作成し、保存します。
ここではVPN.confという名前で保存します。

[Interface]
Address = 192.168.0.101/24 →クライアントに割り当てるIPアドレス
PrivateKey = 生成したクライアントの秘密鍵

[Peer]
PublicKey = 生成したサーバーの公開鍵
AllowedIPs = 0.0.0.0/0
Endpoint = サーバーのパブリックIP:51820

WireGuardクライアントアプリの起動とサーバー接続

クライアントアプリを起動します。
「ファイルからトンネルをインポート」をクリックし、作成した「VPN.conf」をインポートします。

設定ファイルの内容が読み込まれます。

右下の「編集」からも設定内容を直接変更することが可能です。

ファイルから設定を読み込むことも、アプリから直接設定することもできるんだね!

「有効化」をクリックすると、サーバーと接続します。

接続できました。
「ログ」のタブからも接続状況を確認することができます。

接続できないときは、接続設定と
OCIやインスタンスのファイアウォール設定も見直してみてね。

クライアントのIPアドレスを確認します。

設定したIPアドレスに変わっています。

それではプライベートサブネット内のインスタンスへpingしてみます。

届きました。

次はSSHしてみます。

接続することができました!

最後に

いかがでしたでしょうか?
今回はWireGuardを使用してVPN接続を試してみました。
サーバー、クライアントそれぞれ設定は必要ですが、簡単に接続することができました。

  • OpenVPN   ← 前回
  • WireGuard ← 今回

当社ではOracle Cloudにも精通している技術者が複数おり、お客様の支援をさせて頂きながら、最新技術の検証にも取り組んでいます。

Oracle Cloudをご検討の際はお問い合わせください!

投稿者プロフィール

技術チーム
技術チーム
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早6年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆しています!