#author("2018-08-21T12:50:01+09:00","","")

#author("2018-08-21T12:55:39+09:00","","")

[[CentOS7]]

*OpenVPNインストール(tapモード)(VPS版) [#ub24eeaf]
&color(red){''VPS''環境やレンタルサーバー環境に''OpenVPN''をセットアップする場合について。};

**以下の環境が前提 [#v4a931fb]
+''NIC''が1枚しか装備されていない(構成されていない)
+IPアドレスはグローバルアドレスが1個のみ
+上記①②の理由からLAN側IPアドレスが無い

*OpenVPNインストール [#ud8c0712]
''OpenVPN''と''easy-rsa''を''epel''リポジトリからインストールします。
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# yum -y install openssl-devel lzo-devel pam-devel &color(lime){← OpenVPNインストールに必要なパッケージをインストール};|
|[root@localhost ~]# wget http://swupdate.openvpn.org/community/releases/openvpn-2.4.6.tar.gz|
|&color(lightpink){※最新版のURLは[[ダウンロードページ>http://openvpn.net/index.php/download/community-downloads.html]]};|
|[root@localhost ~]# rpmbuild -tb --clean openvpn-2.4.6.tar.gz &color(lime){← OpenVPNのRPMパッケージ生成};|
|[root@localhost ~]# yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.4.6-1.x86_64.rpm &color(lime){← 生成したOpenVPNのRPMパッケージをインストール};|
|[root@localhost ~]# rm -f ~/rpmbuild/RPMS/x86_64/openvpn-* &color(lime){← 生成したOpenVPNのRPMパッケージを削除};|
|[root@localhost ~]# rm -f openvpn-2.4.6.tar.gz &color(lime){← ダウンロードしたファイルを削除};|
|[root@localhost ~]# wget https://github.com/OpenVPN/easy-rsa/archive/master.zip &color(lime){← easy-rsaダウンロード};|
|[root@localhost ~]# unzip master.zip &color(lime){← easy-rsa解凍};|
|[root@localhost ~]# cp -r easy-rsa-master/easyrsa3/* /etc/openvpn/ &color(lime){← easyrsa3を所定のディレクトリへコピー};|
|[root@localhost ~]# rm -rf easy-rsa-master/ &color(lime){← 解凍先ディレクトリを削除};|
|[root@localhost ~]# rm -f master.zip &color(lime){← ダウンロードしたファイルを削除};|

*認証局の設置 [#q46c13a2]
バージョンアップで設定ファイルや証明書が変更されるのを防ぐために新しいディレクトリを作り、そこに設定ファイルなどを保存する運用を行う。

**認証局(CA)情報の初期化とディレクトリ作成 [#gafe68b4]
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# cd /etc/openvpn &color(lime){←ディレクトリ移動};|
|[root@localhost openvpn]# ./easyrsa init-pki &color(lime){←初期化};|

**認証局(CA)の作成 [#ed569536]
|BGCOLOR(black):COLOR(white):|c
|[root@localhost openvpn]# ./easyrsa build-ca &color(lime){← CA証明書・秘密鍵作成};|
|Enter New CA Key Passphrase: &color(lime){←任意のパスフレーズを入力}; &br; Re-Enter New CA Key Passphrase: &color(lime){←もう一度入力}; &br; Generating RSA private key, 2048 bit long modulus &br; ..........................................................................................................................+++ &br; ................................+++ &br; e is 65537 (0x10001) &br; You are about to be asked to enter information that will be incorporated &br; into your certificate request. &br; What you are about to enter is what is called a Distinguished Name or a DN. &br; There are quite a few fields but you can leave some blank &br; For some fields there will be a default value, &br; If you enter '.', the field will be left blank. &br; ----- &br; Common Name (eg: your user, host, or server name) [Easy-RSA CA]: &color(lime){←VPN接続時のホスト名(FQDN)を入力(例:hogehoge.com)}; &br;  &br; CA creation complete and you may now import and sign cert requests. &br; Your new CA certificate file for publishing is at: &br; /etc/openvpn/pki/ca.crt|

-CA証明書(''ca.crt'')およびCA秘密鍵(''ca.key'')が作成されます
-入力したパスフレーズは、CA秘密鍵(''ca.key'')のパスフレーズになります

**DHパラメータ作成 [#c8f29423]
|BGCOLOR(black):COLOR(white):|c
|[root@localhost openvpn]# ./easyrsa gen-dh|
|&color(lightpink){時間が掛かる(2分~3分)ので、しばし待機};|
|DH parameters of size 2048 created at /etc/openvpn/pki/dh.pem|

DHパラメータ(''dh.pem'')が作成されます。

**ta.key作成 [#d99f4229]
''tls-auth''を設定しておくと、VPNセッション開始時のパケットを''HMAC''で認証し、認可されないパケットは破棄されるため、''DDoS''攻撃を防ぐことができる。オープンなVPNサーバーを建てる時には設定しておくことがオススメらしい。''ta.key''は静的共有鍵なので、安全な方法で配送される必要がある。

|BGCOLOR(black):COLOR(white):|c
|[root@localhost openvpn]# openvpn --genkey --secret ./ta.key|

**サーバー用の証明書と秘密鍵の作成 [#u4ed0edf]
VPNサーバー「hogehoge.com」用の証明書と秘密鍵をパスフレーズ無しで作成します。
|BGCOLOR(black):COLOR(white):|c
|[root@localhost openvpn]# ./easyrsa build-server-full hogehoge.com nopass|
|Generating a 2048 bit RSA private key &br; ....+++ &br; .......................................................+++ &br; writing new private key to '/etc/openvpn/easy-rsa/pki/private/hogehoge.com.key.O3l2ARzsse' &br; ----- &br; Using configuration from ./openssl-1.0.cnf &br; Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: &color(lime){←CA秘密鍵(ca.key)のパスフレーズを入力};  &br; Check that the request matches the signature &br; Signature ok &br; The Subject's Distinguished Name is as follows &br; commonName            :ASN.1 12:'hogehoge.com' &br; Certificate is to be certified until Mar 28 17:05:59 2028 GMT (3650 days) &br;  &br; Write out database with 1 new entries &br; Data Base Updated|

サーバー用の証明書(hogehoge.com.crt)および秘密鍵(hogehoge.com.key)が作成されます

**クライアント用の証明書と秘密鍵の作成 [#re64d61f]
クライアント「client01」用の証明書と秘密鍵をパスフレーズ無しで作成します。

|BGCOLOR(black):COLOR(white):|c
|[root@localhost openvpn]# ./easyrsa build-client-full client01 nopass &br; Generating a 2048 bit RSA private key &br; ................+++ &br; ..............................................................................................................+++ &br; writing new private key to '/etc/openvpn/easy-rsa/pki/private/client01.key.MY2YPyBgBr' &br; ----- &br; Using configuration from ./openssl-1.0.cnf &br; Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: &color(lime){←CA秘密鍵(ca.key)のパスフレーズを入力}; &br; Check that the request matches the signature &br; Signature ok &br; The Subject's Distinguished Name is as follows &br; commonName            :ASN.1 12:'client01' &br; Certificate is to be certified until Mar 28 17:17:18 2028 GMT (3650 days) &br; Write out database with 1 new entries &br; Data Base Updated|

クライアント用の証明書(client01.crt)および秘密鍵(client01.key)が作成されます

*OpenVPNの設定 [#n556df6a]
***サーバー設定 [#we26a54c]
''証明書のコピー''
|BGCOLOR(black):COLOR(white):|c
|[root@localhost openvpn]# cp /etc/openvpn/pki/ca.crt .|
|[root@localhost openvpn]# cp /etc/openvpn/pki/dh.pem .|
|[root@localhost openvpn]# cp /etc/openvpn/pki/issued/hogehoge.com.crt .|
|[root@localhost openvpn]# cp /etc/openvpn/pki/private/hogehoge.com.key .|

''サーバーのコンフィグファイルのひな型をコピー''
|BGCOLOR(black):COLOR(white):|c
|[root@localhost openvpn]# cp /usr/share/doc/openvpn*/sample/sample-config-files/server.conf /etc/openvpn/server.conf|

''コンフィグファイル(server.conf)の編集''
|BGCOLOR(black):COLOR(white):|c
|[root@localhost openvpn]# vi /etc/openvpn/server.conf|
|port 1194 &color(lime){←使用するポート番号}; &br; proto tcp &color(lime){←使用するプロトコル}; &br; dev tap0 &color(lime){←TAP/TUNデバイス指定 ([[VPNのtapとtunの違い]])}; &br; ca ca.crt &color(lime){←ca証明書}; &br; cert hogehoge.com.crt &color(lime){←サーバ証明書}; &br; key hogehoge.com.key  # This file should be kept secret &color(lime){←秘密鍵の指定}; &br; dh dh.pem &color(lime){←乱数(DH)パラメータの指定}; &br; ifconfig-pool-persist ipp.txt &color(lime){←配布用IPアドレスのテーブル(固定IPを使用する場合、ipp.txtを編集)}; &br; server-bridge 10.8.0.10 255.255.255.0 10.8.0.201 10.8.0.210 &color(lime){←コメント解除して変更 [ブリッジに割り当てるIPアドレス・ネットマスク・クライアントに割り当てるIPアドレスの範囲}; &br; client-to-client &color(lime){←クライアント間通信の許可}; &br; keepalive 10 120 &color(lime){←キープアライブ設定(10秒ごとに生存確認、120秒無応答でダウン)}; &br; tls-auth ta.key 0 # This file is secret &color(lime){←TLS認証キーの指定}; &br; cipher AES-256-CBC &color(lime){←キーの強度を指定}; &br; comp-lzo &color(lime){←圧縮の有効可}; &br; user nobody &color(lime){←ユーザ権限の設定}; &br; group nobody &br; persist-key &br; persist-tun &br; status /var/log/openvpn-status.log &color(lime){←ステータスログ}; &br; log         /var/log/openvpn.log &color(lime){←稼働ログ}; &br; log-append  /var/log/openvpn.log &br; verb 3 &color(lime){←ログレベル}; &br; ;explicit-exit-notify 1 &color(lime){←tcpを使う場合はコメントアウトする};|

|port 1194 &color(lime){←使用するポート番号}; &br; proto tcp &color(lime){←使用するプロトコル}; &br; dev tap0 &color(lime){←TAP/TUNデバイス指定 ([[VPNのtapとtunの違い]])}; &br; ca ca.crt &color(lime){←ca証明書}; &br; cert hogehoge.com.crt &color(lime){←サーバ証明書}; &br; key hogehoge.com.key  # This file should be kept secret &color(lime){←秘密鍵の指定}; &br; dh dh.pem &color(lime){←乱数(DH)パラメータの指定}; &br; ifconfig-pool-persist ipp.txt &color(lime){←配布用IPアドレスのテーブル(固定IPを使用する場合、ipp.txtを編集)}; &br; server-bridge 10.8.0.10 255.255.255.0 10.8.0.201 10.8.0.210 &color(lime){←コメント解除して変更 [ブリッジに割り当てるIPアドレス・ネットマスク・クライアントに割り当てるIPアドレスの範囲}; &br; push "route 10.8.0.0 255.255.255.0" &br; client-to-client &color(lime){←クライアント間通信の許可}; &br; keepalive 10 120 &color(lime){←キープアライブ設定(10秒ごとに生存確認、120秒無応答でダウン)}; &br; tls-auth ta.key 0 # This file is secret &color(lime){←TLS認証キーの指定}; &br; cipher AES-256-CBC &color(lime){←キーの強度を指定}; &br; comp-lzo &color(lime){←圧縮の有効可}; &br; user nobody &color(lime){←ユーザ権限の設定}; &br; group nobody &br; persist-key &br; persist-tun &br; status /var/log/openvpn-status.log &color(lime){←ステータスログ}; &br; log         /var/log/openvpn.log &color(lime){←稼働ログ}; &br; log-append  /var/log/openvpn.log &br; verb 3 &color(lime){←ログレベル}; &br; ;explicit-exit-notify 1 &color(lime){←tcpを使う場合はコメントアウトする};|


**ipp.txtの記述方法 [#b7414dbc]
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# vi /etc/openvpn/ipp.txt|
|client01,10.8.0.201  &br; client02,10.8.0.202|
ここで固定指定されていないユーザーについては、サーバー設定ファイルに記載された範囲内で、使用されていないものが順番に使用される。

*起動テスト [#ed21ab7f]
''起動テストを実行''
|BGCOLOR(black):COLOR(white):|c
|[root@localhost openvpn]# openvpn server.conf|

**/var/log/openvpn.log こんな感じのログが出ればOK [#e63f6e91]
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# tail /var/log/openvpn.log|
|Sun Apr  1 03:28:46 2018 OpenVPN 2.4.5 x86_64-redhat-linux-gnu [Fedora EPEL patched] [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Mar  1 2018 &br;  &br; (省略) &br;  &br; &color(lightpink){Sun Apr  1 03:28:46 2018 Initialization Sequence Completed};|

*bridge-utilsパッケージのインストール [#m4f2e346]
''bridge-utils'' がインストールされていなければインストールします。
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# yum list installed | grep bridge-utils|

''bridge-utils''  インストール
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# yum -y install bridge-utils|

*tapインターフェースの作成 [#uff41c93]

|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# nmcli con add type tun ifname tap_eth00|

作成したtapインターフェースを確認
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# nmcli device|
|[root@localhost ~]# ifconfig|

&color(red){''ちなみに削除のコマンドは下記''};
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# nmcli con delete tun-tap_eth00|

**OpenVPN起動スクリプトへのコマンド追加 [#xdbfbc49]
Linux系OSにOpenVPNをインストールする場合、起動スクリプトを作成するかと思います。そのスクリプトにコマンドを記述しましょう。OpenVPN起動後にIPアドレス、サブネット、ブロードキャストを設定しネットワークを再起動するコマンドを記述します。

|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# vi /usr/local/vpnserver/add_eth00.sh &color(lime){← 仮想ネットワークインタフェースにIPアドレスを設定するスクリプト作成};|
|#!/bin/sh &br;  &br; sleep 3 &br; /sbin/ifconfig tap_eth00 xxx.xxx.xxx.xxx netmask 255.255.255.0 broadcast xxx.xxx.xxx.255 &br; /etc/init.d/network restart|
|[root@localhost ~]# chmod +x /usr/local/vpnserver/add_eth00.sh &color(lime){← 作成したスクリプトに実行権限付加};|
|[root@localhost ~]# vi /usr/local/vpnserver/del_eth00.sh &color(lime){← 仮想ネットワークインタフェースからIPアドレスを削除るスクリプト作成};|
|#!/bin/sh &br;  &br; sleep 3 &br; /sbin/ifconfig del tap_eth00 xxx.xxx.xxx.xxx netmask 255.255.255.0 broadcast xxx.xxx.xxx.255 &br; /etc/init.d/network restart|
|[root@localhost ~]# chmod +x /usr/local/vpnserver/del_eth00.sh &color(lime){← 作成したスクリプトに実行権限付加};|

*OpenVPNの起動プロセスにIPアドレス設定スクリプトを埋め込む [#zbd5e253]
**パターン①「''/etc/init.d/openvpn''」が&color(red){存在する};場合 [#w3cfea0f]
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# vi /etc/init.d/openvpn|
|case “$1″ in &br; start) &br; echo -n $”Starting openvpn: ” &br; &color(lime){/usr/local/vpnserver/add_eth00.sh}; &br; /sbin/modprobe tun >/dev/null 2>&1 &br; echo 1 > /proc/sys/net/ipv4/ip_forward &color(lime){# 転送を有効にする}; &br; &br; ~略~ &br; &br; stop) &br; &br; ~略~ &br; &br; # Run shutdown script, if defined &br; if [ -f $work/openvpn-shutdown ]; then &br; $work/openvpn-shutdown &br; fi &br; &color(lime){/usr/local/vpnserver/del_eth00.sh}; &br; echo 0 > /proc/sys/net/ipv4/ip_forward &color(lime){# 転送を無効にする};|

**パターン②「''/etc/init.d/openvpn''」が&color(red){無い};場合 [#v1436141]
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# cp /usr/lib/systemd/system/openvpn@.service /usr/lib/systemd/system/openvpn-tap.service|
|[root@localhost ~]# vi /usr/lib/systemd/system/openvpn-tap.service|
|[Unit] &br; Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I &br; After=network.target &br; &br; [Service] &br; Type=&color(lime){forking}; &br; PrivateTmp=true &br; PIDFile=&color(lime){/var/run/openvpn-server/openvpn.pid}; &br; &color(lime){ExecStartPre=/bin/echo 1 > /proc/sys/net/ipv4/ip_forward}; &br; &color(lime){ExecStartPre=/usr/local/vpnserver/add_eth00.sh}; &br; &color(lime){ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn-server/openvpn.pid --cd /etc/openvpn/ --config server.conf}; &br; &color(lime){ExecStopPost=/usr/local/vpnserver/dell_eth00.sh}; &br; &color(lime){ExecStopPost=/bin/echo 0 > /proc/sys/net/ipv4/ip_forward}; &br; &br; [Install] &br; WantedBy=multi-user.target|
|[root@localhost ~]# systemctl daemon-reload ← SoftEther VPN Server起動スクリプト修正反映|

**サービスとして起動 [#y119981b]
***パターン①「''/etc/init.d/openvpn''」が&color(red){存在する};場合 [#b3a3879f]
''サービスとして起動''
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# systemctl start openvpn@server|

''サービス状態確認''
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# systemctl starus openvpn@server|

''サービス自動起動''
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# systemctl enable openvpn@server|

***パターン②「''/etc/init.d/openvpn''」が&color(red){無い};場合 [#e3a76b09]
''サービスとして起動''
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# systemctl start openvpn-bridge|

''サービス自動起動''
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# systemctl enable openvpn-bridge|

*Firewallの設定変更 [#c10c17d4]
''firewall''へ''TCP 1194''の通信許可を設定
|BGCOLOR(black):COLOR(white):|c
|[root@localhost ~]# firewall-cmd --add-port=1194/tcp --zone=public --permanent|
|[root@localhost ~]# firewall-cmd --reload|

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS