Pritunl VPN環境の構築手順

コロナの影響でリモート接続が必要となり構築した際のメモ。
既存のセグメントに透過的にアクセス可能とするのではなく、新しい仮想のVPNセグメントを生成して、そのセグメントに必要なクライアントを参加させる形となる。

Pritunlサーバ構築

AWS(準備)

  • EC2のOS: Amazon Linux 2
  • EC2インスタンスタイプ: t3.micro
  • ストレージ: 8GB
  • ElasticIP付与: 必須(以降、111.111.111.111)
  • ドメイン設定: 任意
  • インバウンドポート設定
    • TCP SSH、HTTP、HTTPS 保守作業する場所(自宅/会社)のIPのみ許可
    • UDP 18055 VPNクライアント用(*後ほどPritunlのWeb設定画面で表示される番号)

AWS(EC2サーバ構築)

  • SSHにて、ec2-userでログイン
  • ここを参考にPritunlをインストール(以下)

sudo tee /etc/yum.repos.d/mongodb-org-4.2.repo << EOF
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
EOF

sudo tee /etc/yum.repos.d/pritunl.repo << EOF
[pritunl]
name=Pritunl Repository
baseurl=https://repo.pritunl.com/stable/yum/amazonlinux/2/
gpgcheck=1
enabled=1
EOF

sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
gpg –keyserver hkp://keyserver.ubuntu.com –recv-keys 7568D9BB55FF9E5287D586017AE645C0CF8E292A
gpg –armor –export 7568D9BB55FF9E5287D586017AE645C0CF8E292A > key.tmp; sudo rpm –import key.tmp; rm -f key.tmp
sudo yum -y install pritunl mongodb-org
sudo systemctl start mongod pritunl
sudo systemctl enable mongod pritunl

  • セットアップキーを作成

sudo pritunl setup-key
0602d77d26fe4b22a8330a8c13c00000 のようなキーが表示される

  • デフォルトパスワードを作成

sudo pritunl default-password
Administrator default password:
username: “pritunl”
password: “xxxxxxxxxxxxxx”

Pritunl コントロール画面(初期設定)

  • ブラウザで、Pritunlセットアップ画面を開き、セットアップキーを入力する。
    https://111.111.111.111/setup
  • 先程生成した、ユーザ、初期パスワードを入力しログインする。
  • Settingsダイアログが表示されるのでNew Password、Lets Encrypt Domain(ドメイン取得時のみ)などを設定する。
  • オーガナイゼーション作成
    • 上部メニューの Users をクリック
    • Add Organization ボタンをクリック
      ※最低この単位で、VPNのネットワークセグメントを分けることも可能
  • ユーザ作成
    • Add User ボタンをクリック
    • 対象ユーザを全員分作成
    • Linuxのファイルサーバをクライアントにする場合、Pinやメールは設定しない
アカウント(半角) メール PIN(整数6文字以上)
user1 user1@hoge.jp 123456
user2 user1@hoge.jp 123456
user3 user3@hoge.jp 123456
linuxFileServer なし なし
  • サーバ作成
    Name: vpnの名称
    UDP: 18055 (自動で設定される)
    セグメント: 192.168.217.0/24 (自動で設定される)
    ※VPNセグメントを複数構築したい場合(ネットワークを分離したい場合)は複数作成する。
  • オーガナイゼーションをサーバに紐付ける
    • Attach Organization ボタンをクリック
    • オーガナイゼーションとサーバを入力
  • サーバの起動
    • 左側の Start Server 緑ボタンをクリック
    • 右側の Status が Online となればOK
  • 各ユーザのプロファイルをダウンロード
    ダウンロードしたプロファイルと、先程設定したPinを、各ユーザに配布する。

    このファイルとPinがあれば誰でも接続できてしまう為、配布は可能な限り安全な方法で行うこと。またPinは口頭で伝えるなどすること。

Windowsクライアントアプリの導入

  • ここより Pritunl.exe をダウンロードし、インストール
  • クライアント起動
  • 設定ファイルをImport(予め、Pritunlのユーザ一覧画面の右側のダウンロードボタンで、各ユーザの.tarファイルをダンロードしておく)
  • 右上のハンバーガーメニューより「Connect」
  • Pinをいれれば接続完了

リモートデスクトップを使用する場合は、接続元・先の2台にクライアントアプリをインストールします。
また、既存のファイルサーバにアクセスしたい場合は、ファイルサーバにクライアントをインストールします(次章を参照)

LinuxサーバにOpenVPNクライアントを導入

ファイルサーバ等、Linuxマシンにアクセスを行う必要がある場合などに必要となる。
ここの記事のclient側についてのみ参考にさせていただきました。

  • openvpnクライアントをインストール

yum install epel-release
yum install –enablerepo=epel openvpn

  • client.confの修正

cat /usr/share/doc/openvpn/sample/sample-config-files/client.conf > /etc/openvpn/client.conf
vi /etc/openvpn/client.conf

下記項目を変更します。
remote 111.111.111.111 18055
ca /etc/openvpn/ca
cert /etc/openvpn/cert
key /etc/openvpn/key
tls-auth /etc/openvpn/ta 1

  • 上記の4つの証明書(ca,cert,key,ta)に対応したファイルを作成
    Pritunlのユーザ一覧画面からダウンロードしたプロファイル(tarファイル)をLhaForge等のアーカイバで展開し、展開された .ovpnファイルを、サクラエディタ等のテキストエディタで開いて切り出し、ファイル化します。

<ca>~この部分をコピーして単独のファイル ca にする~</ca>

<tls-auth>~この部分をコピーして単独のファイル ta にする~</tls-auth>

<cert>~この部分をコピーして単独のファイル certに する~</cert>

<key>~この部分をコピーして単独のファイル key にする~</key>

※Linuxであれば tar -xf user1.tar のようにアーカイブを展開し、展開後のovpnファイルを vi user1.ovpn 等としてファイル内のタグで囲まれたテキスト部分を切り出してファイル化します。少々面倒なのですが、もっと良い方法を知っている方がいれば教えてほしいです・・・

  • VPNクライアント接続テスト

openvpn /etc/openvpn/client.conf

接続ログが画面にずらずらと表示される。エラーなどがなければOK。
※以下のようなPinエラーになる場合は、当該ユーザ作成時にPinを設定している為、Pinの設定を削除してください。

Mon Mar 30 02:03:30 2020 AUTH: Received control message:
AUTH_FAILED,CRV1:R:f52cbb8978cc402da249d2e00000003:bmls:Enter Pin
Mon Mar 30 02:03:30 2020 SIGTERM[soft,auth-failure] received, process exiting

  • VPNクライアント自動起動

vi /opt/openvpn-client.sh

#!/bin/bash  
openvpn /etc/openvpn/client.conf  

chmod 755 /opt/openvpn-client.sh
vi /etc/systemd/system/openvpn-client.service

[Unit]  
Description = OpenVPN-Client daemon  
[Service]  
ExecStart = /opt/openvpn-client.sh  
Restart = always  
Type = simple  
[Install]  
WantedBy=multi-user.target  
  • 起動

systemctl start openvpn-client
ps aux | grep openvpn

下記のようなプロセスがあれば問題ない
root 862 0.0 0.1 23284 3420 ? Ss 3月31 0:00 /bin/bash /opt/openvpn-client.sh
root 867 0.0 0.4 56504 7976 ? S 3月31 0:05 openvpn /etc/openvpn/client.conf

  • 自動起動

systemctl enable openvpn-client

  • サーバを再起動後しばらくして、Pritunl ユーザ一覧画面で、当該サーバが接続状態となっていればOK

Comments are closed.