外出先から自宅のルータの設定を変更できると便利だなと思い、自宅のCentOS7.4でOpenVPN+easy-rsaを使ったVPN環境を作ってみたので、再作成するときのために手順を残します。
準備作業
ルータの設定変更
ポートフォワードの設定
自宅ルータのポートフォワード設定で、ルータの1194ポートに来たパケットを、サーバ(CentOS)の1194ポートへフォワードするように設定変更しておきます。
※設定方法は、ルータによる
##Firewallの設定変更
CentOSのfirewallの設定を変更します。
対象となるZone(僕の自宅の場合はZone=external)になっているので、そこに1194/udpの通信許可を追加します。
# firewall-cmd --add-port=1194/udp --zone=external --permanent
# firewall-cmd --reload
導入作業
パッケージのインストール
epelリポジトリの追加
今回はepelリポジトリ経由でインストールするので、まずはyumにリポジトリの追加を行います。
# yum install epel-release -y
パッケージのインストール
OpenVPNとeasy-rsaをepelリポジトリからインストールします。
# yum --enablerepo=epel -y install openvpn easy-rsa
※2018/3/31:openvpn2.4.5とeasy-rsa3.0.3がインストールされました。
認証局の設置
認証局の設置
(1)ファイルのコピー
バージョンアップ等で書き換えられると困るので、/etc/openvpn/easy-rsa/にコピーしておきます。
# mkdir /etc/openvpn/easy-rsa
# cp /usr/share/easy-rsa/3.0.3/* /etc/openvpn/easy-rsa/ -R
(2)作業ディレクトリの移動
# cd /etc/openvpn/easy-rsa
(3)初期化
# ./easyrsa init-pki
※pkiディレクトリが作成されます
(4)認証局の作成
# ./easyrsa build-ca
Generating a 2048 bit RSA private key
.......................................+++
.............................................................................+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/ca.key.UzE5bd0SCu'
Enter PEM pass phrase: <任意のパスフレーズを入力>
Verifying - Enter PEM pass phrase: <もう一度入力>
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: <任意の名前を入力>
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/easy-rsa/pki/ca.crt
※ca証明書(ca.crt)およびca秘密鍵(ca.key)が作成されます
※※入力したパスフレーズは、ca秘密鍵(ca.key)のパスフレーズになります
(5)DHパラメータの作成
# ./easyrsa gen-dh
※DHパラメータ(dh.pem)が作成されます。
(6)サーバ用の証明書と秘密鍵の作成
VPNサーバ「server_r」用の証明書と秘密鍵をパスフレーズ無しで作成します。
# ./easyrsa build-server-full server_r nopass
Generating a 2048 bit RSA private key
....+++
.......................................................+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/server_r.key.O3l2ARzsse'
-----
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: <ca秘密鍵(ca.key)のパスフレーズを入力>
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'server_r'
Certificate is to be certified until Mar 28 17:05:59 2028 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
※サーバ用の証明書(server_r.crt)および秘密鍵(server_r.key)が作成されます
(7)クライアント用の証明書と秘密鍵の作成
クライアント「client1」用の証明書と秘密鍵をパスフレーズ無しで作成します。
# ./easyrsa build-client-full client1 nopass
Generating a 2048 bit RSA private key
................+++
..............................................................................................................+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/client1.key.MY2YPyBgBr'
-----
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:<ca秘密鍵(ca.key)のパスフレーズを入力>
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'client1'
Certificate is to be certified until Mar 28 17:17:18 2028 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
※クライアント用の証明書(client1.crt)および秘密鍵(client1.key)が作成されます
##OpenVPNの設定
###サーバ設定
(1)作業ディレクトリの変更
cd /etc/openvpn/
(2)サーバのコンフィグファイルのひな型をコピー
# cp /usr/share/doc/openvpn*/sample/sample-config-files/server.conf server_r.conf
(3)コンフィグファイル(server_r.conf)の編集
確認および変更した部分は下記の通り
[32行目:使用するポート番号]
port 1194
[36行目:使用するプロトコル]
proto udp
[53行目:TAP/TUNデバイス指定]
dev tun
[78,79,80行目(変更):ca証明書、サーバ証明書、秘密鍵の指定]
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server_r.crt
key /etc/openvpn/easy-rsa/pki/private/server_r.key # This file should be kept secret
[85行目(変更):乱数(DH)パラメータの指定]
dh /etc/openvpn/easy-rsa/pki/dh.pem
[101行目:仮想ネットワークの指定(TUNモードの時に指定)]
server 10.8.0.0 255.255.255.0
[108行目:配布用IPアドレスのテーブル(固定IPを使用する場合、ipp.txtを編集)]
ifconfig-pool-persist ipp.txt
[142行目(変更):サーバ側のLANセグメント(TUNモードの時に指定)]
push "route 192.168.0.0 255.255.255.0"
[209行目(変更):クライアント間通信の許可]
client-to-client
[231行目:キープアライブ設定(10秒ごとに生存確認、120秒無応答でダウン)]
keepalive 10 120
[244行目:TLS認証キーの指定]
tls-auth ta.key 0 # This file is secret
[263行目(変更):圧縮の有効可]
comp-lzo
[274,275行目(変更):ユーザ権限の設定]
user nobody
group nobody
[281,282行目:役割不明だけど大事なものらしい]
persist-key
persist-tun
[287行目(変更):ステータスログ]
status /var/log/openvpn-status.log
[296行目(変更):稼働ログ]
log /var/log/openvpn.log
[306行目:ログレベル]
verb 3
(4)TLS認証キーの作成
# openvpn --genkey --secret /etc/openvpn/ta.key
*※TLS認証キー(ta.key)が作成される
サーバの起動
テスト起動
# openvpn server_r.conf
Sun Apr 1 03:28:46 2018 OpenVPN 2.4.5 x86_64-redhat-linux-gnu [Fedora EPEL patched] [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Mar 1 2018
(省略)
Sun Apr 1 03:28:46 2018 Initialization Sequence Completed
※こんな感じのログが出ればOK
サービスとして起動
# systemctl start openvpn@server_r
# systemctl status openvpn@server_r
自動起動にする場合は・・・
# systemctl enable openvpn@server_r
次は、構築したVPNサーバへ、WindowsとAndroidから接続しようと思います。
CentOS7でVPNサーバを作ってみた(tun編)・・・クライアントから接続へ続きます。