Table of Contents
ネットワーク構成
- サーバ側ネットワーク(192.168.1.0)
機器 | IPアドレス |
---|---|
ルータ | 192.168.1.1 |
VPNサーバ | 192.168.1.2 |
アプリケーションサーバ1 | 192.168.1.3 |
アプリケーションサーバ2 | 192.168.1.4 |
- サーバ/クライアント間用仮想ネットワーク(10.8.1.0)
- クライアント側ネットワーク(192.168.0.0)
- サーバ側ネットワークとクライアント側ネットワークは異なるゾーンである必要がある。
スタティックルーティング
- VPNサーバ単体とだけ接続できれば良い場合は、設定の必要なし。
- ルータ下の複数のPCに接続する場合は、ルータにスタティックルーティングを設定する必要あり。
- クライアントからアプリケーションサーバにアクセスしているとき、アプリケーションサーバでは 10.8.1.x からアクセスされているように見える。戻りパケットを 10.8.1.x に投げるので、10.8.1.0 用のゲートウェイ設定が無いとクライアントに応答が返ってこない。
- 10.8.1.0 宛てのパケットのゲートウェイとして VPN サーバのローカルアドレスを設定する。
- any net 10.8.1.0 netmask 255.255.255.0 gw 192.168.1.2
ファイアウォール
- UDP:1194 を開放し、192.168.1.2 にポート転送する。
# firewall-cmd --permanent --add-service=openvpn # firewall-cmd --reload
仮想NIC
- VPNサーバにネットワークI/Fが1つだけしか無く、グローバルIP用として使われていて、ローカルネットが存在しない場合は、VPNサーバに仮想NICを追加する。
- /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE="eth0:0" IPADDR=192.168.1.2 PREFIX=24 ONBOOT=yes BOOTPROTO=none
インストール
# yum install openvpn (epelリポジトリ)
# cd /etc/openvpn/
# curl -LO https://github.com/OpenVPN/easy-rsa/archive/master.zip
# unzip master.zip
# mv easy-rsa-master/easyrsa3/ .
# rm -rf easy-rsa-master/
# rm -f master.zip
サーバ設定
CA証明書・秘密鍵作成
# cd /etc/openvpn/easyrsa3/
# ./easyrsa init-pki (OpenVPNインストール後初回のみ実行する)
# ./easyrsa build-ca (PEM pass phrase, Common Name を入力)
# cp pki/ca.crt /etc/openvpn/server/
サーバー証明書・秘密鍵作成
# ./easyrsa build-server-full server nopass (CAのパスフレーズを入力)
# cp pki/issued/server.crt /etc/openvpn/server/
# cp pki/private/server.key /etc/openvpn/server/
Diffie Hellman パラメータ作成
# ./easyrsa gen-dh
# cp pki/dh.pem /etc/openvpn/server/
証明書廃止リスト作成
- /etc/openvpn/easyrsa3/vars (vars.example をコピー)
#set_var EASYRSA_CRL_DAYS 180 set_var EASYRSA_CRL_DAYS 3650
# ./easyrsa build-client-full dmy nopass (CAのパスフレーズを入力)
# ./easyrsa revoke dmy (yes応答, CAのパスフレーズを入力)
# ./easyrsa gen-crl (CAのパスフレーズを入力)
# cp /etc/openvpn/easyrsa3/pki/crl.pem /etc/openvpn/server/
# chmod o+r /etc/openvpn/server/crl.pem
OpenVPN設定
# openvpn --genkey --secret /etc/openvpn/ta.key
# cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/
/etc/openvpn/server/server.conf
port 1194 proto udp dev tun ;dh dh2048.pem dh dh.pem server 10.8.1.0 255.255.255.0 ifconfig-pool-persist /var/log/openvpn-ipp.txt push "route 192.168.1.0 255.255.255.0" ;tls-auth ta.key 0 tls-auth ta.key 0 ;cipher BF-CBC # Blowfish (default) cipher AES-256-CBC ;user nobody ;group nobody user nobody group nobody ;status openvpn-status.log status /var/log/openvpn-status.log ;log-append openvpn.log log-append /var/log/openvpn.log crl-verify crl.pem
/etc/logrotate.d/openvpn
/var/log/openvpn.log { missingok notifempty sharedscripts postrotate systemctl restart openvpn 2>&1 > /dev/null || true endscript }
/etc/rc.d/init.d/openvpn (コメントを解除)
#echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/ip_forward
サービス起動
- CentOS 8
# systemctl enable openvpn-server@server # systemctl start openvpn-server@server
- CentOS 7
# systemctl enable openvpn@server # systemctl start openvpn@server
クライアント用設定
クライアント証明書・秘密鍵作成
# cd /etc/openvpn/easyrsa3/
# ./easyrsa build-client-full client1 (client1用のパスフレーズ, CAのパスフレーズを入力)
クライアント設定ファイル
-
ファイルをクライアントマシンに転送。
- /etc/openvpn/server/ca.crt
- /etc/openvpn/server/ta.key
- /etc/openvpn/easyrsa3/pki/issued/client1.crt
- /etc/openvpn/easyrsa3/pki/private/client1.key
- /usr/share/doc/openvpn/sample/sample-config-files/client.conf
%UserProfile%/OpenVPN/config 以下に上記ファイルを配置。
拠点が複数の場合は拠点毎にサブフォルダを作成してそこに配置する。
クライアント設定
- client.conf を client.ovpn にリネーム。
- %UserProfile%/OpenVPN/config/client.ovpn
# OpenVPN サーバ名とポート remote vpn.takeash.net 1194 ca ca.crt cert client1.crt key client1.key remote-cert-tls server ;tls-auth ta.key 1 tls-auth ta.key 1 ;cipher x cipher AES-256-CBC
複数拠点に同時接続
- 同時接続する拠点分の TAP Windows Adapter が必要。
Adapter を追加するには、「プログラム / TAP-Windows / Utilities / Add a new TAP virtual ethernet adapter」を右クリックし「管理者として実行」を選択する。
"C:\Program Files\TAP-Windows\bin\tapinstall.exe" install "C:\Program Files\TAP-Windows\driver\OemVista.inf" tap0901
How to connect multiple VPNs using OpenVPN on Windows 7 on the same time? - Server Fault