キルスイッチかLANアクセスか?WireGuardの二つの答え
プロファイルが 0.0.0.0/0 を示すと、Windowsクライアントはトンネル外の通信を遮断する。どちらの性質が必要かを決め、それに応じて既定値を表現する。
ハンドシェイクは完了し、ブラウジングは機能し、プリンター、NAS、ローカルのSSHホストだけが消える。Windowsクライアントでは、これはたいていルーティングの失敗ですらない。許可プレフィックスに文字どおりの既定値が含まれるピアは「トンネル外の通信をブロック」を有効にし、そのオプションは他のインターフェースから出ていくパケットを破棄するファイアウォール規則として実装されている。ルートテーブルはローカルサブネットを依然として直接リンクとして示すので、症状は嘘のように感じられる。何をすべきかを決めるのは三つの条件であり、そのうちルーティングに関するものは一つだけである。
二つの障害が同じ症状をまとう
一つ目の障害はクライアントのフェイルクローズドモードで、その特徴はトンネルの外側がすべて止まる一方、トンネル自体は完璧に動くことだ。二つ目は実際の到達性の問題で、欠けたルート、クライアントの背後にあるサブネットに対するサーバー側の欠けたエントリ、あるいは同じアドレス範囲を共有する二つのネットワークである。どちらも閲覧はできて印刷はできないマシンを生み、修正方法は正反対なので、診断が設定より先に来なければならない。
決め手となる観察は、そこへの通信が破棄されている間に、ローカルサブネットがルートテーブルにまだ存在するかどうかである。
三つの条件が答えを決める
第一に、このマシンはフェイルクローズドを必要とするか。答えが「はい」なら、落ちたトンネルは通信を止めなければならず、物理インターフェースへ戻してはならない。この要件はローカルの利便性より優先される。第二に、トンネルが上がっている間、ローカル機器は到達可能なままでなければならないか。印刷、ネットワークストレージ、ローカルの管理コンソールがよくある理由であり、これらは正当な要件であって、謝るべき例外ではない。第三に、プロファイルは既定値を文字どおりの 0.0.0.0/0 として表現しているか。まさにこの細部がクライアントの規則を起動するのであり、それは編集できる。
プロファイルに触る前に、それぞれの答えが異なる設定を指すので、プロファイルに触る前にこの三つを書面で答えておくこと。
フェイルクローズドを選び、LANをあきらめる
漏えいがローカルの到達性より重要なら、文字どおりの既定値を保ち、「トンネル外の通信をブロック」を有効のままにする。これは一貫した立場だ。マシンはトンネルの中かオフラインかのどちらかである機器として扱われ、ローカルサービスは別の機器から、あるいはサーバーがルーティングするならトンネル経由で到達する。代償は現実であり、印刷が必要な人が発見するのではなく、配備ノートに書いておくべきだ。
トンネルが落ちたときにカフェのネットワークに現れてはならない仕事を扱うマシンには、これが正しい選択だ。スキャナーも必要な家庭用ノートPCには、悪い既定値である。
LANアクセスを選び、既定値を別の形で表す
ローカル機器が到達可能なままでなければならないなら、文字どおりの既定プレフィックスを使わずに同じ範囲を表現する。二つの半分のプレフィックスがすべてのIPv4アドレスを覆い、等価なペアがIPv6を覆い、クライアントは探している文字列が存在しないためブロック規則を挿入しなくなる。
[Peer]
AllowedIPs = 0.0.0.0/1
AllowedIPs = 128.0.0.0/1
AllowedIPs = ::/1
AllowedIPs = 8000::/1
Endpoint = vpn.example.net:51820
そのチェックを外すと、クライアントは同じ二組をプロファイルに書き込むので、生成されたファイルを上のブロックと比べることは、仕組みを推測するのではなく確認する手早い方法だ。二つの結果が続く。範囲は同一なので、トンネルについて他は何も変わらない。保護は同一ではない。規則がなくなると、落ちたトンネルはマシンを物理インターフェースのままにし、それこそがフェイルクローズドが防いでいたものだ。
残る二つの容疑者も必ず確認する
ファイアウォールの問題が片付いたら、ローカルサブネットが実際にルーティングされていること、そして遠端がこのクライアントの背後のすべてを把握していることを確認する。クライアントの背後のLANに到達する必要のあるサーバーは、ハブ上のクライアントの許可リストにそのプレフィックスを必要とする。省けばハブはそれらのアドレスのピアを選べず、クライアント側の設定をいくら足しても作れない。
Get-NetConnectionProfile | Select-Object Name, InterfaceAlias, NetworkCategory
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultOutboundAction
route print 0.0.0.0
ネットワークカテゴリは人が思う以上に重要だ。新しく作られたトンネルアダプターがパブリックとして分類されると、適用される規則が変わり、結果は遠端でのファイアウォール遮断のように見えうる。ルートの出力は既定値がそもそもあるかどうかを示し、それがポリシーの問題と欠けたルートを切り分ける。
次に、一回の作業で三つを試す。インターネット、アドレスで一つのローカルホスト、トンネル越しに一つのホストだ。ハンドシェイクは鍵が一致することしか証明しないので、ポリシーを示すのはこの三つのテストである。オプションを外してもローカルホストが拒否するなら、残る容疑者はルート、遠端の許可リスト、重複したサブネットの順である。