2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

OpenVPN 構築

Last updated at Posted at 2020-08-09

Inspire from 基本的なOpenVPNの構築手順@makisyu

サーバー CentOS8.2
クライアント Windows 10, iphone ios 13.6

ダウンロード

https://openvpn.net/index.php/download/community-downloads.html
これを書いた当時は2.4.9が最新だったが、適宜その時の最新版を取得。

サーバー側の設定

ここが便利: http://www.openvpn.jp/document/how-to/
本家のHow-toを日本語化してくれている。らしいけど。
らしいけど。うまくいかなかったのであくまで参考程度。(インストール↓参照)

インストール

RPMを作るのがオススメらしい。がうまくいかなかった。

こうやるらしい
#dnf group install "RPM Development Tools"
#dnf install openssl-devel lzo-devel pam-devel
#rpmbuild -tb openvpn-2.4.9.tar.gz
#dnf install /root/rpmbuild/RPMS/x86_64/openvpn-2.4.9-1.x86_64.rpm
こうなった。。。
# rpmbuild -tb openvpn-2.4.9.tar.gz
error: Failed to read spec file from openvpn-2.4.9.tar.gz
こうしたった
#dnf group install "RPM Development Tools"
#dnf install openssl-devel lzo-devel pam-devel
#dnf install rpm-build rpmdevtools make gcc
#dnf install openssl lzo pam
#cd /tmp
#wget https://swupdate.openvpn.org/community/releases/openvpn-2.4.9.tar.xz
#cd ./openvpn-2.4.9
#tar xf openvpn-2.4.9.tar.xz
#./configure
#make
#make install
ついでにこれもしたった
#dnf -y install easy-rsa
#mkdir -p /etc/openvpn/easy-rsa/
#cp -r /usr/share/easy-rsa/3.0.7/ /etc/openvpn/easy-rsa/
#cd /etc/openvpn/easy-rsa/*/

認証局の設置

もともとはopenvpn-2.4.9.tar.xzに同梱されてたらしいけど入ってるのを見たことがない
とりあえずdnf install easy-rsaでインストールできるのでインストール
そしたらversion 3.0.7がはいってきた。このままやる

# cd /etc/openvpn/easy-rsa/3.0.7/
# ./easyrsa init-pki

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/3.0.7/pki
# ./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)
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/3.0.7/pki/ca.crt

Common Name はめんどかったのでそのままエンターした

# ./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 /etc/openvpn/easy-rsa/3.0.7/pki/dh.pem

昔は30分くらいかかった希ガスけど1分かからず終わった。マシンのスペックかな?

# openvpn --genkey --secret ./pki/ta.key
# ls -lvhA pki/
total 56K
-rw------- 1 root root 1.2K Aug 10 01:10 ca.crt
drwx------ 2 root root 4.0K Aug 10 01:10 certs_by_serial
-rw------- 1 root root  424 Aug 10 01:11 dh.pem
-rw------- 1 root root    0 Aug 10 01:10 index.txt
-rw------- 1 root root    0 Aug 10 01:10 index.txt.attr
drwx------ 2 root root 4.0K Aug 10 01:10 issued
-rw------- 1 root root 4.6K Aug 10 01:10 openssl-easyrsa.cnf
drwx------ 2 root root 4.0K Aug 10 01:10 private
drwx------ 5 root root 4.0K Aug 10 01:10 renewed
drwx------ 2 root root 4.0K Aug 10 01:10 reqs
drwx------ 5 root root 4.0K Aug 10 01:10 revoked
-rw------- 1 root root 4.6K Aug 10 01:10 safessl-easyrsa.cnf
-rw------- 1 root root    3 Aug 10 01:10 serial
-rw------- 1 root root  636 Aug 10 01:16 ta.key

サーバ鍵と証明書の作成

./easyrsa build-server-full server nopass

みんなやってるので(パスワード無しで)やりました。反省してません。

cd /etc/openvpn
ln -s /etc/openvpn/easy-rsa/3.0.7/pki/
ln -s pki/ta.key
ln -s pki/ca.crt
ln -s pki/dh.pem
ln -s pki/private/server.key
ln -s pki/issued/server.crt
cp /tmp/openvpn-2.4.9/sample/sample-config-files/server.conf /etc/openvpn/server.conf.org
cp /tmp/openvpn-2.4.9/sample/sample-config-files/server.conf /etc/openvpn/server.conf

とりあえずこの辺やっときゃ必要なファイルが拾えるのでリンク貼った。
server.conf はオリジナルを保持しておきたいのでコピー

server.conf
ca /etc/openvpn/ca.crt # 78行目くらい
cert /etc/openvpn/server.crt # 79行目
key /etc/openvpn/server.key # 80
dh /etc/openvpn/dh.pem # 85
server 172.16.0.0 255.255.0.0 # 101
push "route 0.0.0.0 0.0.0.0" # 141 ; すべてのパケットをVPNサーバ経由とする
push "dhcp-option DNS 199.85.126.10" # 200 ; DNS サーバのアドレスをNorton DNSに向ける
push "dhcp-option DNS 199.85.127.10" # 201 ; DNS サーバのアドレスをNorton DNSに向ける
tls-auth /etc/openvpn/ta.key 0 # 244
cipher AES-256-GCM # 252 ; AES-256-CBC ではなく AES-256-GCM を採用
compress lz4-v2 # 257
user nobody # 274
group nobody # 275
status /var/log/openvpn/status.log # 287
log         /var/log/openvpn/openvpn.log #296
log-append  /var/log/openvpn/openvpn.log #297
ncp-ciphers AES-256-GCM # 最終行に追記
tls-version-min 1.2 # 最終行に追記
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384 # 最終行に追記
reneg-sec 60 # 最終行に追記

変えたのは上記。うん、結構あるなぁ

openvpn /etc/openvpn/server.conf

設定ファイルを書いたら、まずはフォアグラウンドで動作確認。

こうなった...
Mon Aug 10 02:03:30 2020 Warning: Error redirecting stdout/stderr to --log file: /var/log/openvpn/openvpn.log: No such file or directory (errno=2)
Mon Aug 10 02:03:30 2020 Warning: Error redirecting stdout/stderr to --log file: /var/log/openvpn/openvpn.log: No such file or directory (errno=2)
Options error: --status fails with '/var/log/openvpn/status.log': No such file or directory (errno=2)
Options error: Please correct these errors.
Use --help for more information.

こうなった。そりゃそうだ。/var/log/openvpnディレクトリ作ってないんだもの

mkdir /var/log/openvpn/
openvpn /etc/openvpn/server.conf

何も表示されないままになればOK(?)
とりあえず^Cで終了させて。。。

# systemctl status openvpn
Unit openvpn.service could not be found.

Linux の任意のスクリプトをサービス登録し OS 起動時に自動起動させる [init.d/SystemD 編] @ KEINOS | Qiita

↑参考にしつつサービス登録する。

/etc/openvpn/openvpn.service
[Unit]
Description=OpenVPN
After=network.target

[Service]
Type=simple
User=nobody
WorkingDirectory=/etc/openvpn
ExecStart=/usr/local/sbin/openvpn /etc/openvpn/server.conf

[Install]
WantedBy=multi-user.target

こんな感じで作ってみたけどあってんかはわからない。

ln -s /etc/openvpn/openvpn.service /etc/systemd/system/

あとはリンクつなげてテスト

# systemctl status openvpn
● openvpn.service - OpenVPN
   Loaded: loaded (/etc/openvpn/openvpn.service; linked; vendor preset: disabled)
   Active: inactive (dead)
# systemctl start openvpn
# systemctl status openvpn
● openvpn.service - OpenVPN
   Loaded: loaded (/etc/openvpn/openvpn.service; linked; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2020-08-10 02:21:21 JST; 4s ago
  Process: 94886 ExecStart=/usr/local/sbin/openvpn /etc/openvpn/server.conf (code=exited, status=1/FAILURE)
 Main PID: 94886 (code=exited, status=1/FAILURE)

Aug 10 02:21:21 localhost systemd[1]: Started OpenVPN.
Aug 10 02:21:21 localhost systemd[1]: openvpn.service: Main process exited, code=exited, status=1/FAILURE
Aug 10 02:21:21 localhost systemd[1]: openvpn.service: Failed with result 'exit-code'.
lines 1-9/9 (END)

とりあえず systemD が認識したっぽいので start してみるがエラー...

vim /etc/openvpn/openvpn.service
/etc/openvpn/openvpn.service
[Unit]
Description=OpenVPN
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/etc/openvpn
ExecStart=/usr/local/sbin/openvpn /etc/openvpn/server.conf

[Install]
WantedBy=multi-user.target
# systemctl start openvpn.service
Warning: The unit file, source configuration file or drop-ins of openvpn.service changed on disk. Run 'systemctl daemon-reload' to reload units.
# systemctl daemon-reload
# systemctl start openvpn.service
# systemctl status openvpn -l
● openvpn.service - OpenVPN
   Loaded: loaded (/etc/openvpn/openvpn.service; linked; vendor preset: disabled)
   Active: active (running) since Mon 2020-08-10 02:34:05 JST; 2s ago
 Main PID: 95065 (openvpn)
    Tasks: 1 (limit: 2851)
   Memory: 1.4M
   CGroup: /system.slice/openvpn.service
           mq95065 /usr/local/sbin/openvpn /etc/openvpn/server.conf

Aug 10 02:34:05 localhost systemd[1]: Started OpenVPN.

User=rootにしたらサービス起動した...
permission deny とかでなかったじゃんかーーーーーー

systemctl enable openvpn.service
Created symlink /etc/systemd/system/multi-user.target.wants/openvpn.service → /etc/openvpn/openvpn.service.

いつも見るmesgみると落ち着く。。。

# journalctl -e -u openvpn.service

こいつでログも見れるのでとりあえず systemD へのレジスト はokってことでおk?

firewall-cmd --permanent --add-service openvpn
firewall-cmd --add-service openvpn

あとは、firewallD に許可リスト突っ込む


クライアントの設定

クライアント用秘密鍵生成

# cd /etc/openvpn/easy-rsa/3.0.7
# ./easyrsa build-client-full client01 nopass
Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Generating a RSA private key
...................................+++++
................+++++
writing new private key to '/etc/openvpn/easy-rsa/3.0.7/pki/easy-rsa-95128.16s90t/tmp.KXofP8'
-----
Using configuration from /etc/openvpn/easy-rsa/3.0.7/pki/easy-rsa-95128.16s90t/tmp.U6v8Ai
Enter pass phrase for /etc/openvpn/easy-rsa/3.0.7/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:'client01'
Certificate is to be certified until Nov 12 17:49:24 2022 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

もう面倒になったので(パスワード無しで)やりました。反省してません。
あとは、pki/ta.key pki/private/ca.crt pki/issued/client01.crt pki/private/client01.key をSCPとかでこっそり持ってきちゃうと楽。

WinSCP

設定ファイル

/tmp/openvpn-2.4.9/sample/sample-windows/sample.ovpn (ソースコードの中)にクライアント用(windows)の設定ファイルがあるのでそれを適宜修正する。

cp /tmp/openvpn-2.4.9/sample/sample-windows/sample.ovpn /etc/openvpn/client01.ovpn
cp /tmp/openvpn-2.4.9/sample/sample-windows/sample.ovpn /etc/openvpn/client01.ovpn.org
remote example.net
port 1194
proto udp
dev tun
; ifconfig 10.3.0.1 255.255.255.0
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
compress lz4-v2
cipher AES-256-GCM
verb 4


p.s.

記事書いてて ta.key が ずっと Turkey にしか見えなかった・・・Turkey食いてぇ

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?