このブログではASUSルーターを使用したOpenVPNサーバーの設定方法や接続方法を何度か紹介してきました。
OpenVPNサーバーの構築はASUSルーターでなくても構築できる、WindowsやLinuxなどいろいろなプラットフォームで環境を作ることができます。
Raspberry Pi 4を購入してから、初代Raspberry Piが余った状態になったのでOpenVPNサーバーを構築してみました。
ラズパイが余ったからやってみよう!くらいの気持ちです。
目標
今回の目標はRaspberry Piで構築したOpenVPNサーバーに対して、自宅ネットワーク外からVPN接続し、LAN内にアクセスすることです。
イメージを作ってみました。
環境
- Raspberry Pi
モデル
12$ cat /proc/cpuinfo | grep ModelModel : Raspberry Pi Model B Rev 2
メモリ
12345$ vcgencmd get_mem armarm=448M$ vcgencmd get_mem gpugpu=64M※つまりRAMは512M
OS
12$ uname -aLinux raspberrypi 5.10.92+ #1514 Mon Jan 17 17:35:21 GMT 2022 armv6l GNU/Linux - ルーター
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.
Raspberry Pi 初期セットアップと設定
DDNSの設定
自宅の回線は固定IPではないのでDDNSサービスを使用してグローバルIPアドレスの変更に対応できるようにしておきます。
DDNSサービスは以前紹介したNo-IPを使いました。
No-IPの登録とDDNSクライアントの設定
No-IPのDynamic Update Clientの設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
$ 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のインストール
以下のコマンドでインストールをします。
1 |
curl -L https://install.pivpn.io | bash |
セットアップウィザードが出てくるので画面に従って設定を進めます。
VPNサーバーとなるRaspberry PiのプライベートIPアドレスの固定が必要だと書いてあります。
Enterキーを押します。
現在使用しているIPアドレスとゲートウェイをそのまま設定する場合はYES、違う場合はNOを選択します。
今回は別のIPアドレスにしたいのでNOにしました。
任意のIPアドレスとプレフィックス長を入力します。
例:192.168.1.10/24 といった具合に入力します。
Enterキーを押します。
VPN設定を保持するユーザーを選択します。
Raspberry Pi初期設定後で他のユーザーを作っていないので、Piだけが表示されています。
ユーザーが複数表示されていれば、カーソルでユーザーを選択し、スペースキーを押して、ユーザー名の左にアスタリスク(*)が付くことを確認します。
WireGuardではなく、OpenVPNにカーソルを合わせ、スペースキーを押し、Enterキーを押します。
推奨設定を使用して設定するかの確認です。
推奨設定を使用する⇒Noを選択
カスタム設定をする⇒Yesを選択
OpenVPNで使用するポート番号を入力します。
デフォルトでは1194が入っています。
特にこだわりがないのでこのまま進めました。
VPNクライアントが利用するDNSサーバーの選択です。Googleがあればよかったのですが、ないのでQuad9を選択しました。下にスクロールしたら、GoogleもCloudFlareもありました。
お好きなDNSサーバーを選択してください。
クライアントがVPNサーバーに接続するときに使用する宛先を選択します。
グローバルIPアドレスかDNSを選択できます。
No-IPで取得したDDNSを使用するので、『DNS Entry』を選択して進めます。
DNS名を確認し、問題なければYesを選択して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接続するユーザーを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
$ 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サーバーのポートを変更しました。
もう一度以下のコマンドを実行します。
1 |
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
コメント