Mac に OpenConnect クライアントを入れる道は三つあり、ディスクに残るものはそれぞれ違います。Homebrew の数式はコンパイル済みバイナリと、ルートと DNS を設定するネットワークスクリプトを導入します。リリース版アーカイブは生成済みのビルドシステム付きのソースコードを与えます。git チェックアウトはビルドシステムなしのソースコードを与えます。間違った方を選ぶと、チュートリアルを始めて数分で configure が見つからないという事態になります。

同じ名前の下にある二つの異なる仕組み

パッケージの道はコマンド一つで、開発ではなく接続が仕事という人にとって正しい既定です。

brew install openconnect

何が導入されるかはコマンドより重要です。クライアントのバイナリに加えて、インターフェース、ルート、リゾルバをプログラムするためにクライアントが呼ぶ vpnc-script も入ります。両者は対で働きます。バイナリが TLS セッションを終端し、生じたインターフェースをスクリプトに渡し、スクリプトがこの OS がネットワークをどう変えたいかを知っている部分です。

この分離が、紛らわしい報告の一連の類型を説明します。接続して成功を報告した後、トラフィックを誤った経路に送るクライアントは、たいていトンネルではなくスクリプトの問題で、数式を再インストールすると直るのはスクリプトも再インストールされるからにすぎません。数式の現在の macOS と CPU アーキテクチャの対応を、それを前提に計画する前に確認してください。シェルを完璧に動かす Mac でも、それ向けにビルドされた現行パッケージがないことがあります。

ソースの道が実際に何をするか

リリース版アーカイブには生成済みのビルドシステムが付いてくるので、おなじみの ./configure が最初からあります。git チェックアウトにはありません。生成物はビルドの産物であり、プロジェクトが保存するものではないからです。チェックアウトの手順に ./autogen.sh が現れ、リリース版アーカイブには現れない理由は、まさにこれだけです。

./autogen.sh
./configure
make
make install

各行はそれぞれ特定のことを行い、どれが失敗したかを知れば当て推量が大きく減ります。autogen の段階は autotools を走らせて configure を作ります。configure の段階はクライアントが必要とするコンパイラ、ライブラリ、ヘッダーを調べ、見つかった内容を反映した makefile を書き出します。make の段階はコンパイルします。install の段階は結果をパスのどこかにコピーします。

その最後の行で、助言はたいてい道を誤ります。インストールはビルドが成功した証拠ではなく、任意のダウンロードフォルダーで高い権限を付けて実行するのは、後で思い出せないファイルを散らかす良い方法です。ライブラリ不足で configure が失敗した場合、役に立つ出力は最初に表示されたエラーであり、ログの最後の二十行ではありません。

セッションとネットワーク設定は別物

この区別が、接続が実際にトラフィックを運ぶかどうかを決めます。TLS セッションを確立するとクライアント側にインターフェースができます。ルート、アドレス、DNS リゾルバを適用するのはネットワークスクリプトを通じて行う第二の段階で、スクリプトなしでバイナリを作ったビルドは半分のクライアントしか持っていません。

同じ分離が、同じクライアントを持つ二台のマシンが違う振る舞いをする理由を説明します。スクリプトはシステムのネットワーク設定を参照し、その設定にはルートを主張した他のすべてが含まれます。分割トンネルがトラフィックを予期しない場所へ送るとき、トンネルは仕事をしており、調べるべきはルーティングの判断です。

ですからデバッグのときは、どの層が失敗したかを問いましょう。決して確立しないセッションはプロトコル、証明書、資格情報です。確立しても何も転送しないセッションはインターフェースとスクリプトです。あるネットワークでは動き別のネットワークでは動かない導入済みクライアントは到達性で、どれだけ再ビルドしても変わりません。

どのバイナリを実行しているかを知る

手作業で入れたビルドとパッケージのバイナリは仲良く共存でき、どちらが動くかは意図ではなくパスで決まります。誰かにバージョン番号を報告する前に確認してください。

which -a openconnect
openconnect --version
brew list --versions openconnect

最初のコマンドはシェルが見えるすべてのコピーを、試す順に並べます。二番目はどれが応答したかを教えます。それが期待と食い違うなら、古い実験のビルドを実行しており、設定を変えても動きません。

クライアントの導入はゲートウェイの承認ではない

動くバイナリは展開を互換にはしません。ゲートウェイのプロトコル、認証フロー、管理対象デバイスの要件を、それを所有する人たちと確認してください。それらはビルドが供給できないポリシーとアプリケーション層の事実です。

プロジェクトのビルド手順は autotools の順序とネットワークスクリプトの要件をより詳しく扱っており、あなたの macOS より古いブログ記事ではなく、これに従うべきです。目的が単に接続することなら、パッケージを取り、スクリプトを残し、コンパイラは関わらせないでください。

関連記事