OpenVPN : VPN サーバーの設定2025/10/08 |
|
OpenVPN をインストールして、仮想プライベートネットワーク経由で OpenVPN サーバーに接続できるよう設定します。
当例では以下のような環境で OpenVPN サーバーを設定します。
下例の場合は、前提として、ルーター側で NAT の設定が必要です。
+----------------------+
| [ OpenVPN Server ] |172.16.100.1
| dlp.srv.world +--------+
| |tun |
+-----------+----------+ |
enp1s0|10.0.0.30 |
| |
| Local Network |
10.0.0.1| |
+------+-----+ |
-------| Router |-------------|-----
+------+-----+ |
| |
| Internet |
--------------+-------------------|-----
| |
| Local Network |
192.168.0.30| |
+-----------+----------+ |
| |tun |
| VPN Client +--------+
| |172.16.100.x
+----------------------+
|
| [1] | OpenVPN をインストールします。 |
|
root@dlp:~# apt -y install openvpn easy-rsa iptables
|
| [2] | 認証局や証明書等々を作成します。 |
|
root@dlp:~#
cd /usr/share/easy-rsa
# 初期化 root@dlp:/usr/share/easy-rsa# ./easyrsa init-pki Notice ------ 'init-pki' complete; you may now create a CA or requests. Your newly created PKI dir is: * /usr/share/easy-rsa/pki Using Easy-RSA configuration: * undefined # 認証局 作成 root@dlp:/usr/share/easy-rsa# ./easyrsa build-ca # 任意のパスフレーズを設定 Enter New CA Key Passphrase: Re-Enter New CA Key Passphrase: 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 Notice ------ CA creation complete. Your new CA certificate is at: * /usr/share/easy-rsa/pki/ca.crt Create an OpenVPN TLS-AUTH|TLS-CRYPT-V1 key now: See 'help gen-tls' Build-ca completed successfully. # サーバー証明書 作成 # [server1] の箇所は任意の名称で OK # (証明書のファイル名や commonName 等に設定される) root@dlp:/usr/share/easy-rsa# ./easyrsa build-server-full server1 nopass
Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /usr/share/easy-rsa/pki/reqs/server1.req
* key: /usr/share/easy-rsa/pki/private/server1.key
You are about to sign the following certificate:
Requested CN: 'server1'
Requested type: 'server'
Valid for: '825' days
subject=
commonName = server1
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /usr/share/easy-rsa/pki/837d6ab0/temp.6.1
# 認証局の作成で設定したパスフレーズで応答
Enter pass phrase for /usr/share/easy-rsa/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 11 00:28:20 2028 GMT (825 days)
Write out database with 1 new entries
Database updated
Notice
------
Inline file created:
* /usr/share/easy-rsa/pki/inline/private/server1.inline
Notice
------
Certificate created at:
* /usr/share/easy-rsa/pki/issued/server1.crt
# クライアント証明書 作成 # [client1] の箇所は任意の名称で OK # (証明書のファイル名や commonName 等に設定される) root@dlp:/usr/share/easy-rsa# ./easyrsa build-client-full client1 nopass
Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /usr/share/easy-rsa/pki/reqs/client1.req
* key: /usr/share/easy-rsa/pki/private/client1.key
You are about to sign the following certificate:
Requested CN: 'client1'
Requested type: 'client'
Valid for: '825' days
subject=
commonName = client1
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /usr/share/easy-rsa/pki/d3663b07/temp.6.1
# 認証局の作成で設定したパスフレーズで応答
Enter pass phrase for /usr/share/easy-rsa/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 11 00:30:53 2028 GMT (825 days)
Write out database with 1 new entries
Database updated
Notice
------
Inline file created:
* /usr/share/easy-rsa/pki/inline/private/client1.inline
Notice
------
Certificate created at:
* /usr/share/easy-rsa/pki/issued/client1.crt
# Diffie Hellman ( DH ) パラメーター生成 root@dlp:/usr/share/easy-rsa# ./easyrsa gen-dh Generating DH parameters, 2048 bit long safe prime DH parameters appear to be ok. Notice ------ DH parameters of size 2048 created at: * /usr/share/easy-rsa/pki/dh.pem # TLS-Auth キー作成 root@dlp:/usr/share/easy-rsa# openvpn --genkey secret ./pki/ta.key
# 生成した証明書をコピー root@dlp:/usr/share/easy-rsa# cp -pR /usr/share/easy-rsa/pki/{issued,private,ca.crt,dh.pem,ta.key} /etc/openvpn/server/ |
| [3] | OpenVPN を設定して起動します。 Firewalld によるルーティングルールも設定するため、Firewalld 稼働中が前提です。 |
|
# サンプル設定ファイル コピー root@dlp:~# cp /usr/share/doc/openvpn/examples/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 # 53行目 : 必要があれば変更 (当例は tun 使用) ;dev tap dev tun # 86行目 : コピーした証明書を指定 ca ca.crt cert issued/server1.crt key private/server1.key
# 93行目 : コピーした DH ファイルを指定 dh dh.pem
# 115行目 : VPN で使用するネットワークを指定 # ローカルネットワークと重複しなければ何でも OK server 172.16.100.0 255.255.255.0
# 156行目 : コメント解除してローカルネットワークに変更 push "route 10.0.0.0 255.255.255.0 "
# 245行目 : キープアライブ (10秒毎に生存確認, 120秒無応答でダウンと判断) keepalive 10 120 # 258行目 : コメント解除してコピーした TLS-Auth キーを指定 tls-auth ta.key 0
# 276行目 : 確認 (persist オプション有効) persist-key persist-tun # 301行目 : ログレベルを指定 (0 は fatal errors のみ, 9 は軽微なログまで全て出力) verb 3
root@dlp:~#
vi /etc/openvpn/server/add-bridge.sh # 新規作成 #!/bin/bash # ローカルネットワークに接続可能なネットワークインターフェース IF=enp1s0 # VPN で使用するインターフェース # 当例のように設定ファイルで [tun] を指定した場合、通常は [tun0] VPNIF=tun0 echo 1 > /proc/sys/net/ipv4/ip_forward iptables -A FORWARD -i ${VPNIF} -j ACCEPT iptables -t nat -A POSTROUTING -o ${IF} -j MASQUERADE
root@dlp:~#
vi /etc/openvpn/server/remove-bridge.sh # 新規作成 #!/bin/bash # ローカルネットワークに接続可能なネットワークインターフェース IF=enp1s0 # VPN で使用するインターフェース # 当例のように設定ファイルで [tun] を指定した場合、通常は [tun0] VPNIF=tun0 echo 0 > /proc/sys/net/ipv4/ip_forward iptables -D FORWARD -i ${VPNIF} -j ACCEPT iptables -t nat -D POSTROUTING -o ${IF} -j MASQUERADE chmod 700 /etc/openvpn/server/{add-bridge.sh,remove-bridge.sh}
root@dlp:~#
systemctl edit openvpn-server@server
# 以下の内容で追記
[Service]
ExecStartPost=/etc/openvpn/server/add-bridge.sh
ExecStopPost=/etc/openvpn/server/remove-bridge.sh
systemctl enable --now openvpn-server@server |
| [4] |
以下のファイルを VPN 接続したいクライアントコンピュータへ転送しておきます。
以上で OpenVPN サーバーの設定は完了です。
* /etc/openvpn/server/ca.crt
* /etc/openvpn/server/ta.key * /etc/openvpn/server/issued/client1.crt * /etc/openvpn/server/private/client1.key |
| Sponsored Link |
|
|