ページ

2021年10月24日日曜日

Linux サーバーでOpenVPN を構築する

Debianで作成した自作ルーターにOpenVPN を立てたので手順を残す.

今回参考にさせて頂いたのは以下のページ.非常にわかり易い.投稿者様に感謝.
OpenVPNのインストールとセットアップからインターネット接続までのガイドブック - Qiita

手順としては大きく分けて3段階あり,はじめにEasy-RSAで証明書を生成し,次にサーバー用の設定ファイルを作成してOpenVPN を起動する.最後にクライアント用の設定ファイルを作成して,クライアントからVPN 接続できれば完了だ.

まずは,実行環境の確認.Debian 系なら大差ないと思うが,適宜環境に合わせて欲しい.
 $ cat /etc/debian_version 
 11.1
 $ uname -srvmo
 Linux 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linux


以降,具体的な手順に移る.

最初に,Easy-RSA をインストールし,証明書作成のためにディレクトリをコピーする.
 $ sudo apt install easy-rsa
 $ cp -r /usr/share/easy-rsa ~/

コピーしたディレクトリに移動し,init-pki サブコマンドを実行する.
 $ cd ~/easy-rsa
 $ ./easyrsa init-pki

初期設定はここまで.ここから先はこの easyrsa ディレクトリ内から実行する.
以降の手順で失敗した場合は,もう一度 init-pki サブコマンドからやり直す.


CA 証明書の生成.CAのパスワードを訊かれるので先に考えておくと良い.
 $ ./easyrsa build-ca

DH 鍵の生成.少し時間がかかるので終わるまで待つ.(30秒〜1分くらい)
 $ ./easyrsa gen-dh

サーバー証明書の生成.パスワードを訊かれるので,先程設定したCA のパスワードを入力する.
 $ ./easyrsa build-server-full server nopass

これで Easy-RSA による証明書の生成は完了.


次にOpenVPN をインストールし,TLS の鍵を生成する./usr/sbin にパスが通っていない場合は絶対パスでコマンドを指定して実行する.
 $ sudo apt install openvpn
 $ /usr/sbin/openvpn --genkey tls-auth ./pki/ta.key

サンプルディレクトリから,サーバーの設定ファイルを pki ディレクトリにコピーして編集する.
 $ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf ./pki/
 $ vim ./pki/server.conf
 ----------
 ;topology subnet                              ←コメント解除する(行頭のセミコロンを削除)
 ;push "redirect-gateway def1 bypass-dhcp"     ←コメント解除する
 ;push "dhcp-option DNS 208.67.222.222"        ←コメント解除し,DNSのIPを適宜設定する
 ;user nobody                                  ←コメント解除する
 ;group nogroup                                ←コメント解除する
 ;log         /var/log/openvpn/openvpn.log     ←コメント解除する
 ;log-append  /var/log/openvpn/openvpn.log     ←コメント解除する

作成した設定ファイルと証明書を /etc/openvpn/server/ ディレクトリにコピーする.ただしdh.pem ファイルのみファイル名を変更しているので注意する.
 $ sudo cp pki/ca.crt             /etc/openvpn/server/
 $ sudo cp pki/dh.pem             /etc/openvpn/server/dh2048.pem
 $ sudo cp pki/ta.key             /etc/openvpn/server/
 $ sudo cp pki/server.cont        /etc/openvpn/server/
 $ sudo cp pki/issued/server.crt  /etc/openvpn/server/
 $ sudo cp pki/private/server.key /etc/openvpn/server/



OpenVPN を起動する準備が整ったので,現在の状態を確認する. 非常に紛らわしいが,openvpn,openvpn@server,openvpn-server@server という3種類のサービスが存在する.
 $ sudo systemctl status openvpn openvpn@server openvpn-server@server

今回は3番目の openvpn-server@server 用に設定しているので,最初の2種類が起動している場合は,サービスを停止させておく.
 $ sudo systemctl stop openvpn openvpn@server

また,自動起動になっている場合はそれも止めておく.
 $ sudo systemctl is-enabled openvpn openvpn@server
 $ sudo systemctl disable openvpn openvpn@server

いよいよ OpenVPN を起動する.(もともと起動していなくてもrestart サブコマンドで問題ない)
 $ sudo systemctl restart openvpn-server@server

何もエラーが表示されなければ正常に起動しているはず.念のため,問題なく立ち上がっていることを status サブコマンドで確認する.
 $ sudo systemctl status openvpn-server@server

status サブコマンド結果にも異常がなければ,自動起動できるように設定しておくと良い.
 $ sudo systemctl enalbe openvpn-server@server

なお,ファイヤーウォールやルーティングテーブルの設定は割愛する.各々の状況に合わせて適宜,設定して欲しい.基本的には UDP で1194番ポートにアクセス可能にしておけば良いだろう.

ここから先は,スマホなどVPN 接続したいクライアント用に設定ファイルを作成する.

まずは,クライアント用に秘密鍵を生成する.パスワードを訊かれるので,はじめに設定したCA のパスワードを入力する.
 $ ./easyrsa build-client-full client01 nopass

サンプルディレクトリから,クライアントの設定ファイルを pki ディレクトリにコピーして編集する.
編集の際,証明書からキーをコピーするなど少し煩雑だが,この手順は必須なので頑張る.

なお,ファイルをコピーする際,名前を変更することに注意する.(秘密鍵生成に使用した client01 という名前を使用したが,その部分は任意で構わない.大切なのは拡張子を ovpn に変更しておくこと.)
 $ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ./pki/client01.ovpn
 $ vim ./pki/client01.ovpn
  ----------
 remote my-server-1 1194     ←my-server-1を接続先サーバーに変更する
 ;user nobody                ←コメント解除する(行頭のセミコロンを削除)
 ;group nogroup              ←コメント解除する
 ca ca.crt                   ←コメントアウトする(行頭にセミコロンを追加)
 cert client.crt             ←コメントアウトする
 key client.key              ←コメントアウトする
 tls-auth ta.key 1           ←コメントアウトする
 key-direction 1             ←追記する
 <ca>                        ←この行以降をすべて追記する
 -----BEGIN CERTIFICATE-----
 〜CA証明書(./pki/ca.crtファイル)内のキーをコピーする〜
 -----END CERTIFICATE-----
 </ca>
 <cert>
 -----BEGIN CERTIFICATE-----
 〜クライアント用秘密鍵(./pki/issued/client01.certファイル)内のキーをコピーする〜
 -----END CERTIFICATE-----
 </cert>
 <key>
 -----BEGIN PRIVATE KEY-----
 〜クライアント用秘密鍵(./pki/private/client01.keyファイル)内のキーをコピーする〜
 -----END PRIVATE KEY-----
 </key>
 <tls-auth>
 -----BEGIN OpenVPN Static key V1-----
 〜TLS鍵(./pki/ta.keyファイル)内のキーをコピーする〜
 -----END OpenVPN Static key V1-----
 </tls-auth>

ここまで来たらあと一息.作成した ovpn ファイルをスマホなど,VPN 接続したい端末にコピーしてアプリや設定からファイルを読み込んで接続する.

スマホから接続する場合は,以下のアプリが使い易く便利だ.私はAndroid版しか試していないがiPhoneでも同様だと思われる.
OpenVPN Connect – Fast & Safe SSL VPN Client
OpenVPN Connect – Fast & Safe SSL VPN Client
開発元:OpenVPN Technologies
無料
posted withアプリーチ

インストールしたら,プロファイルのインポートからスマホにコピーした ovpn ファイルを選択する.

設定がうまくいっていれば接続できる.


在宅勤務の広がりでVPN の認知度が上がっている今こそ,自宅でもVPN を立てて,NO VPN, NO LIFE を実現しよう.

0 件のコメント:

コメントを投稿