firewallへTCP 1194の通信許可を設定
[root@localhost ~]# firewall-cmd --add-port=1194/tcp --zone=external --permanent |
[root@localhost ~]# firewall-cmd --reload |
OpenVPNとeasy-rsaをepelリポジトリからインストールします。
[root@localhost ~]# yum -y install openssl-devel lzo-devel pam-devel ← OpenVPNインストールに必要なパッケージをインストール |
[root@localhost ~]# wget http://swupdate.openvpn.org/community/releases/openvpn-2.4.6.tar.gz |
※最新版のURLはダウンロードページ |
[root@localhost ~]# rpmbuild -tb --clean openvpn-2.4.6.tar.gz ← OpenVPNのRPMパッケージ生成 |
[root@localhost ~]# yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.4.6-1.x86_64.rpm ← 生成したOpenVPNのRPMパッケージをインストール |
[root@localhost ~]# rm -f ~/rpmbuild/RPMS/x86_64/openvpn-* ← 生成したOpenVPNのRPMパッケージを削除 |
[root@localhost ~]# rm -f openvpn-2.4.6.tar.gz ← ダウンロードしたファイルを削除 |
[root@localhost ~]# wget https://github.com/OpenVPN/easy-rsa/archive/master.zip ← easy-rsaダウンロード |
[root@localhost ~]# unzip master.zip ← easy-rsa解凍 |
[root@localhost ~]# cp -r easy-rsa-master/easyrsa3/* /etc/openvpn/ ← easyrsa3を所定のディレクトリへコピー |
[root@localhost ~]# rm -rf easy-rsa-master/ ← 解凍先ディレクトリを削除 |
[root@localhost ~]# rm -f master.zip ← ダウンロードしたファイルを削除 |
バージョンアップで設定ファイルや証明書が変更されるのを防ぐために新しいディレクトリを作り、そこに設定ファイルなどを保存する運用を行う。
[root@localhost ~]# cd /etc/openvpn ←ディレクトリ移動 |
[root@localhost openvpn]# ./easyrsa init-pki ←初期化 |
[root@localhost openvpn]# ./easyrsa build-ca ← CA証明書・秘密鍵作成 |
Generating a 2048 bit RSA private key .......................................+++ .............................................................................+++ writing new private key to '/etc/openvpn/pki/private/ca.key.UzE5bd0SCu' 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]: ←VPN接続時のホスト名(FQDN)を入力(例:hogehoge.com) CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /etc/openvpn/pki/ca.crt |
[root@localhost openvpn]# ./easyrsa gen-dh |
時間が掛かる(2分~3分)ので、しばし待機 |
DH parameters of size 2048 created at /etc/openvpn/pki/dh.pem |
DHパラメータ(dh.pem)が作成されます。
tls-authを設定しておくと、VPNセッション開始時のパケットをHMACで認証し、認可されないパケットは破棄されるため、DDoS攻撃を防ぐことができるみたい。オープンなVPNサーバーを建てる時には設定しておくことがオススメらしい。ta.keyは静的共有鍵なので、安全な方法で配送される必要がある。
[root@localhost openvpn]# openvpn --genkey --secret ./ta.key |
VPNサーバー「hogehoge.com」用の証明書と秘密鍵をパスフレーズ無しで作成します。
[root@localhost openvpn]# ./easyrsa build-server-full hogehoge.com nopass |
Generating a 2048 bit RSA private key ....+++ .......................................................+++ writing new private key to '/etc/openvpn/easy-rsa/pki/private/hogehoge.com.key.O3l2ARzsse' ----- Using configuration from ./openssl-1.0.cnf Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: ←CA秘密鍵(ca.key)のパスフレーズを入力 Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'hogehoge.com' Certificate is to be certified until Mar 28 17:05:59 2028 GMT (3650 days) Write out database with 1 new entries Data Base Updated |
サーバー用の証明書(hogehoge.com.crt)および秘密鍵(hogehoge.com.key)が作成されます
クライアント「client01」用の証明書と秘密鍵をパスフレーズ無しで作成します。
[root@localhost openvpn]# ./easyrsa build-client-full client01 nopass Generating a 2048 bit RSA private key ................+++ ..............................................................................................................+++ writing new private key to '/etc/openvpn/easy-rsa/pki/private/client01.key.MY2YPyBgBr' ----- Using configuration from ./openssl-1.0.cnf Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: ←CA秘密鍵(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 Mar 28 17:17:18 2028 GMT (3650 days) Write out database with 1 new entries Data Base Updated |
クライアント用の証明書(client01.crt)および秘密鍵(client01.key)が作成されます
証明書のコピー
[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 . |
サーバーのコンフィグファイルのひな型をコピー
[root@localhost ~]# cp /usr/share/doc/openvpn*/sample/sample-config-files/server.conf /etc/openvpn/server.conf |
コンフィグファイル(server.conf)の編集
port 1194 ←使用するポート番号 proto udp ←使用するプロトコル dev tap0 ←TAP/TUNデバイス指定 (VPNのtapとtunの違い) ca ca.crt ←ca証明書 cert hogehoge.com.crt ←サーバ証明書 key hogehoge.com.key # This file should be kept secret ←秘密鍵の指定 dh dh.pem ←乱数(DH)パラメータの指定 ifconfig-pool-persist ipp.txt ←配布用IPアドレスのテーブル(固定IPを使用する場合、ipp.txtを編集) server-bridge xxx.xxx.xxx.xxx 255.255.255.0 xxx.xxx.xxx.201 xxx.xxx.xxx.210 ←コメント解除して変更 [ブリッジに割り当てるIPアドレス・ネットマスク・クライアントに割り当てるIPアドレスの範囲 client-to-client ←クライアント間通信の許可 keepalive 10 120 ←キープアライブ設定(10秒ごとに生存確認、120秒無応答でダウン) tls-auth ta.key 0 # This file is secret ←TLS認証キーの指定 cipher AES-256-CBC ←キーの強度を指定 comp-lzo ←圧縮の有効可 user nobody ←ユーザ権限の設定 group nobody persist-key persist-tun status /var/log/openvpn-status.log ←ステータスログ log /var/log/openvpn.log ←稼働ログ log-append /var/log/openvpn.log verb 3 ←ログレベル ;explicit-exit-notify 1 ←tcpを使う場合はコメントアウトする |
[root@localhost ~]# vi /etc/openvpn/ipp.txt |
client01,xxx.xxx.xxx.xx1 client02,xxx.xxx.xxx.xx2 |
ここで固定指定されていないユーザーについては、サーバー設定ファイルに記載された範囲内で、使用されていないものが順番に使用される。
別ターミナルを起動してログイン後にログを表示させる
[root@localhost ~]# tail -f /var/log/openvpn.log |
設定中のターミナルで起動テストを実行
[root@localhost openvpn]# openvpn server.conf |
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 (省略) Sun Apr 1 03:28:46 2018 Initialization Sequence Completed |
※こんな感じのログが出ればOK
[root@localhost ~]# cp /usr/share/doc/openvpn-2.4.6/sample/sample-scripts/bridge-start /etc/openvpn/bridge-start |
[root@localhost ~]# cp /usr/share/doc/openvpn-2.4.6/sample/sample-scripts/bridge-stop /etc/openvpn/bridge-stop |
[root@localhost ~]# chmod 755 /etc/openvpn/bridge-start /etc/openvpn/bridge-stop |
[root@localhost ~]# vi /etc/openvpn/bridge-start |
#!/bin/sh ################################# # Set up Ethernet bridge on Linux # Requires: bridge-utils ################################# # Define Bridge Interface br=“br0” # Define list of TAP interfaces to be bridged, # for example tap=”tap0 tap1 tap2″. tap=“tap0” # Define physical ethernet interface to be bridged # with TAP interface(s) above. eth=“dummy0” eth_ip=“10.10.10.10” eth_netmask=“255.255.255.0” eth_broadcast=“10.10.10.255” gw=”10.10.10.1″ # デフォゲ抹消対策 for t in $tap; do openvpn -mktun -dev $t done brctl addbr $br brctl addif $br $eth for t in $tap; do brctl addif $br $t done sleep 1 # eth0 リアップ待機処理追加 for t in $tap; do ifconfig $t 0.0.0.0 promisc up done sleep 1 # eth0 リアップ待機処理追加 ifconfig $eth 0.0.0.0 promisc up ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast route add default gw $gw # デフォゲ抹消対策
[root@localhost ~]# vi /etc/openvpn/bridge-stop |
#!/bin/sh #################################### # Tear Down Ethernet bridge on Linux #################################### # Define Bridge Interface br=“br0” # Define list of TAP interfaces to be bridged together tap=“tap0” ifconfig $br down brctl delbr $br for t in $tap; do openvpn -rmtun -dev $t done systemctl restart network # ブリッジダウン後すべてのIPが消される対策
起動は「ブリッジの起動 –> OpenVPNの起動」、停止は「OpenVPNの停止 –> ブリッジの停止」である必要がある。
[root@localhost ~]# vi /etc/init.d/openvpn |
case “$1″ in start) echo -n $”Starting openvpn: ” /etc/openvpn/bridge-start /sbin/modprobe tun >/dev/null 2>&1 echo 1 > /proc/sys/net/ipv4/ip_forward # 転送を有効にする ~略~ stop) ~略~ # Run shutdown script, if defined if [ -f $work/openvpn-shutdown ]; then $work/openvpn-shutdown fi echo 0 > /proc/sys/net/ipv4/ip_forward # 転送を無効にする /etc/openvpn/bridge-stop
[root@localhost ~]# vi /etc/modprobe.d/dummy.conf |
install dummy /sbin/modprobe --ignore-install dummy; /sbin/ip link set name dummy0 dev dummy0 |
[root@localhost ~]# vi /etc/modules-load.d/dummy.conf |
# Load dummy.ko at boot dummy |
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-dummy0 |
NAME=dummy0 DEVICE=dummy0 ONBOOT=yes TYPE=Ethernet NM_CONTROLLED=no |
再起動後、ダミーがあるかどうか確認してください。
[root@localhost ~]# reboot |
[root@localhost ~]# ifconfig dummy0 |
dummy0: flags=195<UP,BROADCAST,RUNNING,NOARP> mtu 1500 inet 10.10.10.1 netmask 255.255.255.0 broadcast 10.10.10.255 ether 00:22:22:ff:ff:ff txqueuelen 0 (Ethernet) |
bridge-utils がインストールされていなければインストールします。
[root@localhost ~]# yum -y install bridge-utils |
[root@localhost ~]# less /proc/sys/net/ipv4/ip_forward |
0 ←「0」の場合は無効/「1」の場合は有効 |
[root@localhost ~]# vi /etc/sysctl.conf |
net.ipv4.ip_forward=1 ←最下行に追記 |
[root@localhost ~]# sysctl -p ←設定反映 |
サービスとして起動
[root@localhost ~]# systemctl start openvpn@server |
サービス状態確認
[root@localhost ~]# systemctl starus openvpn@server |
サービス自動起動
[root@localhost ~]# systemctl enable openvpn@server |