一つ上がり、ゼロ接続中:その strongSwan の行が数えているもの
古い見出しは IKE アソシエーションを数えており、サブネットや子 SA ではありません。まず読み込まれた定義とインストールされた子を確認してください。
Security Associations (1 up, 0 connecting) と表示するステータス行を読むと、動作中のトンネルが一本あるという報告に見えます。二つのサブネットが同時にそこを通ってトラフィックを流しているので、その数字は嘘をついているように見えます。嘘ではなく、IKE アソシエーションを数えており、その一つが複数の子を収容できます。提案やルートに触れる前に、インベントリを読んでください。
見出しとトラフィックが一致しない理由
従来の stroke 出力は合計をセキュリティアソシエーションと呼び、IKE アソシエーションマネージャから導きます。確立した IKE アソシエーションはそれぞれ一つを数え、その下にいくつの CHILD SA があっても変わりません。一つの IKEv2 親は通常複数の子を運び、トラフィックセレクタの組ごとに一つあり、子のネゴシエート済みセレクタは複数のアドレスやプレフィックスを覆えます。したがって設定内のアドレス数と見出しの数字には決まった関係がありません。
最近の出力では古い「up」という表現の代わりに合計を表示することがあり、swanctl 管理のデーモンは従来の stroke 設定ではまったく動きません。表現も数え方も、バージョン間で決めつけないでください。
何かを変える前に三つのインベントリを比べる
まず読み込まれているもの、次にネゴシエート済みのもの、最後に実際にパケットを動かしているものから始めます。これは三つの別の問いで、それぞれに専用のコマンドがあります。
swanctl --list-conns
swanctl --list-sas
一つ目はデーモンが受け入れた接続定義を一覧します。二つ目は確立した IKE アソシエーションを子とともに一覧し、本当の階層はそこに現れます。ファイルにあっても最初の一覧にない定義は読み込まれておらず、イニシエータの再試行をいくら重ねても直りません。代わりに従来のインターフェースを動かすなら、相当する組は ipsec statusall と同じ swanctl の一覧で、どちらのプラグインが設定を持つかによります。同じホスト上の二つのデーモンでツールを混ぜないでください、そして一貫した答えを一つ期待しないでください。
swanctl --list-sas --raw | head -40
ip -s xfrm state
生の形式は識別子とセレクタを比較できるよう見せたままにし、カーネル状態の一覧はスタックが何をインストールしたと考えているかを示します。デーモンとカーネルが食い違うときは、既存の子を囲んでデーモンが再起動したか、その下でカーネルオブジェクトが削除されたかのどちらかです。
合計ではなく階層を読む
子を二つ持つ確立済みの親の例は、下に子を二つ持つ一つのノードに見え、それぞれが自分の状態とモードでラベル付けされます。ダッシュボードから誰かが貼り付けた要約を読むのではなく、実際の出力を出して子を自分で数えてください。
swanctl --list-sas
swanctl --list-conns --raw | grep -A4 'accounting'
子を二つインストールした親は、健全な二つのサブネットのトンネルです。子が一つインストールされ、もう一つが欠けている親は別の状況で、欠けた子のセレクタこそ遠端の提案と比べるべきものです。鍵の更新中は、古い子とその置き換えが短い間だけ同時に現れることがあります。更新の途中で取った数は重複に、その後に取った数は消失に見えるので、スナップショットにはタイムスタンプを添えてください。
読み込まれ、インストールされ、トラフィックが通る
インストール済み状態の子には、ネゴシエート済みのパラメータとカーネルのエントリがあります。しかし パケットを運んだとは限りません:セレクタが想定より狭いこともあり、トンネルが見る前にルートがそのトラフィックを別へ送ることもあります。許可されたホストからネゴシエート済みセレクタに合うフローを送り、そのうえで見出しではなく子のカウンタを読んでください。合うトラフィックを流してもゼロのままのカウンタは、IKE ではなくルーティングやポリシーを指します。
swanctl --initiate --child accounting
swanctl --list-sas --raw | grep -E 'bytes|packets'
名前付きの子を開始するのは目に見える結果のある意図的な操作で、「誰も要求していないので接続が休んでいる」と「接続が上がれない」を分けます。オンデマンドのトラップポリシーは最初の場合とまったく同じに振る舞うので、障害と呼ぶ前に接続の開始設定を読んでください。
カウントが本当に間違っているとき
読み込まれたインベントリに定義がない場合は、設定の読み込みと、どのデーモンのインスタンスが動いているかを見てください。読み込まれているのにネゴシエートしない場合は、提案、認証の文脈、セレクタを相手と比べ、一度に子を一つずつ確認します。試行ごとに一つの要素だけを変え、変えた識別子を記録します。どの提案かが分かれば戻すのは簡単ですが、切り分けずに三つ編集した後では当て推量になります。
まず読み違いを直してください。「消えた」二本目のトンネルの報告の多くは、一つの親の下に子が二つインストールされている状態で終わり、壊れていたのは階層ではなく人々が信じた要約行だけでした。