CentOS 8
Sponsored Link

OpenVPN : VPN サーバーの設定2020/02/10

 
OpenVPN をインストールして、仮想プライベートネットワーク経由で OpenVPN サーバーに接続できるよう設定します。
当例では以下のような環境で OpenVPN サーバーを設定します。
設定により、サーバー/クライアント上の [tun] インターフェースは自動設定され、クライアントは VPN 接続後、VPN サーバーのローカルネットワーク宛てへアクセス可能となります。
下例の場合は、前提として、ルーター側で NAT の設定が必要です。
(WAN 側から x.x.x.x:1194 (udp) 宛にきたパケットを LAN 側の 10.0.0.29:1194 (udp) へフォワード)
  +----------------------+
  | [  OpenVPN Server  ] |192.168.100.1
  |    dlp.srv.world     +--------+
  |                      |tun     |
  +-----------+----------+        |
          eth0|10.0.0.29          |
              |                   |
              |  Local Network    |
      10.0.0.1|                   |
       +------+-----+             |
-------|   Router   |-------------|-----
       +------+-----+             |
              |                   |
              |  Internet         |
--------------+-------------------|-----
              |                   |
              |  Local Network    |
 192.168.0.100|                   |
  +-----------+----------+        |
  |                      |tun     |
  |      VPN Client      +--------+
  |                      |192.168.100.x
  +----------------------+

[1] OpenVPN をインストールします。
# EPELからインストール

[root@dlp ~]#
dnf --enablerepo=epel -y install openvpn easy-rsa net-tools
[2] 認証局や証明書等々を作成します。
[root@dlp ~]#
cd /usr/share/easy-rsa/3
# 初期化

[root@dlp 3]#
./easyrsa init-pki

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /usr/share/easy-rsa/3/pki

# 認証局 作成

[root@dlp 3]#
./easyrsa build-ca


Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019

# 任意のパスフレーズを設定
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
Generating RSA private key, 2048 bit long modulus (2 primes)
.......+++++
...........................................+++++
e is 65537 (0x010001)
# 以下のエラーは無視して OK
Can't load /usr/share/easy-rsa/3/pki/.rnd into RNG
139779519366976:error:2406F079:random number generator:RAND_load_file:Cannot open file:crypto/rand/randfile.c:98:Filename=/usr/share/easy-rsa/3/pki/.rnd
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]:Server-CA

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/usr/share/easy-rsa/3/pki/ca.crt

# サーバー証明書 作成

# [server1] の箇所は任意の名称で OK

# (証明書のファイル名や commonName 等に設定される)

[root@dlp 3]#
./easyrsa build-server-full server1 nopass


Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Generating a RSA private key
..................................+++++
...................................+++++
writing new private key to '/usr/share/easy-rsa/3/pki/private/server1.key.Mxv13uLARL'
-----
Using configuration from /usr/share/easy-rsa/3/pki/safessl-easyrsa.cnf
# 認証局の作成で設定したパスフレーズで応答
Enter pass phrase for /usr/share/easy-rsa/3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server1'
Certificate is to be certified until Jan 25 03:52:49 2023 GMT (1080 days)

Write out database with 1 new entries
Data Base Updated

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

# [client1] の箇所は任意の名称で OK

# (証明書のファイル名や commonName 等に設定される)

[root@dlp 3]#
./easyrsa build-client-full client1 nopass


Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Generating a RSA private key
.............+++++
................+++++
writing new private key to '/usr/share/easy-rsa/3/pki/private/client1.key.JZkbIpNr3Y'
-----
Using configuration from /usr/share/easy-rsa/3/pki/safessl-easyrsa.cnf
# 認証局の作成で設定したパスフレーズで応答
Enter pass phrase for /usr/share/easy-rsa/3/pki/private/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 Jan 25 03:54:36 2023 GMT (1080 days)

Write out database with 1 new entries
Data Base Updated

# Diffie Hellman ( DH ) パラメーター生成

[root@dlp 3]#
./easyrsa gen-dh


Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time

............++*++*++*++*

DH parameters of size 2048 created at /usr/share/easy-rsa/3/pki/dh.pem

# TLS-Auth キー作成

[root@dlp 3]#
openvpn --genkey --secret ./pki/ta.key
# 生成した証明書をコピー

[root@dlp 3]#
cp -pR /usr/share/easy-rsa/3/pki/{issued,private,ca.crt,dh.pem,ta.key} /etc/openvpn/server/

[3] IP フォワードを有効にしておきます。
[root@dlp ~]#
vi /etc/sysctl.d/10-ipv4_forward.conf
# 新規作成

net.ipv4.ip_forward = 1
[root@dlp ~]#
sysctl --system

[4] OpenVPN を設定して起動します。
# サンプル設定ファイル コピー

[root@dlp ~]#
cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/
[root@dlp ~]#
vi /etc/openvpn/server/server.conf
# 32行目:必要があれば変更 (OpenVPN がリスンするポート)

port 1194
# 35行目:必要があれば変更 (当例は UDP 使用)

;proto tcp
proto udp
# 78行目:コピーした証明書を指定

ca
ca.crt

cert
issued/server1.crt

key
private/server1.key
# 85行目:コピーした DH ファイルを指定

dh
dh.pem
# 101行目:VPN で使用するネットワークを指定

# ローカルネットワークと重複しなければ何でも OK

server
192.168.100.0 255.255.255.0
# 142行目:コメント解除してローカルネットワークに変更

push "route
10.0.0.0 255.255.255.0
"
# 231行目:キープアライブ (10秒毎に生存確認, 120秒無応答でダウンと判断)

keepalive 10 120
# 244行目:コピーしたTLS-Auth キーを指定

tls-auth
ta.key 0
# 263行目:コメント解除 (圧縮を有効)

comp-lzo
# 281行目:確認 (persist オプション有効)

persist-key
persist-tun
# 287行目:ログの保管場所変更

status
/var/log/openvpn-status.log
# 296行目:コメント解除してログの保管場所変更

log         /var/log/openvpn.log
log-append  /var/log/openvpn.log

# 306行目:ログレベルを指定 (0 は fatal errors のみ, 9 は軽微なログまで全て出力)

verb 3
[root@dlp ~]#
systemctl enable --now openvpn-server@server

[5] Firewalld を有効にしている場合は、サービスポートの許可が必要です。
[root@dlp ~]#
firewall-cmd --add-port=1194/udp --permanent

[root@dlp ~]#
firewall-cmd --reload

[6]
以下のファイルを VPN 接続したいクライアントコンピュータへ転送しておきます。
以上で OpenVPN サーバーの設定は完了です。
・/etc/openvpn/server/ca.crt
・/etc/openvpn/server/ta.key
・/etc/openvpn/server/issued/client1.crt
・/etc/openvpn/server/private/client1.key
関連コンテンツ