実践Linux
CentOS8 CentOS8 目次へ TOP(HOME)へ
OpenVPNサーバー 2020年7月
openVPN (2.4.9-1)のインストール
OpenVPNは、SSL/TLSプロトコルを使用したSSL VPN=証明書と秘密鍵を生成し、公開鍵認証を行う。
サーバーとの接続はtunデバイスを経由して行う(すなわちレイヤ3のルーティング方式で行う。tapはレイヤ2でブリッジ方式の場合使用する。一般には、ルーティング方式が推奨されているようだ)。
●必要なもの
・OpenSSL
・LZO圧縮(リアルタイムでデータを圧縮・展開)
・pam
以上は、インストール済み。
確認
# dnf list installed | grep openssl
# dnf list installed | grep lzo
# dnf list installed | grep pam
・TUN/TAPデバイス これもインストール済み。
TUN/TAPデバイスがカーネルモジュールとしてインストールされていれば(/dev/net/tun)、わざわざカーネルを作り直す必要はない。
# modprobe tun として、エラーが出なければカーネルモジュールが入っているので、それを使えばよい。
# modprobe tun 自身の実行は、openvpnの起動スクリプトで自動的になされるようになっているので、通常はあえて実行する必要はない。
●EPELリポジトリの追加
OpenVPNの入手には、外部レポジトリの追加(EPEL)が必要となる。
# dnf -y install epel-release
設定ファイル/etc/yum.repos.d/epel.repoの編集
[epel]セクションで「enabled=0」とする。 = 通常はリポジトリ無効。
enabled=0 で通常時は無効としている場合、一時的にリポジトリを有効にしてインストールするには、
# dnf --enablerepo=epel install [パッケージ名]
●OpenVPNのインストール
EPELからOpenVPNをインストール
# dnf --enablerepo=epel -y install openvpn easy-rsa net-tools
net-toolsはすでにインストールされていた。
認証局の構築と鍵の生成
# cd /usr/share/easy-rsa/3 バージョン3で動かす
# ./easyrsa init-pki 初期化
# ./easyrsa build-ca 認証局の設立
任意のパスフレーズを設定 適当なパスワードを設定
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:Server-CA
鍵と証明書を生成して署名(鍵にパスワードはつけない)
「vpnserver1」等の箇所は任意の名称でOK(証明書のファイル名や commonName 等に設定される)
# ./easyrsa build-server-full vpnserver1 nopass 認証局の作成で設定したパスフレーズで応答
# ./easyrsa build-client-full vpnclient1 nopass
Diffie Hellman(DH)パラメーター生成
# ./easyrsa gen-dh DH鍵交換用の素数を生成=./pki/dh.pemができる。
tls-authを使用するために共有鍵ta.keyを生成
# openvpn --genkey --secret ./pki/ta.key
証明書を/etc/openvpn/server/にコピー
# cp -pR /usr/share/easy-rsa/3/pki/{issued,private,ca.crt,dh.pem,ta.key}
/etc/openvpn/server/
サーバーの設定
サンプル設定ファイルをコピーしておく。
# cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/
/etc/openvpn/server.conf (OpenVPN設定ファイルの編集)
port 1194 32行目 リスンするポート proto udp プロトコルは基本的にUDPを使用(TCPは使わない) dev tun tunモードで動かす ca ca.crt 78行目 認証局証明書のパス cert issued/vpnserver1.crt 変更 サーバー証明書のパス key private/vpnserver1.key 変更 サーバー鍵の場所 dh dh.pem 85行目 変更 DH鍵交換用のファイルを指定 server 10.8.0.0 255.255.255.0 101行目 VPNで使用するネットワークを指定(ローカルネットワークと重複しなければ何でもOK) push "route 192.168.7.0 255.255.255.0" 142行目 変更 コメント解除してローカルネットワークに変更 client-to-client クライアント間の通信を許可(必要に応じてコメントアウト) keepalive 10 120 231行目:キープアライブ (10秒毎に生存確認, 120秒無応答でダウンと判断) tls-auth ta.key 0 244行目 TLS-Authキーを指定 cipher AES-256-CBC 252行目 暗号化に使用するアルゴリズム comp-lzo 263行目 コメント解除 (圧縮を有効) persist-key 281行目〜(persistオプション有効) 最初に読み込んだ鍵ファイルを保持しておく persist-tun 再起動後にtunデバイスを再起動させない status /var/log/openvpn-status.log 287行目 ログの保管場所変更 log /var/log/openvpn.log 296行目〜 コメント解除してログの保管場所変更 log-append /var/log/openvpn.log verb 3 306行目 ログレベルを指定 (0 は fatal errors のみ, 9 は軽微なログまで全て出力) |
サービスの起動と自動起動の有効化
# systemctl start openvpn-server@server
# systemctl enable openvpn-server@server
# systemctl status openvpn-server@server
Firewalld
# firewall-cmd --add-port=1194/udp --zone=external
# firewall-cmd --list-ports --zone=external 確認
# firewall-cmd --add-port=1194/udp --zone=external --permanent
# firewall-cmd --reload
以下のファイルを VPN 接続したいクライアントコンピュータへ
・/etc/openvpn/server/ca.crt CA証明書
・/etc/openvpn/server/ta.key TLS認証鍵
・/etc/openvpn/server/issued/vpnclient1.crt クライアント証明書
・/etc/openvpn/server/private/vpnclient1.key クライアント秘密鍵
windowsクライアント
●VPNクライアントのインストール
https://www.openvpn.jp/download/より「vpnux Client」をダウンロード/インストールする。Ver. 1.4.6.2
(2020.7現在)
あらかじめ、サーバーで作成したCA証明書(ca.crt)、クライアント証明書(vpnclient1.crt)、クライアント秘密鍵(vpnclient1.key)、TLS認証鍵(ta.key)をUSBメモリなどにコピーしておく。
●設定
C:\Program Files (x86)\vpnux Client\vpnuxClient.exeを起動。
「プロファイル → 編集」で設定をする。
一般設定
プロファイル名 適当に「vpnclient1」
VPNサーバー 192.168.7.1
ポート 1194
デバイス TUN (ルーティング方式)
プロトコル UDP
拡張設定 LZO圧縮を有効にする
認証 CA証明書 ca.crtを読み込む。
証明書認証(PKI)を使用
証明書 vpnclient1.crtを読み込む。
秘密鍵 vpnclient1.keyを読み込む。
詳細設定
YLS-Auth HMAC署名を使用 ta.keyを読み込む。
切断するには
右下の∧印より「隠されているインジケータを表示」させ、当該アイコンをダブルクリックする。
TOP(HOME)へ