コロナの影響でリモート接続が必要となり構築した際のメモ。
既存のセグメントに透過的にアクセス可能とするのではなく、新しい仮想の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 | なし | なし |
このファイルと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