fedora 23でOpenVPNサーバを立てて、Windows 10から接続するまでの手順です。
なぜCentOSでなくfedoraかというと、リモートでワークステーションとして動かしたかったからです。最新ソフトが使えるfedoraのほうが何かと都合がよいです。
認証用の鍵は手作業で生成、設定ファイルなどはansibleで設定します。
パッケージインストール
dnfはyumの後継ソフトです。使い方はだいたいyumと同じです。
# dnf install openvpn easy-rsa
easy-rsaは鍵生成用コマンドです。CA用サーバを別に用意する場合はそちらにインストールします。セキュリティ的にはCA用サーバと公開鍵認証を使うサーバは別にしておいたほうが望ましいですが、ここでは同一サーバでやってしまいます。
easy-rsaで鍵作成
CA環境作成
# mkdir /etc/openvpn/CA
# cd /etc/openvpn/CA
# cp -a /usr/share/easy-rsa/3.0.0/* .
# ./easyrsa init-pki
# ./easyrsa build-ca
パスフレーズを求められるので、パスフレーズをパスワード管理ソフトなどで作っておきます。
Generating a 2048 bit RSA private key
...................................................................+++
.........................+++
writing new private key to '/etc/openvpn/CA/pki/private/ca.key.Nry5Hmpx5k'
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]: ←デフォルトでOK
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/CA/pki/ca.crt
サーバ用の公開鍵・秘密鍵作成
# ./easyrsa build-server-full vpn-server nopass
nopassオプションで秘密鍵のパスフレーズを省略します。入力を求められるパスフレーズはCA用のものです。
Generating a 2048 bit RSA private key
............................................................................+++
..............................................................................................................................................+++
writing new private key to '/etc/openvpn/CA/pki/private/vpn-server.key.N5AKMlYIAm'
-----
Using configuration from /etc/openvpn/CA/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/CA/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:'vpn-server'
Certificate is to be certified until Jan 8 12:28:56 2026 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
クライアント用の公開鍵・秘密鍵作成
# ./easyrsa build-client-full vpn-client-1 nopass
サーバ用のものとほぼ同手順です。
Generating a 2048 bit RSA private key
............................................+++
..................................+++
writing new private key to '/etc/openvpn/CA/pki/private/vpn-client.key.yxAIHoCTc8'
-----
Using configuration from /etc/openvpn/CA/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/CA/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:'vpn-client-1'
Certificate is to be certified until Jan 8 11:16:44 2026 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
OpenVPNサーバ側設定
公開鍵・秘密鍵の移設
さきほど作ったCA用環境から鍵ファイルをコピーします。
# mkdir /etc/openvpn/keys
# cd /etc/openvpn/keys
# cp /etc/openvpn/CA/pki/ca.crt .
# cp /etc/openvpn/CA/pki/issued/vpn-server.crt .
# cp /etc/openvpn/CA/pki/private/vpn-server.key .
ついでに暗号化に使うファイルを作ります。
# openssl dhparam -out dh2048.pem 2048
# openvpn --genkey --secret ta.key
所有者・パーミッション設定
あんまり意味ないかもしれませんが、いちおう所有者などをopenvpnユーザにします。
# chown openvpn:openvpn /etc/openvpn
# chown -R openvpn:openvpn /etc/openvpn/keys
# chmod 600 /etc/openvpn/keys/*
# chmod 700 /etc/openvpn
ansibleでファイル設定
あとはインタラクティブなコマンドはないので、ここからはansibleでしたほうが楽です。
roles/openvpn/tasks/main.yml
---
- name: OpenVPNインストール
dnf: name={{item}}
with_items:
- openvpn
- easy-rsa
- name: OpenVPNファイル作成
file:
path: '{{item.path}}'
mode: '{{item.mode}}'
state: touch
owner: openvpn
group: openvpn
with_items:
- { path: /etc/openvpn/ipp.txt, mode: '0600' }
- { path: /var/log/openvpn-status.log, mode: '0600' }
- { path: /var/log/openvpn.log, mode: '0600' }
- name: OpenVPN設定ファイル作成
template:
dest: '/etc/openvpn/my-vpn.conf'
src: 'my-vpn.conf.j2'
mode: 0600
backup: yes
notify: restart openvpn my-vpn
- name: sshポート解放(1194/udp)
firewalld: port=1194/udp state=enabled permanent=yes
notify: restart firewalld
- name: OpenVPN自動起動設定
service: name="openvpn@my-vpn" enabled=yes
/etc/openvpn/ipp.txt はクライアントに払い出すIPを固定化するためのものですが、使っていないのでtouchで済ませています。設定するときにtemplateへ移すつもりです。
サービス名の「openvpn@my-vpn」の@右側、my-vpnはconfファイルと同一名にします。confファイルを複数作ることで複数のOpenVPNインスタンスが立ち上がるようです。
roles/openvpn/templates/my-vpn.conf.j2
port 1194
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpn-server.crt
key /etc/openvpn/keys/vpn-server.key
dh /etc/openvpn/keys/dh2048.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/ipp.txt
push "route 172.16.0.0 255.255.255.0"
keepalive 10 120
tls-auth /etc/openvpn/keys/ta.key 0
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 4
mute 20
各IP・サブネットやpushコマンドは環境にあわせてどうぞ。port番号は変えたほうが良いかもしれません。
roles/openvpn/handlers/main.yml
---
- name: restart openvpn my-vpn
service: name="openvpn@my-vpn" state=restarted
- name: restart firewalld
service: name=firewalld state=restarted
サービス再起動用のhandlersです。
適当にplaybookを作ってopenvpnロールを実行するとサーバ側設定は完了です。
OpenVPNクライアント側設定
OpenVPN.JPを見ると
Windows PCをOpenVPNクライアントとして使用したい場合は、設定が簡単に行えるvpnux Clientがお勧めです。
とのことだったので、vpnux Clientを使います。メーカーのプラムシステムズはOpenVPN.JPの運営会社なので、日本における準公式といった位置づけになると思います。
クライアント用公開鍵・秘密鍵などをWindows機に移設
先に作ったクライアント用公開鍵・秘密鍵などを何らかの安全な方法で対象Windows機に移設します。USBメモリ使うとか、scp使うとか。
対象ファイルは次の4つです。
- /etc/openvpn/CA/pki/issued/vpn-client-1.crt ←証明書認証(PKI)証明書
- /etc/openvpn/CA/pki/private/vpn-client-1.key ← 証明書認証(PKI)秘密鍵
- /etc/openvpn/CA/pki/ca.crt ←CA証明書
- /etc/openvpn/keys/dh2048.pem ←TLS-Auth HMAC署名 共有鍵
vpnux Clientプロファイル設定
上記ファイルを使ってvpnux Clientのプロファイル設定をします。
設定の際、ちょっとした不具合がありましたので報告済みです。そのうち直るかもしれません。
@vpnuxConnector vpnux Clientのプロファイル詳細設定「TLS-Auth HMAC証明」共有鍵ですが、一度プロファイルを保存してからの再修正で表示される値が一般設定「証明書認証」秘密鍵になります。書き換えて保存すれば問題なく動作するので軽微ですがご報告まで
— noldor (takekoshi) (@noldorinfo) January 11, 2016
接続試験
接続を試してみて、無事つながれば作業完了です。
参考サイト
http://www.openvpn.jp/document/how-to/
https://blog.laimbock.com/2013/09/21/how-to-setup-openvpn-on-fedora-19/
最近のコメント