トンネルの向こう側の共有を必要とする Windows コンテナは二つの独立した理由で失敗し、ホストのエクスプローラーはそのどちらも証明しません。コンテナには独自のネットワーク端点と独自のプロセス ID があります。デスクトップで解決される名前と、そこでファイルサーバーが受け入れるセッションは、デスクトップを説明するものであり、ワークロードではありません。

ホストのエクスプローラーは証拠にならない

ホストで共有を開くときは、ホストの DNS クライアント、ホストのルーティングテーブル、ホストにログオンしているアカウントが使われます。コンテナのプロセスは、コンテナが同じマシンで動き VPN クライアントもそこで動いている場合でも、これらを暗黙に継承しません。最初の境界はネットワーク経路であり、コンテナが名前を解決できるのか、SMB ポートへの TCP セッションを開けるのかという問いです。二つ目の境界は ID であり、ファイルサーバーが、ワークロードに必要な権限で、コンテナの提示するものを受け入れるのかという問いです。

両者を一つの問題として扱うと、実際には共有からのアクセス拒否という応答であるものを直そうとして、ファイアウォール規則を広げるというおなじみの循環に陥ります。

コンテナ自身の要求を追う

Windows コンテナのネットワークはホストネットワークサービスが管理し、独自のネットワーク名前空間を持つ端点を作ります。選んだモードによって、端点が変換されるのか、ブリッジされるのか、ホストと共有するネットワークにつながるのかが決まります。この判断は、コンテナが何を解決できるかと、ファイルサーバーがどの送信元アドレスを見るかという二つのことを同時に変えます。

何かを変える前に、コンテナ自身が何を観測するかを確認します。外では解決できる名前が内側で失敗しうるのは、コンテナの DNS 設定がホストのものではなく、変換された端点がファイルサーバーの規則の想定しない送信元を提示することがあるためです。

docker exec -it app powershell -Command "Resolve-DnsName files.corp.example"
docker exec -it app powershell -Command "Test-NetConnection files.corp.example -Port 445"
docker exec -it app powershell -Command "Get-NetIPConfiguration"

解決に失敗したら、アドレスを差し替えるのではなくネットワーク設定の DNS を直します。名前を IP に置き換えると認証やサーバー ID の振る舞いが変わり、一つの問題が二つになります。次に確認すべきは VPN クライアント自身の方針で、ホストのプロセスと コンテナ発の通信 を別扱いすることがあるからです。

ID は別の判断である

対話ユーザーが割り当てたドライブ文字はアプリケーションのインターフェースではありません。それは一つのログオンセッションに存在し、コンテナのプロセスはその一部ではありません。UNC パスを使い、展開モデルが支える ID をワークロードに与えます。ドメインが支える場合は、グループ管理サービスアカウント(gMSA)が資格情報の指定を通じて管理された ID を提供します。

Microsoft の コンテナ向け gMSA ガイド は、その資格情報の指定の仕組みと前提条件を説明しており、前提にはドメイン参加と資格情報を取得できるホストが含まれます。アカウント、取得、コンテナ内のプロセス ID、共有の権限がすべて揃わなければなりません。VPN ログインはその ID ではなく、ホストユーザーのセッションを再現するためにイメージにパスワードを焼き込むことは常設の露出を作ります。

失敗している段階を見えるままにする

解決の失敗、接続の拒否、アクセスの拒否にはそれぞれ別の証拠が要ります。順に DNS の問い、ルーティングやフィルタリングの問い、認証や権限の問いです。アプリケーションの一般的なエラーではなく、コンテナが受け取った応答を読みます。

ワークロード自身の ID で試し、拒否の場合も試します。

再接続に備える

VPN の経路は落ちます。トンネルが戻るとき、端点は別の変換アドレスで戻ることがあり、既存の SMB セッションはアプリケーションが気づかないまま死んでいることがあります。アプリケーション側で、経路と ID を再確立し、操作を再試行し、何も起きなかったと仮定するのではなく、結果が不明なファイル操作を突き合わせます。

ネットワークモード、DNS の取得元、ID の構成を展開ノートに記録します。次の失敗が扱うのは、まさにこの三つの事実です。

関連記事