LoginSignup
1
3

More than 3 years have passed since last update.

Pritunl VPN環境の構築

Last updated at Posted at 2020-04-07

コロナの影響でリモート接続が必要となり構築した際のメモ。

既存のセグメントに透過的にアクセス可能とするのではなく、新しい仮想の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 なし なし
  • サーバ作成
    • Add Server ボタンをクリック
      Name: vpnの名称
      UDP: 18055 (自動で設定される)
      セグメント: 192.168.217.0/24 (自動で設定される)
      ※VPNセグメントを複数構築したい場合(ネットワークを分離したい場合)は複数作成する。
  • オーガナイゼーションをサーバに紐付ける
    • Attach Organization ボタンをクリック
    • オーガナイゼーションとサーバを入力
  • サーバの起動
    • 左側の Start Server 緑ボタンをクリック
    • 右側の Status が Online となればOK
  • ユーザ一覧の右側アイコンをクリックして、各ユーザのプロファイルをダウンロード
  • ダウンロードしたプロファイルと、先程設定したPinを、各ユーザに配布する。

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

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

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

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

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

共有ファイルサーバ(Sambaサーバ)等、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

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3