V6プラス自宅LANに外出先からアクセス③OpenVPNサーバ構築


前回はVPSをレンタルしDDNSサービスを動かして、インターネットからホスト名でアクセスできるようにしました。

VPSをVPNにして、VPNでつなぐとVPSが転送してくれて・・・・という感じで、VPSとVPNが紛らわしい中。

今回はVPSサーバへOpenVPNをインストールして、VPNサーバとして設定してみたいと思います。


OpenVPNサーバ構築

基本的にOpenVPN HOWTOを参考に進めて行きます。こちらの情報は大変充実しており、構築や設定に必要な情報の9割以上を得ることができました。

OpenVPN、easy-rsa 2インストール

OpenVPNとeasy-rsa 2をインストールします。epelからダウンロードするかたちです。

yum install epel-release
yum update
yum install openvpn easy-rsa

OpenVPNのバージョンは2.4.4でした。不正アクセスを防ぐために、常に新しいバージョンを使うように心がけたいものです。


証明書作成

サーバ側証明書作成

OpenVPNは、OpenSSL(暗号ライブラリ)を使って動作します。暗号処理は証明書(crt)や秘密鍵(key)やら何やら必要です。まずは、サーバ側で必要な証明書類を作成します。次のような流れになります。

  1. 証明書関係の作業フォルダを作ります。
  2. あらかじめvarsファイルを編集して、証明書のキー情報を記入しておきます。最低限、下記の5つの情報を編集します。空欄はNGです。
    1. KEY_COUNTRY
    2. KEY_PROVINCE
    3. KEY_CITY
    4. KEY_ORG,
    5. KEY_EMAIL
  3. マスタCAを作成します。
  4. サーバ証明書を作成します。
    • 「server」という名称で作成しますが、証明書を区別するための重要な名前になります。
  5. DHパラメータを作成します。
  6. 作成した証明書をOpenVPNの設定フォルダにコピーします。
  7. ここでtaキーも作成しておきます。
# eas-rsa作業フォルダ作成
cp -r /usr/share/easy-rsa ~
# varsファイル編集 お好みのエディタで
cd ~/easy-rsa/2.0
vi ./vars
# マスタCA作成
source ./vars
./clean-all
./build-ca
# サーバ証明書作成
# Sign the certificate? [y/n]: はyで。
./build-key-server server
# DHパラメータ作成
./build-dh
# 作成した証明書を/etc/openvpn/server/keysディレクトリにコピー
mkdir /etc/openvpn/server/keys
cp keys/ca.crt keys/dh2048.pem keys/server.crt keys/server.key /etc/openvpn/server/keys
# TLS用にtaキー作成
openvpn –genkey –secret /etc/openvpn/server/ta.key

クライアント側証明書作成

よりセキュリティを重視する場合、keyファイル(秘密鍵)は作ったマシンから動かしてはいけないそうです。クライアント側で秘密鍵と証明書を作るには、CSRを使ってキーサイン・マシンに登録して、キーサイン・マシンは証明書に・・・

・・・

ということだそうです。(ぉぃ

OpenVPN HOWTOと同じように、サーバ側で作ってしまいます。

拠点間接続クライアント用に1つ、リモート接続用に1つ作成します。最低限、クライアントの台数分、証明書を作る必要があります。

  1. 拠点間接続用に、パスワード無しのクライアント証明書を一つ。
    • ここでは名称を「client1」にしますが、お好きな名前でどうぞ。
    • この名称は、サーバ側でクライアントの識別に使われます。
  2. リモート接続用は、パスワード有りで作ります。連番で管理したいので、pが付いた「clientp1」にします。
  3. 作成した証明書と秘密鍵は、あとでクライアントに転送します。
# 拠点間接続用のクライアント証明書作成
# Sign the certificate? [y/n]:にy
# 1 out of 1 certificate requests certified, commit? [y/n]もy
./build-key client1
# リモート接続用にパスワード付きの証明書作成
./build-key-pass clientp1

証明書を作り終わっても、クライアントを増やすときに新しい証明書を作ったり、アクセスを停止するため証明書を廃止してcsr.pemファイルを作ったりしますので、作業フォルダは安全な場所にそのまま残しておきます。盗難防止のため、マスタ証明書の秘密鍵(ca.key)はオフラインメディア(USBメモリー等)に移動しておくほうが良いそうです。


OpenVPNサーバ設定

コンフィグレーション・ファイルを作ったり、ディレクトリを作ったり何だり・・・・。

server.confファイル作成

# server.confファイルを作成します。
vi /etc/openvpn/server.conf

下記のような内容になります。

dev tun
port 1194
proto udp
cd ./server
ca ./keys/ca.crt
cert ./keys/server.crt
key ./keys/server.key
dh ./keys/dh2048.pem
tls-auth ./ta.key 0
server 10.8.0.0 255.255.255.0
# site to siteで接続する先のネットワークを設定。
# client-config-dirでクライアント個別に設定すると同時にここにも書いておく必要あり
route 192.168.111.0 255.255.255.0
# 他のクライアントにルートを通知
push "192.168.111.0 255.255.255.0"
client-config-dir ./ccd
client-to-client
cipher AES-256-CBC
user nobody
group nobody
status ./log/openvpn-status.log
log-append ./log/openvpn.log
verb 4
# インターバル秒 タイムアウト秒=サーバ側で切断と判断
keepalive 10 240
daemon
# telnet localhost 7505による管理機能有効
management localhost 7505
# 証明書を廃止する場合 revoke-full <クライアント名> pemファイル作成
# crl-verify crl.pem

192.168.111.0は、自宅LANのネットワークになります。

ログの冗長レベル(verbosity)は最大11でこのような感じです。

デバッグ時は6以上、リアルタイムに確認するなら5、記録用は3~4がちょうど良さそうです。

サーバ側クライアント個別設定ファイル作成

拠点間接続クライアントの証明書と同じ名前の設定ファイルを作っておきます。ここではclient1というファイルになります。

mdir /etc/openvpn/server/ccd
vi /etc/openvpn/server/ccd/client1

下記のような内容になります。

iroute 192.168.111.0 255.255.255.0

「このクライアントは、このネットワークと繋がってるからー」という感じです。

OpenVPNサーバ起動

ログを入れるフォルダを作り、serverディレクトリ全体のオーナーを変えておきます。

mkdir /etc/openvpn/server/log
chown -R nobody.nobody /etc/openvpn/server

オーナーをもっと細かく設定しようとしたところ、うまく動かなくなりましたので、ざっくり変えておいた感じです。

必要なファイルはこれくらいで済むのですね・・・

いよいよ、systemdでopenvpnを起動します。

sysetmctl enable openvpn@server
sysetmctl start openvpn@server

うまく起動しましたでしょうか?

VPNサーバの状態は、ログファイルを見るか、下記のコマンドで管理機能にアクセスして確認できます。

telnet localhost 7505

statusで状態を表示できるほか、クライアントが接続されるとログが表示されます。


VPSサーバ側でパケットのルーティングが必要かと思っていましたが「外出先から自宅LANへアクセスしたい」という今回の用途では特に不要でした。ルーティングしなくてもちゃんとアクセスできました。

「V6プラスの自宅LANから、VPS経由でインターネットにアクセスしたい」場合はルーティングが必要かもしれませんが。どうやら今回の目的と同時設定はできないようですので、別の機会に実験しようと思います。

OpenVPNのIPプール(10.8.0.0)と、自宅のネットワークとでパケットがやり取りできるように。/etc/sysctl.confに1行追加し、ルーティングを有効化します。

echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf

VPS再起動後、ルーティングが有効になります。

#ルーティング有効か確認
cat /proc/sys/net/ipv4/ip_forward
# 手動で有効化する場合
# sysctl -w net.ipv4.ip_forward=1

OpenVPNサーバの設定はこのような感じです。

大変お疲れ様でした。

次回は拠点間接続用のクライアントを構築したいと思います。


V6プラス自宅LANに外出先からアクセス

スポンサーリンク

フォローする

スポンサーリンク