ブリッジ構成のサーバーは起動しており、masqueradeルールも存在するのに、クライアントのブラウザーは回り続けています。すべてが動くはずに見えるので、最初の一時間はトンネルと認証情報の確認に費やされます。そのあとNATルールのカウンターを読むと、動いていないゼロが見つかります。一度もパケットを数えていないルールは一度もパケットに一致しておらず、ブリッジ構成のサーバーでは理由は構造的です。クライアントの通信は仮想tapデバイスから出ていくのに、ルールは古い手順書からコピーした物理カードを指定しているのです。

証拠はカウンターであって、表の行ではない

存在するルールと一致するルールは別物で、それを分けるのがカウンターです。NATテーブルを詳細カウンター付きで一覧し、何かを変える前に各ルール横の数値を読んでください。通信が流れているのにゼロで止まっているカウンターは、そのアドレスがどれほど妥当に見えても、ルールが飛ばされたことを意味します。接続が失敗し続けるのに増えるカウンターは、別の場所へ導きます。転送、戻り経路、あるいは遠端です。

iptables -t nat -L POSTROUTING -v -n

まずインターフェース一致の横のカウンターを読みます。送信元の範囲が正しく、出力側が誤っているなら、修正は新しいルールではなくルール内の一語です。

カーネルが実際に記録する名前を見つける

ルールを書く前に、記憶ではなくインターフェース一覧を使ってトンネルデバイスを名前で特定します。ブリッジ構成のOpenVPNでは、デバイスは通常サーバーが作成したtapインターフェースで、その名前はローカル設定の一部であり、普遍的な定数ではありません。トンネルが上がっている間に存在することを確認してください。クライアント接続後にだけ現れるデバイスは、以前のテストをルールの問題に見せてしまいます。

ip -brief link

名前を書き留めます。この診断の以降のコマンドはすべてそれを参照し、ここでの打ち間違いは元の誤りとまったく同じゼロカウンターを生みます。

ルールをトンネルデバイスに向けて書き直す

ルールをトンネルデバイスに向け、クライアント範囲を一致条件として残すことで、トンネルの通信をカバーしつつホスト自身の接続には手を触れません。下の二つはどちらも例であり、インストール間で持ち運べるものではないため、自分の範囲とデバイス名に置き換えてください。

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o tap0 -j MASQUERADE

次に、同じ症状が隠している二つの条件を確認します。転送が有効かどうかを確認し、無効なら再起動で消えるechoではなくディストリビューション自身の設定で有効にします。forwardチェーンのカウンターも読み、トンネルの通信を落としているなら、そのインターフェースだけを許可し、チェーンのポリシーには触れないでください。

カウンター付きでforwardチェーンを読むのはコマンド一つで済み、別のルールに触れる前に残りの可能性の半分を除外できます。

物理カードが決して一致しない理由

ブリッジはtapデバイスと一つの物理インターフェースから組み立てられたソフトウェアスイッチです。クライアントのフレームはそのスイッチに入り、カード上のパケットとしてではなくブリッジの一員として物理ネットワークへ出ていきます。そのためカーネルはパケットをブリッジとそのポートに帰属させ、考えていたカードが一致に現れないのはそのためです。物理インターフェースは壊れていません。単に、カーネルがそのパケットを帰属させるデバイスではないだけです。

次に人がつまずく問題も同じ構造から来ます。ブリッジ上のフレームフィルタリングはIPフィルタリングとは別の仕組みです。要件がフレームレベルの制限なら、それはブリッジフィルタリングに属し、IPテーブルのルールではありません。

最後まで証明し、それから永続化する

クライアントを一つ立ち上げ、サーバーのLAN上の何かにpingを打ちます。この経路は変換なしで転送を試します。そのあとmasqueradeルールを使わざるを得ないよう公開先へ要求し、もう一度カウンターを読みます。このテストで動き、前のテストでは動かないはずです。トンネルデバイスで取得したキャプチャーは、フレームがどこに現れ、どのアドレスを運んでいるかを同時に示します。

最後の手順です。動いたルールを再起動時に読まれる設定に入れ、このホストのブリッジが実際に使うデバイス名を記録します。手で入力したものは再起動後に消え、同じ不具合が説明するものもないまま戻ってきます。

書き直したあともカウンターが動かないなら、ルールの送信元範囲とクライアントが実際に受け取ったアドレスを比べてください。ブリッジ構成のサーバーは意図していない範囲からアドレスを配ることがあります。

関連記事