Raspberry PiでOpenVPN環境を構築

Linux
この記事は約15分で読めます。

 

このブログではASUSルーターを使用したOpenVPNサーバーの設定方法や接続方法を何度か紹介してきました。

OpenVPNサーバーの構築はASUSルーターでなくても構築できる、WindowsやLinuxなどいろいろなプラットフォームで環境を作ることができます。

Raspberry Pi 4を購入してから、初代Raspberry Piが余った状態になったのでOpenVPNサーバーを構築してみました。

ラズパイが余ったからやってみよう!くらいの気持ちです。

 

 

                 

目標

 

今回の目標はRaspberry Piで構築したOpenVPNサーバーに対して、自宅ネットワーク外からVPN接続し、LAN内にアクセスすることです。

イメージを作ってみました。

 

環境

 

  • Raspberry Pi

    モデル
    $ cat /proc/cpuinfo | grep Model
    Model           : Raspberry Pi Model B Rev 2
    

    メモリ
    $ vcgencmd get_mem arm
    arm=448M
    $ vcgencmd get_mem gpu
    gpu=64M
    ※つまりRAMは512M

    OS
    $ uname -a
    Linux raspberrypi 5.10.92+ #1514 Mon Jan 17 17:35:21 GMT 2022 armv6l GNU/Linux
    Raspberry Pi Imager では、Raspberry Pi OS Lite (32bit)を選択しています。


  • ルーター

    ASUS RT-AX56U
    ルーター機能によるOpenVPNサーバーは機能ONの状態

Raspberry Piのセットアップ

 

今回はRaspberry Piのセットアップからやりました。

そうはいっても以前紹介した通りの手順を踏んだだけです。

今回は8GBのSDカードを使用しました。

Raspberry Pi Imagerで『Raspberry Pi OS Full (32bit)』を選択したところ、以下のメッセージが表示されたので、Raspberry Pi OS Lite (32bit)を選択しています。

 

Storage capacity is not enough.
Needs to be at least 9.3GB.

 

 

                 

DDNSの設定 

 

自宅の回線は固定IPではないのでDDNSサービスを使用してグローバルIPアドレスの変更に対応できるようにしておきます。

DDNSサービスは以前紹介したNo-IPを使いました。

 

No-IPのDynamic Update Clientの設定を行います。

$ cd /usr/local/src/

$ sudo wget https://www.noip.com/client/linux/noip-duc-linux.tar.gz

$ sudo tar xzf noip-duc-linux.tar.gz

$ cd noip-2.1.9-1/

$ ll
合計 280
-rw-r--r-- 1 501 staff 18092 12月 14  2002 COPYING
-rw------- 1 501 staff 13842 11月 16  2008 LEEME.PRIMERO
-rw-r--r-- 1 501 staff 14457 11月 13  2008 LIESMICH.ERST.deutsch
-rw------- 1 501 staff 13658  8月  7  2004 LISEZMOI.ENPREMIER
-rw-r--r-- 1 501 staff  1021 11月 26  2008 Makefile
-rw-r--r-- 1 501 staff 12840  7月 13  2004 README.FIRST
-rw-r--r-- 1 501 staff 13178  8月 20  2005 README.FIRST-SWE
-rw------- 1 501 staff 13430  2月  8  2006 README.FIRST.FRANCAIS
-rw------- 1 501 staff 14488  7月  6  2004 README.FIRST.ITALIANO
-rw------- 1 501 staff 15618  2月 28  2005 README.FIRST.JAPANESE
-rw------- 1 501 staff 12508 11月 27  2004 README.FIRST.pt_BR
-rw-r--r-- 1 501 staff 14607  8月  6  2008 README.FIRST_PT
drwxr-xr-x 2 501 staff  4096 11月 26  2008 binaries
-rw-r--r-- 1 501 staff   889  1月 17  2004 debian.noip2.sh
-rw------- 1 501 staff   536  1月 16  2005 gentoo.noip2.sh
-rw------- 1 501 staff  1193  4月 14  2004 mac.osx.startup
-rw-r--r-- 1 501 staff 76937 11月 26  2008 noip2.c
-rw-r--r-- 1 501 staff  1276  7月 28  2003 redhat.noip.sh

$ sudo make

$ sudo make install
if [ ! -d /usr/local/bin ]; then mkdir -p /usr/local/bin;fi
if [ ! -d /usr/local/etc ]; then mkdir -p /usr/local/etc;fi
cp noip2 /usr/local/bin/noip2
/usr/local/bin/noip2 -C -c /tmp/no-ip2.conf

Auto configuration for Linux client of no-ip.com.

Please enter the login/email string for no-ip.com  [メールアドレス]
Please enter the password for user '[メールアドレス]'  ********

3 hosts are registered to this account.
Do you wish to have them all updated?[N] (y/N)  y
Please enter an update interval:[30]  
Do you wish to run something at successful update?[N] (y/N)  n

New configuration file '/tmp/no-ip2.conf' created.

mv /tmp/no-ip2.conf /usr/local/etc/no-ip2.conf

$ sudo /usr/local/bin/noip2

 

 

                 

PiVPNのインストール

 

以下のコマンドでインストールをします。

curl -L https://install.pivpn.io | bash

 

セットアップウィザードが出てくるので画面に従って設定を進めます。


Enterキーを押します。




VPNサーバーとなるRaspberry PiのプライベートIPアドレスの固定が必要だと書いてあります。
Enterキーを押します。



『No』を選択して、固定IPの設定を行います。

 


現在使用しているIPアドレスとゲートウェイをそのまま設定する場合はYES、違う場合はNOを選択します。
今回は別のIPアドレスにしたいのでNOにしました。


任意のIPアドレスとプレフィックス長を入力します。
例:192.168.1.10/24  といった具合に入力します。


ゲートウェイ(ルーター)のIPアドレスを入力します。


入力した内容に問題がなければYESを選択します。


Enterキーを押します。


VPN設定を保持するユーザーを選択します。
Raspberry Pi初期設定後で他のユーザーを作っていないので、Piだけが表示されています。
ユーザーが複数表示されていれば、カーソルでユーザーを選択し、スペースキーを押して、ユーザー名の左にアスタリスク(*)が付くことを確認します。



WireGuardではなく、OpenVPNにカーソルを合わせ、スペースキーを押し、Enterキーを押します。



推奨設定を使用して設定するかの確認です。
推奨設定を使用する⇒Noを選択
カスタム設定をする⇒Yesを選択


OpenVPNで使用するポート番号を入力します。
デフォルトでは1194が入っています。
特にこだわりがないのでこのまま進めました。



ポート番号の確認です。
Enterキーを押します。



VPNクライアントが利用するDNSサーバーの選択です。
Googleがあればよかったのですが、ないのでQuad9を選択しました。
下にスクロールしたら、GoogleもCloudFlareもありました。

お好きなDNSサーバーを選択してください。



クライアントがVPNサーバーに接続するときに使用する宛先を選択します。
グローバルIPアドレスかDNSを選択できます。
No-IPで取得したDDNSを使用するので、『DNS Entry』を選択して進めます。



No-IPで取得したDDNSを入力します。



DNS名を確認し、問題なければYesを選択してEnterキーを押します。


Enterキーを押します。



セキュリティ関連の自動更新に関する案内です。


セキュリティ関連の自動更新パッチをサーバーに適用するかしないかを選択します。
Yesにして進めます。



インストール設定はこれで完了です。
後で、pivpn addのコマンドでVPN接続するためのユーザーを作成します。



セキュリティ関連の自動更新設定をするために再起動を促すメッセージです。
Yesを選択し、再起動します。



Enterキーを押すと、Raspberry Piが再起動します。

 

 

                 

ポート開放

 

ルーターでポート開放の設定をします。

RT-AX56Uでは、[WAN] ⇒ [ポートフォワーディング] から[ポートフォワーディングを有効にする]をONにすると設定できます。

  • プロトコル:UDP(PiVPNで推奨設定を使用した場合)
  • 外部ポート:1194(PiVPNで推奨設定を使用した場合)
  • 内部IPアドレス:VPNサーバーのIPアドレス

 

 

                 

VPN接続するユーザーの作成

 

VPNサーバー設定を行う際にプライベートIPアドレスを変更したので、SSHでリモート接続する際には変更後のIPアドレスで接続します。

接続後、VPN接続するユーザーを作成します。

$ pivpn add
::: Create a client ovpn profile, optional nopass
:::
::: Usage: pivpn <-a|add> [-n|--name ] [-p|--password ]|[nopass] [-d|--days ] [-b|--bitwarden] [-i|--iOS] [-o|--ovpn] [-h|--help]
:::
::: Commands:
:::  [none]               Interactive mode
:::  nopass               Create a client without a password
:::  -n,--name            Name for the Client (default: "raspberrypi")
:::  -p,--password        Password for the Client (no default)
:::  -d,--days            Expire the certificate after specified number of days (default: 1080)
:::  -b,--bitwarden       Create and save a client through Bitwarden
:::  -i,--iOS             Generate a certificate that leverages iOS keychain
:::  -o,--ovpn            Regenerate a .ovpn config file for an existing client
:::  -h,--help            Show this help dialog

Enter a Name for the Client:  [ユーザー名]            ←ユーザー名を入力
How many days should the certificate last?  1080       ←証明書の有効期間(日)を入力
Enter the password for the client:         ←パスワードを入力
Enter the password again to verify:        ←パスワードを再入力  
spawn ./easyrsa build-client-full [ユーザー名]

Note: using Easy-RSA configuration from: /etc/openvpn/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1k  25 Mar 2021
Generating an EC private key
writing new private key to '/etc/openvpn/easy-rsa/pki/easy-rsa-582.PQZuGz/tmp.7bX3Cx'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
Using configuration from /etc/openvpn/easy-rsa/pki/easy-rsa-582.PQZuGz/tmp.Puqf4r
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'[ユーザー名]'
Certificate is to be certified until Jan  5 07:55:43 2025 GMT (1080 days)

Write out database with 1 new entries
Data Base Updated

Client's cert found: [ユーザー名].crt
Client's Private Key found: [ユーザー名].key
CA public Key found: ca.crt
tls Private Key found: ta.key


========================================================
Done! [ユーザー名].ovpn successfully created! 
[ユーザー名].ovpn was copied to:
  /home/pi/ovpns                            ←この場所に[ユーザー名].ovpnが作成された
for easy transfer. Please use this profile only on one
device and create additional profiles for other devices.
========================================================

 

/home/pi/ovpnsに.ovpnファイルが作成されたので、これをVPNする端末(スマートフォンやパソコン)にコピーします。

今回はNASをラズパイでマウントしてファイルを転送し、スマートフォンにコピーしました。

 

                 

接続テスト(失敗)

 

スマートフォンのSIMによる通信でVPN接続できるかテストしました。

結果は失敗です。

VPNクライアントのログを見ると、TIME OUTでそもそもサーバーに接続できていないように見えました。

VPNサーバー側のログ(/var/log/openvpn.log)を見ても、VPNサーバーの開始ログが残っているのみでした。

ポート開放がうまくいっていないのか。。。

 

ポート開放状況確認

 

以下のサイトでポート開放を確認してみました。

結果としてはポート開放が失敗しているようです。

ただし、そもそもルーターのOpenVPNサーバー機能が有効な状態でも対象のポートはErrorになるので謎です。。。

 

原因が分かった

 

ルーターの製造元であるASUSのサポートページを見てみたら原因が分かりました。

※各ポートで使用できるのはLANデバイス1台のみで、同じポートでPC2台を通信させることはできません。

FTPサービス、ポート21をポートフォワーディングで設定した場合、ポート 21をポートフォワーディングで使用することができません。ポートの衝突は、不具合の原因になる恐れがあるため、避けるようにしてください。

 

つまり、ルーターのOpenVPNサーバーと今回構築したRaspberry PiのOpenVPNサーバーで使用しているポートが重複していることが原因のようです。

LAN内でポートが重複してはいけないって、そりゃそうか。。。

 

                 

接続テスト(成功)

 

原因が分かったので、対処をして再テストします。

 

ポート変更

 

ルーターのOpenVPNサーバーのポート番号を変えずに、Raspberry PiのOpenVPNサーバーのポートを変更しました。

もう一度以下のコマンドを実行します。

curl -L https://install.pivpn.io | bash

 

ポート番号を入力する手順で、1194番以外の任意のポートを入力し設定しました。

 

ルーターのポートフォワーディング設定も、新しく設定したポート番号に変更しました。

 

 

接続してみる

 

サクッと接続完了しました。

 

VPN接続し、NASに接続できるところまで確認できました。

成功しました!

 

ひとまずOpenVPNサーバーを作って接続するところは問題なく成功しました。

今後はもう少し設定をいじってみたりしようかなと思います。


Raspberry Piのはじめ方 (日経BPパソコンベストムック)


WIMAXIT 7インチ Raspberry Pi用タッチモニター IPS 1024X600 HDMI端子/Raspberry Pi 4/3/2/1 Model B A+ B+ BB Black Banana Pi Windows10/8/7対応


Raspberry Pi 4 8GB(技適マーク入)MicroSDHCカード128G/Raspbianシステムプリインストール/カードリーダ /5.1V/3A Type-C スイッチ付電源/MicroHDMI-to-HDMIケーブルライン/三つヒートシンク/簡単に取り付けケース/日本語取扱説明書/12ヶ月保証


エレコム micro HDMI ケーブル 1m 4K×2K対応 スーパースリム ブラック DH-HD14SSU10BK

コメント

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