ウェブサーバーのVPNクライアントが応答を壊す?
送信元ベースのルートルールは、公開サイトを1つ復旧させる一方で、意図しなかった通信まで免除してしまうことがあります。例外を広げる前にセレクターを読んでください。
サイトは同じネットワーク上のノートPCからは読み込めますが、それ以外のどこからでもタイムアウトし、しかもホストは自身の外向き通信のためにVPNクライアントも動かしています。この組み合わせが生むのは、受信接続は届くのに応答は誤った経路へ出て行き、外側のクライアントが応答を一度も見ないという特定の故障です。両方の半分が同じパケットキャプチャに現れるので、読む価値があるのは出来事の順序です。
送信元ベースのルーティングルールは、多くの場合この症状を直します。同時に、それを引き起こしたサイトより広い通信まで免除してしまうのが常で、ルールを保存する前に理解しておくべきなのはこの部分です。
症状:ローカルでは応答し、外からは応答しない
ネットワークの内側では応答がトンネルを越える必要がないため、ページは読み込まれ、サービスは健全に見えます。外側では要求がホストに届き、応答はVPNへルーティングされますが、そこに遠端がそれを受け入れる理由はありません。ブラウザが見るのは拒否ではなくタイムアウトで、これは閉じたポートではなく一方向経路の特徴です。
ルーティングを変える前に、リスナーが動いていてローカルの要求は成功し、外部の要求はまったく応答を返さないという形を確認します。この三つの観測がそろえば、ウェブサーバーの設定ではなく戻り経路を指します。これほどきれいな非対称性は、エラーメッセージを一つ読む前にリスナーを除外できるので、どのログ行より有用です。
作業中は独立した管理経路を開いたままにします。自分のSSHセッションを壊すルールは、十分の修正を現地訪問に変えてしまいます。
送信元セレクターが実際に一致させるもの
Linuxのポリシールーティングでは、from 192.168.50.2 のようなルールは送信元がそのアドレスであるパケットに一致します。パケットが家庭用ルーターから入った会話を続けているという事実は符号化されず、どのプロセスが作ったかも分かりません。その例のアドレスは例示であり、ホストが実際に使うアドレスに置き換えてください。この行はアドレスについての記述として扱い、それ以上は何も意味しません。
選択したテーブルが通常のデフォルトルートを提供するなら、その送信元を持つすべてのパケットが同じ例外を取れます。同じアドレスに束縛された別のサービスもそれを継承し、意図的にそのアドレスに束縛するアプリケーションも継承します。ポリシールールのリファレンスは送信元、宛先、プロトコル、ポート、マーク、優先度を別々のセレクターとして列挙しており、送信元だけが利用可能な中で最も粗いことを思い出させます。
優先度が結果を決めます。検索は順番に実行され、結果を出した最初のテーブルが検索を終わらせることがあるため、早すぎる位置のルールは、後続のテーブルが提供したはずのより具体的な経路を隠してしまいます。追加した一行だけでなく、順序付きリスト全体を読んでください。決して一致しないルールは何のコストもかかりませんが、早すぎる一致はその背後にあるすべてを静かに変えてしまいます。
戻り経路と、意図しなかった通信を確認する
ルールとテーブルを読み、次にカーネルに特定の送信元と宛先の組がどの経路を取るかを尋ねます。ホスト自身からのテストは外側からのテストとは同じではないので、両方を行ってください。
ip rule show
ip route show table 100
ip route get 203.0.113.44 from 192.168.50.2
ss -ltnp '( sport = :443 )'
次に新しい外部接続を一つ受け入れ、別に、今もVPN経由で出るべき要求を受け入れます。二つ目が今は直接出て行くなら、例外は解いていた問題より広く、重要なテストは変えるつもりのなかったほうです。
ブラウザでの公開アドレス確認は、そのブラウザが行った要求しか報告しません。ウェブサーバーの応答についても、別のローカルアプリケーションの送信元選択についても、次回のVPN再接続後に管理通信がどうなるかについても、何も語りません。
例外をどこまで狭くできるかを決める
擁護できる設計は二つあり、意識して選ぶべきです。ホストがこのサービスの公開だけを目的とし、外向き通信が重要でないなら、WAN専用ポリシーを持つ専用のローカルアドレスは、範囲全体を受け入れる限り妥当な取り決めです。特定の受信接続だけを対象にすべきなら、アドレス選択は粗すぎるので、その前に接続を意識した設計を置くべきです。
依拠している契約、つまり公開マッピング、要求が届けられるホストアドレス、応答が取るべき経路を記録します。VPNプロバイダー経由で公開された受信サービスは、家庭用ルーター経由で公開されたものとは別の契約であり、ある例からコピーした例外はもう一方にはしばしば誤りです。
コマンドを起動ファイルに貼り付けるのではなく、ルーティングを所有するコンポーネントにポリシーを永続化します。ルールの順序、ネットワーク変更後の後始末、再起動後の再生はすべて生き残らなければならず、テストしていない起動ファイルは見ていないまさにその瞬間に失敗するのが常です。最後に、公開サイトが一つ復旧し、無関係なフローが一つ変わっていない、擁護できる受け入れ結果で締めます。