Centos7にOpenVPNをインストールして外出先からでも自宅内のコンテンツにアクセスできるようにします。tun設定としてネットワーク層での接続としルーティングを設定します。対象とする環境はCentos7.4です。CentOS7.4ではEPELリポジトリからもインストールできるようですが今回はビルドしてRPMでインストールします。
目次
1.関連パッケージのインストール
(1)OpenVPNに必要なパッケージのインストール
1 |
yum -y install openssl-devel lzo-devel pam-devel rpm-build gcc |
(2)本体のインストール
1 2 3 4 5 6 7 8 9 10 |
#OpenVPNダウンロード(2018/5/8時点では2.4.6が最新) wget http://swupdate.openvpn.org/community/releases/openvpn-2.4.6.tar.gz #OpenVPNのRPMパッケージ生成 rpmbuild -tb --clean openvpn-2.4.6.tar.gz #生成したOpenVPNのRPMパッケージをインストール yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.4.6-1.x86_64.rpm #生成したOpenVPNのRPMパッケージを削除 rm -f ~/rpmbuild/RPMS/x86_64/openvpn-* #ダウンロードしたファイルを削除 rm -f openvpn-2.4.6.tar.gz |
(3)easy-rsaのインストール
1 2 3 4 5 6 7 8 9 10 |
# easy-rsaダウンロード wget https://github.com/OpenVPN/easy-rsa/archive/master.zip # easy-rsa解凍 unzip master.zip # easyrsa3を所定のディレクトリへコピー cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/ # 解凍先ディレクトリを削除 rm -rf easy-rsa-master # ダウンロードしたファイルを削除 rm -f master.zip |
2.証明書作成
(1)CA証明証・秘密鍵作成
1 2 3 4 5 6 7 8 9 10 11 12 |
# easyrsa3ディレクトリへ移動 cd /etc/openvpn/easyrsa3/ # easyrsaの初期化※OpenVPNインストール後最初の1回のみ ./easyrsa init-pki # CA証明書・秘密鍵作成 ./easyrsa build-ca # 途中でパスフレーズを入力する 「centos7」 Enter PEM pass phrase: ←任意のパスフレーズを応答(メモしておく) Verifying - Enter PEM pass phrase: ←任意のパスフレーズを応答(確認) Common Name(eg: your user, host, or server name)[Easy-RSA CA]:gtrt7.com ←サイト名(例:何でもよい)を応答 # CA証明書をOpenVPN設定ファイル格納ディレクトリへコピー cp pki/ca.crt /etc/openvpn/ |
(2)サーバー証明書・秘密鍵・DH(Diffie Hellman)パラメータ作成
1 2 3 4 5 6 7 8 9 10 11 12 |
# サーバー証明書・秘密鍵作成 ./easyrsa build-server-full gtrt7com nopass # CA秘密鍵のパスフレーズを応答 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key # サーバー証明書をOpenVPN設定ファイル格納ディレクトリへコピー cp pki/issued/gtrt7com.crt /etc/openvpn/ # サーバー秘密鍵をOpenVPN設定ファイル格納ディレクトリへコピー cp pki/private/gtrt7com.key /etc/openvpn/ # DHパラメータ作成 ./easyrsa gen-dh # DHパラメータをOpenVPN設定ファイル格納ディレクトリへコピー cp pki/dh.pem /etc/openvpn/ |
(3)証明書廃止リスト作成
将来的にクライアント証明書を廃止できるようにするため、証明書廃止リストを作成します。
ダミーのクライアント証明書をいったん作成&廃止することにより証明書廃止リストを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# ダミーのクライアント証明書作成 ./easyrsa build-client-full dmy nopass # CA秘密鍵のパスフレーズを応答 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: # ダミーのクライアント証明書廃止 ./easyrsa revoke dmy Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes ←yes応答 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: ←CA秘密鍵のパスフレーズを応答 #証明書廃止リストの期限延長 cp vars.example vars sed -i 's/^#set_var EASYRSA_CRL_DAYS 180/set_var EASYRSA_CRL_DAYS 3650/' vars # 証明書廃止リストを作成 ./easyrsa gen-crl Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: ←CA秘密鍵のパスフレーズを応答 # 証明書廃止リストをOpenVPN設定ファイル格納ディレクトリへコピー cp /etc/openvpn/easyrsa3/pki/crl.pem /etc/openvpn/ # 証明書廃止リストへ参照権限付加 chmod o+r /etc/openvpn/crl.pem |
3.OpenVPN設定
(1)TLS認証鍵作成
1 2 |
#OpenVPN設定ファイル格納ディレクトリへ作成 openvpn --genkey --secret /etc/openvpn/ta.key |
(2)OpenVPN設定ファイル作成
OpenVPN設定ファイルをサンプルよりコピーし以下の指定箇所を修正又は追記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/ #OpenVPN設定ファイル編集 vi /etc/openvpn/server.conf dev tun #VPNインタフェースとしてTUNを指定(デフォルト) cert gtrt7com.crt #(サーバー証明書の名前を変更した場合:通常はserver.crt) key gtrt7com.key #(サーバー証明書の名前を変更した場合:通常はserver.key) dh dh.pem #DHパラメータファイル名を指定 server 10.8.0.0 255.255.255.0 #VPNクライアント割当てアドレス範囲として10.8.0.0/24を指定(デフォルト) ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" push "route 192.168.1.0 255.255.255.0" #追加(LAN(例:192.168.1.0/24)へのルートをVPNサーバー経由にする) #VPNサーバ経由のインターネット接続の設定 push "redirect-gateway def1 bypass-dhcp" #コメントアウト解除(VPN ClientのすべてのトラフィックをVPNサーバー経由にする) push "dhcp-option DNS 192.168.XXX.XXX" #コメントアウト解除(VPN接続先のDNSサーバを指定する) tls-auth ta.key 0 # This file is secret 行頭の;を削除してコメント解除(TLS認証有効化) cipher AES-256-CBC #暗号化方式を指定 auth SHA512 #パケット認証の暗号方式を指定 comp-lzo #転送データのlzo圧縮を有効化 user nobody #行頭の;を削除(OpenVPN実行権限を下げる) group nobody #行頭の;を削除(OpenVPN実行権限を下げる) status /var/log/openvpn-status.log #行頭の;を削除(ステータスログを/var/log/openvpn-status.logに記録する) log-append /var/log/openvpn.log #行頭の;を削除(ログを/var/log/openvpn.logに記録する) crl-verify crl.pem #最終行へ追加(証明書廃止リストの有効化) |
4.ネットワーク設定
(1)ポート転送の有効化
1 2 3 |
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf #再起動後も有効にする /sbin/sysctl -p |
(2)Firewalldの設定(tun設定)
OpenVPN用のFirewalld設定はネット上にほとんど有用な情報はみあたらなかったです。iptables設定は「CentOSで自宅サーバ」を発信元にしてたくさん出てくるのですが。
仕方がないので試行錯誤とFEDORAマニュアルを参考にして以下の通りに設定しました。なんとかこれでtun設定で動いているようです。VPNサーバをゲートウェイとして自宅内LAN上の他のサーバにもアクセスできるように設定しました。
1 2 3 4 5 6 7 8 9 |
# openvpnサービスを有効化(UDPの場合) firewall-cmd --add-service openvpn firewall-cmd --permanent --add-service openvpn # IPマスカレード設定を追加する firewall-cmd --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE #VPNクライアントからLAN内の全アクセスを許可 firewall-cmd --permanent --zone=trusted --add-interface=tun+ firewall-cmd --zone=trusted --add-interface=tun+ |
設定参考:FEDORA OPENVPN マニュアル
5.ログローテーション設定
ログロテーションファイルを用意し、ログが一定期間で切り捨てられるようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#OpenVPNログローテーション設定ファイル新規作成 vi /etc/logrotate.d/openvpn /var/log/openvpn-status.log { weekly delaycompress compress missingok notifempty } /var/log/openvpn.log { weekly delaycompress compress missingok notifempty sharedscripts postrotate systemctl restart openvpn 2>&1 > /dev/null || true endscript } |
6.Clientの設定
(1)Client証明書作成
クライアント名client1※のクライアント証明書・秘密鍵(パスフレーズ認証なし)作成します。
1 2 3 |
# cd /etc/openvpn/easyrsa3/ # ./easyrsa build-client-full client1(clhsv701) nopass Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: #CA秘密鍵のパスフレーズを応答 |
(2)クライアントのセットアップ
OPENVPNClientのインストーラをこのURLからダウンロードしセットアップします。
ダウンロード後に以下の手順で設定ファイルをセットアップします(windows前提)。
①クライアント設定ファイルの編集
設定ファイルサンプル(C:\Program Files\OpenVPN\sample-config\client.ovpn)を適当なディレクトリにコピーし下記の設定を編集後、設定ファイル格納ディレクトリ(C:\Program Files\OpenVPN\config)に移動します。
1 2 3 4 5 6 7 8 |
remote hogehoge.com 1194 #VPNサーバー名を指定 cert client1.crt #クライアント証明書ファイル名を指定 key client1.key #クライアント秘密鍵ファイル名を指定 remote-cert-tls server #デフォルトで有("Man-in-the-Middle"攻撃対策) tls-auth ta.key 1 #行頭の;を削除してコメント解除(TLS認証有効化) cipher AES-256-CBC #サーバで設定した暗号化方式に合わせる auth SHA512 #サーバで設定したパケット認証暗号方式に合わせる comp-lzo #サーバ設定に合わせる |
②認証ファイルコピー
サーバに存在する以下の4ファイルをconfigファイルディレクトリ(C:\Program Files\OpenVPN\config)にコピーします。
・CA証明書(/etc/openvpn/ca.crt)
・クライアント証明書(/etc/openvpn/easyrsa3/pki/issued/client1.crt)
・クライアント秘密鍵(/etc/openvpn/easyrsa3/pki/private/client1.key)
・TLS認証鍵(/etc/openvpn/ta.key)
7.OpenVPN起動設定
1 2 3 4 |
#起動 systemctl start openvpn #自動起動設定 systemctl enable openvpn |
8.sambaのIP制限解除
samba等でアクセス可能なIPを制限している場合、VPNクライアントのサブネットを追加する必要があります。
1 2 3 4 5 |
# Samba設定ファイル編集 vi /etc/samba/smb.conf hosts allow = 192.168.1. 127. 10.8.0. ← アクセス許可アドレスにVPNを追加 # Samba再起動し設定を反映 # systemctl restart smb |
9.ログファイルエラーメッセージ対応
こちらの情報は別記事としてまとめました。
10.参考にさせて頂いたサイト
ありがとうございます。