実践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)へ

目 次
HOME
 全体のシステム構成&目次

CentOS7-8の新機能(systemdとfirewalld)

CentOS8
CentOS8のインストール〜ネットワークの設定ほか
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
DHCPサーバー
FTPサーバー
FTPS(FTP over SSL/TLS)
Webサーバー
  アクセス解析ツールAwstats
Mail(Dovecot&Postfix)サーバー
MariaDB(MySQL)サーバー
SSHサーバー
Sambaサーバー
openVPNサーバー

CentOS7
CentOS7のインストール〜ネットワークの設定ほか
CentOS7の新機能(systemdとfirewalld)
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
Webサーバー
  Webでファイルの受け渡し
  アクセス解析ツールAwstats
  Wordpressでブログ構築
  EC-CUBEショッピングサイト構築
FTPサーバー
FTPS(FTP over SSL/TLS)
Mail(Dovecot&Postfix)サーバー
Sambaサーバー
MariaDB(MySQL)サーバー
DHCPサーバー
SSHサーバー
VNCサーバー
ストリーミングサーバーRed5
ドメインの追加
PHP7.1をインストール

CentOS5〜6

SELinux

Cプログラミング


●その他
クラウド Amazon EC2
Raspberry Piで遊ぶ
印刷機関連開発 刷版絵柄面積率測定
数独をExcelで解く


●趣味の世界
相対性理論
量子力学
群論
熱力学・統計力学
解析力学
物理でつかう数学
超弦理論(ノート作成中)