OpenVPN が起動せず、失敗メッセージは一見正しそうな行を指します:Unrecognized option or missing or extra parameter(s) in office.ovpn:42: ca。証明書は変わっておらず、ファイルはエディターで開け、パスにも異常は見当たりません。パーサーはオプション名に異議を唱えているのではなく、そのオプションにいくつの引数が付いてきたかに異議を唱えています。四つの確認でほぼすべての事例が片付き、コストの低い順に実行する価値があります。

パーサーがオプションを疑う理由

設定行は、どのオプションが受け取るよりも前に、空白と引用符で分割されます。そのため空白を含む値は、引用符で囲まれていなければ複数の引数として届き、その行を持っていたオプションが不一致を報告します。Windows では既定のインストール先が構造上パスの途中に C:\Program Files を含むため、必ずこうなります。この失敗では証明書は決して開かれないので、ファイルの有無を確認しても意味がありません。

報告される行番号は通常正しく、報告されるオプションはその行を消費したものです。名指しされたオプションが、書いた覚えのないものであれば、以前のブロックで失われた引用符が解析をずらしているので、その上の行を読んでください。こうして証明書ブロックが引数の数の責任を負わされるのです。

ca C:\Program Files\OpenVPN\config\office-ca.crt

空白を含むパスはすべて引用符で囲む

値の周りに二重引用符を一組付けるだけで修復は完了しますし、Windows ではスラッシュも受け付けられるため、エスケープが問題になることはありません。パーサーは最初の失敗で止まり、次の失敗は次の再起動で待つだけなので、同じ作業の中でパスのオプションをすべて直してください。通常含まれるのは ca、cert、key、tls-auth、auth-user-pass です。

ca "C:/Program Files/OpenVPN/config/office-ca.crt"
cert "C:/Program Files/OpenVPN/config/office.crt"
key "C:/Program Files/OpenVPN/config/office.key"

ディレクトリ名で検索すれば、ファイルを読むより速くすべての箇所が見つかります。編集する前に実行して、一覧を完全にしてください:

Select-String -Path .\office.ovpn -Pattern 'Program Files'

プロファイルを空白のないパスへ移すのも有効な代替手段ですが、すべてのパスを一緒に移す場合に限り有効です。半分だけ移したプロファイルは別のファイル名で同じエラーを再現し、メッセージがいま作ったパスを指すため気づきにくくなります。どちらか一方の方法を選び、最後までやり切ってください。

証明書より先にモード宣言を復元する

二つ目のよくある原因は、同じ無駄な午後を費やして別のメッセージを出します。クライアントプロファイルは先頭付近でモードを宣言する必要があり、新しいファイルに証明書ブロックだけを貼り付けるとその宣言は簡単に失われます。それがなければ OpenVPN は別の既定値の組でファイルを読み、被害はずっと後にオプション間の衝突やログイン失敗として現れます。欠けた行は確認するのは安く、忘れるのは高くつきます。

client
dev tun
proto udp
remote vpn.example.net 1194

そこにいる間は、一行に一つのディレクティブを守ってください。結合した行は最初の節の引数カウントのエラーをそのまま生み、報告される行がもっともらしく見えるのは、エディターがテキストを折り返した位置で結合が起きたからです。表示された行ではなく、生の行を読んでください。

エンコードの破損はオプション名のように見える

UTF-16 でバイト順マーク付きで保存されたファイルは、最初のオプションをパーサーから隠し、迷い込んだバイトがメッセージ内のオプション名に付着することがあります。ファイルをバイト順マークなしの UTF-8 で保存し、開き直して最初の文字が通常の文字であることを確認してください。エディター、PowerShell のリダイレクト、チャットから貼り付けたテキストは、いずれも確認なしにエンコードを変えます。

Format-Hex .\office.ovpn | Select-Object -First 1

バイト順マークはあらゆるテキストの前に先頭の目印バイトとして現れ、その文字を手で消すのは、エディターが次の保存で書き戻すため負けの一手です。代わりに明示的なエンコードで保存し直してください。改行コードはより寛容ですが、末尾に改行がないファイルは編集後に最後のディレクティブを前のものへ融合させることがあります。

どの確認を最初に、そしてなぜ

エンコードはコマンド一つで済み、ファイルの他のあらゆる読み方を無効にするので、まずそこから始めてください。次に引用符、その次にモード宣言と他の必須ディレクティブ、そしてその後にだけ証明書、鍵、資格情報です。引用符の問題を直すために差し替えた証明書は元から二回の編集だけ離れた新しい故障を残すので、この順序なら各手順を巻き戻せます。順序は個々の確認よりも重要です。

運用者が渡したままの手を付けていないコピーを保管してください。後からの編集で壊れた場合、そのコピーとの差分が引用符、改行、目印バイトのどれが動いたかを示し、エラーを読み直すより速いです。各ディレクティブのオプションの説明は、インストールしたバージョンの OpenVPN のマニュアル にあります。

関連記事