2021 May 05.
出典 Arch Linux で OpenVPN サーバをセットアップ - Linearstar Blog
認証局が署名した証明書ファイルca.crtの作成と配置
# cd /etc/easy-rsa # easyrsa build-ca # cp pki/ca.crt /etc/openvpn/server/
サーバ証明書の作成
# cd /etc/easy-rsa # easyrsa gen-req SERVERNAME nopass ## SERVERNAME部分は任意の文字列 (作成されたファイルの確認) # ls /etc/easy-rsa/pki/reqs/SERVERNAME.req # ls /etc/easy-rsa/pki/private/SERVERNAME.key
サーバー証明書への署名
# cd /etc/easy-rsa # easyrsa sign-req server SERVERNAME (作成されたサーバー証明書ファイルの確認) # ls /etc/easy-rsa/pki/issued/SERVERNAME.crt
作成されたサーバー証明書秘密鍵とサーバー証明書を配置
# cp /etc/easy-rsa/pki/private/SERVERNAME.key /etc/openvpn/server/ # cp /etc/easy-rsa/pki/issued/SERVERNAME.crt /etc/openvpn/server/
dh.pemとTLS認証鍵ta.keyを作成
dh.pem:セッションの共通鍵を安全に生成するため、暗号鍵を安全に転送するために使用されるDiffie-Hellman鍵交換ファイル
# cd /etc/openvpn/server # openssl dhparam -out dh.pem 2048 # openvpn --genkey secret ta.key (旧 # openvpn --genkey --secret ta.key)
OpenVPN設定ファイル作成
サンプルファイルをコピー
# cp /usr/share/openvpn/examples/server.conf /etc/openvpn/server/server.conf
/etc/openvpn/server/server.confを編集
(失効クライアント証明書リストcrl.pemは設定せず)
port NNNN ## port 1194 が標準。 # TCP or UDP server? ;proto tcp proto udp # network address for OpenVPN client server 10.8.0.0 255.255.255.0 # encryption cipher AES-256-CBC auth SHA512 # For compression compatible with older clients use comp-lzo # If you enable it here, you must also # enable it in the client config file. comp-lzo # dhcp configuration push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8"
/etc/openvpn/server/server.conf
port NNNN ## port 1194 が標準。 proto udp dev tun ca ca.crt cert SERVERNAME.crt # Change to YOUR FILE NAME key SERVERNAME.key # Change to YOUR FILE NAME. This file should be kept secret dh dh.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC data-ciphers AES-256-CBC # 後述のエラーにより後から追記した auth SHA512 comp-lzo persist-key persist-tun status openvpn-status.log verb 3 explicit-exit-notify 1
ファイアウォール設定
IPフォワーディング、IPマスカレードの有効化はsystemd-networkdではなくufw設定ファイルにて行う
# ufw enable # ufw allow 1194/udp ## /etc/openvpn/server.confに記述したポート番号 # ufw reload
IPフォワーディング設定
/etc/default/ufwを編集
(DEFAULT_FORWARD_POLICYをDROPからACCEPTに変更する) - DEFAULT_FORWARD_POLICY="DROP" + DEFAULT_FORWARD_POLICY="ACCEPT"
IPフォワーディングを有効化
/etc/ufw/sysctl.confを編集
(net/ipv4/ip_forward=1の一行をアンコメントする) #net/ipv4/ip_forward=1 net/ipv4/ip_forward=1 旧書式 (net.ipv4.ip_forward=1の一行をアンコメントする) # net.ipv4.ip_forward=1 net.ipv4.ip_forward=1
IPマスカレード有効化
ifconfigでネットワークポート名を確認する( enp0s7 とか)
/etc/ufw/before.rulesを編集
(一番下の行にCOMMITと書かれているはずなので、この下に以下を追加する) COMMIT (このCOMMITは元々書かれているもの。削除しない) # START OPENVPN RULES *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/24 -o enp0s7 -j MASQUERADE COMMIT # END OPENVPN RULES
ufw再読み込み
# ufw reload
ファイル属性を下記に変更する。
# ls -l /etc/openvpn/server/ -r-------- 1 openvpn network 1233 5月 4 23:53 ca.crt -r-------- 1 openvpn network 424 5月 4 23:26 dh.pem -rw------- 1 openvpn network 0 5月 5 09:12 ipp.txt -rw------- 1 openvpn network 526 5月 5 09:12 openvpn-status.log -r-------- 1 openvpn network 4699 5月 4 23:23 SERVERNAME.crt -r-------- 1 openvpn network 1704 5月 4 23:22 SERVERNAME.key -rw------- 1 openvpn network 10911 5月 4 23:50 server.conf -r-------- 1 openvpn network 636 5月 4 23:27 ta.key
OpenVPNの一時的起動、エラー出力確認、設定修正
# openvpn /etc/openvpn/server/server.conf
設定へのチェック状況が画面出力される。
無事起動され、
Initialization Sequence Completed
と表示されたら、Ctrl+cでOpenVPNを停止する。
画面出力に従って設定を修正する。
/etc/openvpn/server/server.confの修正
openvpn /etc/openvpn/server/server.confで下記が画面出力された。
DEPRECATED OPTION: --cipher set to 'AES-256-CBC' but missing in --data-ciphers (AES-256-GCM:AES-128-GCM). Future OpenVPN version will ignore --cipher for cipher negotiations. Add 'AES-256-CBC' to --data-ciphers or change --cipher 'AES-256-CBC' to --data-ciphers-fallback 'AES-256-CBC' to silence this warning.
/etc/openvpn/server/server.confに"data-ciphers AES-256-CBC"を追加
参考ページ OpenVPN 2.5 のサイファの互換性 | OpenVPN.JP
cipher AES-256-CBC data-ciphers AES-256-CBC auth SHA512
クライアント用設定
クライアント用秘密鍵の生成
# cd /etc/easy-rsa # easyrsa build-client-full CLIENTNAME nopass Using SSL: openssl OpenSSL 1.1.1k 25 Mar 2021 Generating a RSA private key ..............................................................+++++ .................................+++++ writing new private key to '/etc/easy-rsa/pki/easy-rsa-3988.y4aJh1/tmp.T15VkU' ----- Using configuration from /etc/easy-rsa/pki/easy-rsa-3988.y4aJh1/tmp.9kh5CA Enter pass phrase for /etc/easy-rsa/pki/private/ca.key: PASS-PHRASE-OF-ca.key-IN-SERVER Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'CLIENTNAME' Certificate is to be certified until Aug 8 04:47:20 2023 GMT (825 days) Write out database with 1 new entries Data Base Updated (生成されたファイル確認) # find ./ -name '*CLIENTNAME*' (クライアントからサーバー接続にパスワードを要する設定にするならば) # easyrsa build-client-full CLIENTNAME
クライアント内に配置するファイルをSSH通信できる一般ユーザーのディレクトリ(/home/USER/TMP/OVPNCLIENT)にコピーし、属性を設定する
$ mkdir ~/TMP/OVPNCLIENT $ cd ~/TMP/OVPNCLIENT $ sudo cp /etc/openvpn/server/ca.crt ./ $ sudo cp /etc/openvpn/server/ta.key ./ $ sudo cp /etc/easy-rsa/pki/issued/CLIENTNAME.crt ./ $ sudo cp /etc/easy-rsa/pki/private/CLIENTNAME.key ./ $ sudo chown USER:USER ca.crt ta.key CLIENTNAME.crt CLIENTNAME.key
~/TMP/OVPNCLIENT/内の4ファイルをクライアント内の所定の場所にコピーする
クライアント内に配置する設定ファイルを作成する
VPNCLIENT.ovpn(拡張子は必ず .ovpn とする)
client dev tun proto udp remote YOUR.GLOBAL.ADDRESS.HERE 1194 resolv-retry infinite nobind tls-auth ta.key 1 persist-key persist-tun cipher AES-256-CBC data-ciphers AES-256-CBC auth SHA512 ca ca.crt cert CLIENTNAME.crt key CLIENTNAME.key comp-lzo verb 3
- persist-key, persist-tun, comp-lzo, verbはサーバー側と同じにする。サーバー側に設定してあればこちらにも入力し、設定していない場合は外す。
- remoteのポート番号はサーバー側と同じにする。
YOUR.GLOBAL.ADDRESS.HEREにはサーバーの属するネットワークのグローバルアドレスを指定。
CLIENTNAME.crt、CLIENTNAME.keyにはクライアントの証明書ファイル名・鍵ファイル名を指定。
VPNCLIENT.ovpnをクライアント内に配置する
クライアントのソフトに従って設定する
クライアントからの接続に成功したら、不要なファイルを削除する
$ rm -rf ~/TMP/OVPNCLIENT