2024 Sep. 24.
2024 Aug. 31.
2024 Feb. 24.
2021 May 05.
2021 Apr. 11.
2021 Mar. 28.
2021 Jan. 31.
2020 Nov. 06.
2020 Oct. 02.
2020 Sep. 22.
2020 Mar. 29.
2019 Oct. 21.
2019 Apr. 27.
2018 Oct. 08.
2018 Sep. 02.
参考元 https://qiita.com/noraworld/items/2fe6be489e1d93c748b8
留意点
・設定中に入力するパスフレーズは将来必要となるので控えておく。
・複数サーバー設置などで各サーバーのポートを変更した場合、サーバー設定ファイルとクライアント設定ファイルのポート番号を間違えないようにする。
・設定ファイル内の個別ファイル名は各サーバー、各クライアントでの個別ファイル名に変更する。
OpenVPNプログラムのインストール
(Ubuntu) $ sudo apt update && sudo apt install openvpn git (Manjaro Linux / Arch Linux) openvpn、gitパッケージをインストールする $ mkdir ~/YOUR-WORK-DIR ~/apps/openvpn/server とした。 $ cd ~/YOUR-WORK-DIR CA証明書(認証局証明書)の再作成に備え、~/YOUR-WORK-DIRは恒久的なディレクトリとする。 easy-rsaをインストールする。 $ git clone https://github.com/OpenVPN/easy-rsa.git $ cd easy-rsa easy-rsaのtag(バージョン)リストを出力する $ git tag 出力されたリストから最新版を選ぶ。 ここでは v3.1.7 とする。 次のコマンドで、refs/tags/ に続いて v3.1.7 を記述し、-bオプションに適当なブランチ名を付けことで、v3.1.7ブランチから-bオプションに付けた名前で新しいブランチを作成する。 $ git checkout refs/tags/v3.1.7 -b my_v3.1.7
初期設定
$ cd ~/YOUR-WORK-DIR/easy-rsa/easyrsa3 $ ./easyrsa init-pki
CA証明書生成
OpenVPNインストール中に設定するパスフレーズはすべて同じにしておいた方が楽。
パスフレーズは将来必要となるので保存しておく。
CA名称は "ホスト名+OS名" にした。
例:pc1ubuntu
CN(Common Name)には対象となるドメイン・ホスト+-Easy-RSA_CAを指定する。
例:EXAMPLE.COM_pc1ubuntu-Easy-RSA_CA
$ cd ~/YOUR-WORK-DIR/easy-rsa/easyrsa3 $ ./easyrsa build-ca No Easy-RSA 'vars' configuration file exists! Using SSL: * openssl OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022) Enter New CA Key Passphrase: ここに任意のパスフレーズを入力する。 パスフレーズは保存しておく。 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]:EXAMPLE.COM_pc1ubuntu-Easy-RSA_CA(任意の識別名) Notice ------ CA creation complete. Your new CA certificate is at: * ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/ca.crt
$ sudo cp pki/ca.crt /etc/openvpn/
サーバ証明書生成
$ cd ~/YOUR-WORK-DIR/easy-rsa/easyrsa3 $ ./easyrsa build-server-full server nopass Notice ------ Private-Key and Public-Certificate-Request files created. Your files are: * req: ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/reqs/server.req * key: ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/private/server.key You are about to sign the following certificate: Request subject, to be signed as a server certificate for '825' days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes ユーザーが"yes"を入力する Using configuration from ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/openssl-easyrsa.cnf Enter pass phrase for ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/private/ca.key: build-caで決めたパスフレーズを入力する Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'server' Certificate is to be certified until May 23 06:40:01 2026 GMT (825 days) Write out database with 1 new entries Data Base Updated Notice ------ Certificate created at: * ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/issued/server.crt Notice ------ Inline file created: * ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/inline/server.inline
$ sudo cp pki/issued/server.crt /etc/openvpn/ $ sudo cp pki/private/server.key /etc/openvpn/
DH鍵生成
$ cd ~/YOUR-WORK-DIR/easy-rsa/easyrsa3 $ ./easyrsa gen-dh $ sudo cp pki/dh.pem /etc/openvpn/
TLS鍵生成
(2021 May 04時点のコマンド) $ openvpn --genkey secret ./pki/ta.key (古いコマンド) +++ ここから +++ ($ openvpn --genkey --secret ./pki/ta.key) +++ ここまで +++
$ sudo cp ./pki/ta.key /etc/openvpn/
失効クライアント証明書リスト生成
$ cd ~/YOUR-WORK-DIR/easy-rsa/easyrsa3 $ ./easyrsa gen-crl No Easy-RSA 'vars' configuration file exists! Using SSL: * openssl OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022) Using configuration from ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/openssl-easyrsa.cnf Enter pass phrase for ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/private/ca.key: build-caで決めたパスフレーズを入力する Notice ------ An updated CRL has been created: * ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/crl.pem
$ sudo cp pki/crl.pem /etc/openvpn/ $ sudo chmod o+r /etc/openvpn/crl.pem
サーバー設定ファイル記述
$ sudo touch /etc/openvpn/server.conf
/etc/openvpn/server.confを編集
port 1194 ## LAN内に複数のopenvpnサーバーを置くなら変更する proto udp dev tun cipher AES-256-CBC auth SHA512 ca ca.crt cert server.crt key server.key dh dh.pem crl-verify crl.pem tls-auth ta.key 0 ifconfig-pool-persist ipp.txt server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "route 10.8.0.0 255.255.255.0" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" client-to-client keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun status /var/log/openvpn-status.log log /var/log/openvpn.log log-append /var/log/openvpn.log verb 3
ファイアウォール設定
$ sudo ufw enable $ sudo ufw allow 1194/udp ## /etc/openvpn/server.confに記述したポート番号 $ sudo ufw reload
IPフォワーディング設定
IPマスカレード有効化
"ip a"コマンドでネットワークポート名を確認する( 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 # "-o enp0s7" はシステムのネットワークポート名に合わせる。 COMMIT # END OPENVPN RULES
すべてのネットワークインターフェースについて設定する場合
(サーバー経由での外部接続ができないことがあったのでやめた方がよい)
COMMIT (このCOMMITは元々書かれているもの。削除しない) # START OPENVPN RULES *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/24 -o !lo -j MASQUERADE COMMIT # END OPENVPN RULES
ufw再読み込み
$ sudo ufw reload
Logローテーション設定
参照元 https://gtrt7.com/blog/linux/ubuntu-openvpn
OpenVPNログローテーション設定ファイル /etc/logrotate.d/openvpn を作成する。
/var/log/openvpn-status.log { weekly rotate 7 delaycompress compress missingok notifempty } /var/log/openvpn.log { weekly rotate 7 delaycompress compress missingok notifempty sharedscripts postrotate systemctl restart openvpn@server 2>&1 > /dev/null || true endscript }
OpenVPN起動
$ sudo systemctl start openvpn@server.service // systemctl start openvpn.service では起動できない
起動確認
$ systemctl status openvpn@server.service
Active: active (running) の表示を確認する
OpenVPN自動起動設定
$ sudo systemctl disable openvpn $ sudo systemctl disable openvpn.service $ sudo systemctl enable openvpn@server.service
起動設定確認
$ systemctl is-enabled openvpn openvpn.service openvpn@server.service openvpn@server
OpenVPNを使ってLAN外からのアクセスを受け付けるアプリのポートを10.8.0.0/24に対して開放する
$ sudo ufw enable $ sudo ufw allow proto tcp from 10.8.0.0/24 to any port PORTNUM $ sudo ufw allow proto udp from 10.8.0.0/24 to any port PORTNUM $ sudo ufw reload
EPGStationの例
$ sudo ufw enable $ sudo ufw allow proto tcp from 10.8.0.0/24 to any port 8888 $ sudo ufw allow proto udp from 10.8.0.0/24 to any port 8888 $ sudo ufw reload
sambaへのアクセス許可設定
次の2つのサイトに書かれた設定を行う。
sambaサーバーをルーティング方式openVPNで利用する時のsamba設定 - rokkonet
sambaサーバーをルーティング方式openVPNで利用する時のポート開放 - rokkonet
クライアント用秘密鍵の生成
$ cd ~/YOUR-WORK-DIR/easy-rsa/easyrsa3
次のクライアント秘密鍵生成時のパスワード有無は、パスワード有りにしても、クライアント側ソフトに、一度設定すれば以後は入力不要の機能があるはずなので、どちらでもかまわない。
(接続時パスワード無し)
$ ./easyrsa build-client-full CLIENTHOGE nopass (CLIENTHOGEは "サーバー名+サーバーOS+クライアント端末名" とした) Notice ------ Private-Key and Public-Certificate-Request files created. Your files are: * req: /home/ryuichi/work/openvpn/server/easy-rsa/easyrsa3/pki/reqs/galaxy_a22.req * key: /home/ryuichi/work/openvpn/server/easy-rsa/easyrsa3/pki/private/galaxy_a22.key You are about to sign the following certificate: Request subject, to be signed as a client certificate for '825' days: subject= commonName = CLIENTHOGE Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes ユーザーが"yes"を入力する Using configuration from /home/ryuichi/work/openvpn/server/easy-rsa/easyrsa3/pki/openssl-easyrsa.cnf Enter pass phrase for /home/ryuichi/work/openvpn/server/easy-rsa/easyrsa3/pki/private/ca.key: build-caで決めたパスフレーズを入力する
(接続時パスワード有り)
- ::: ここから :::::
$ ./easyrsa build-client-full CLIENTHOGE
- ::: ここまで :::::
次の作業を行う
$ mkdir ~/YOUR-WORK-DIR/CLIENT-FILE-DIR ~/apps/openvpn/client/CLIENTDEVICE とした $ sudo cp /etc/openvpn/ca.crt ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/ $ cd ~/YOUR-WORK-DIR/easy-rsa/easyrsa3 $ cp pki/issued/CLIENTHOGE.crt ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/ $ cp pki/private/CLIENTHOGE.key ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/ $ sudo chown USER:USER ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/ca.crt $ chown USER:USER ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/CLIENTHOGE.crt $ chown USER:USER ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/CLIENTHOGE.key
USER: VPNサーバに現在ログインしているユーザのユーザ名
接続するクライアントに鍵ファイルをダウンロード
$ scp ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/ca.crt CLIENT/ $ scp ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/CLIENTHOGE.crt CLIENT/ $ scp ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/CLIENTHOGE.key CLIENT/ $ scp ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/ta.key CLIENT/
クライアントに置くVPNCLIENT.ovpn を作る(ファイル名は任意だが、拡張子は .ovpn )
client dev tun proto udp remote YOUR.GLOBAL.ADDRESS.HERE PORTNUM ## サーバーグローバルドメイン名、ポート番号 resolv-retry infinite nobind tls-auth ta.key 1 persist-key persist-tun cipher AES-256-CBC auth SHA512 ca ca.crt cert CLIENTHOGE.crt ## 適切なファイル名に変更する key CLIENTHOGE.key ## 適切なファイル名に変更する comp-lzo verb 3
# persist-key, persist-tun, comp-lzo, verb はサーバ側と同じにする。サーバ側に設定してあればこちらにも入力し、設定していない場合は外す。
VPNCLIENT.ovpn をクライアントにコピー
$ scp VPNCLIENT.ovpn CLIENT/
OpenVPNサーバー、LAN内ホスト、 LAN外OpenVPNクライアントのIPアドレス、通信関係
警告・エラーメッセージ対応
WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
This is nothing to worry about.
https://support.hidemyass.com/hc/en-us/articles/202720436-Auth-nocache-Warning-in-OpenVPN-connection-log
「ta.keyが無い」 と言われたら、
クライアントの認証/暗号設定で、TLS Auth/TLS Encryption Fileにクライアント内のta.keyファイルを指定する。
WARNING: cipher local='cipher BF-CBC' remote='cipher AES-256-CBC'
クライアントの暗号化方式を AES-256-CBS に指定する。
WARNING: No server certificate verification method has been enabled.
クライアント設定で「TLSサーバー証明書を要求する」をオンにする。
VPN経由でアクセスするLAN内の各種サーバーの設定
http://rokkonet.blogspot.com/2018/05/openvpn.html