環境
- OpenVPN サーバ
- Raspberry pi4 @ pivpnで設定済み
- OpenVPN クライアント
- VPSサービス上に構築
- OSはCentOS8
クライアント側からサーバへの接続
- OpenVPNでクライアント側から接続する場合、systemdで管理されている模様
- pivpnでユーザを追加した際に生成された
*.ovpn
ファイルを持ってきて以下のPATHに設置
/etc/openvpn/client/<ユーザ名>.conf
- systemctlコマンドで以下を実行
systemctl start openvpn-client@<ユーザ名>
これでスマートに接続が開始できる、もちろん enable
すれば自動的に接続を開始することも可能
OpenVPN自動接続時のあれこれ
毎回入力する場合
-
*.ovpn
ファイルをそのまま持ってくるだけだと、パスフレースを入れる必要がある。 -
systemctl start
するとsystemd-tty-ask-password-agent
でパスワード入れるようプロンプトにブロードキャストメッセージが通知される。 - 以下のコマンドを入れると、systemdにわたす値を入力することができる(systemdのttyを一時的に奪える)ので、下記コマンド実行後実行する。
systemd-tty-ask-password-agent --query
パスフレーズを入れる場合
- ぐぐると、OpenVPNファイルに
auth-user-pass
という設定を入れた後に、 ユーザ名、パスワードを1行ずつ記載したファイルをconf
ファイルと同じ場所に設置するといいとでるがこれではうまく行かない。 - systemdで起動する際にユーザ名は指定しているので正しくは
askpass
という設定を入れる必要がある
askpass <パスワードを1行で書いたファイル名>
- ファイルパスが省略された場合は、設定ファイルと同じディレクトリを探すようだが、フルパスで指定することも可能
- ファイルのパーミッションは
400
にしておかないと怒られる(繋がりはするぽい)
自動再接続
-
systemd
のunitファイル にはもともとRestart
という設定がありそれを利用することで簡単に実現できる - openvpn-clientのunitファイルは以下にある
/usr/lib/systemd/system/openvpn-client@.service
[Service]
ディレクティブにこんなカンジで設定を追加した。
Restart=on-failure
RestartSec=30
StartLimitInterval=120
StartLimitBurst=3
項目 | |
---|---|
Restart | どのタイミングで再起動するか |
RestartSec | 落ちて再起動までの待ち時間(秒) |
StartLimitInterval | 再起動を試みて失敗と判定する時間(秒) |
StartLimitBurst | 再起動を試みて失敗と判定する回数 |
要約すると failuer の時に 30秒 待って再起動を試みるが |
|
120秒間 で 3回 失敗を繰り返したら再起動失敗となる。 |
vpn越しにcatしたり、何かのタイミングでttyがフリーズする
- 通常のsshでサーバに繋いだら問題は起きないが、VPN越しだとなんかプロンプトが固まる
- 私が遭遇したパターン例
-
cat
したらフリーズ -
vi
したらフリーズ - なにかを起動しようとしたらフリーズ
-
- 原因はOpenVPN(tun0)のMSSの値がよろしくない ←ハマったので太字
- tun0 に割り当てる適切なMSSの値を設定ファイルに入れると良い
mssfix <適切なMSSの値>