オフィスのノート PC は自宅からダイヤルインしても、オフィスが必要とする何かを提供し続けられますが、それは三つの別々の判断がそろったときだけです。トンネルは輸送、内部アドレスは宛先、そしてポリシーが誰のノックを許すかを決めます。どれか一つを答えのすべてとして扱うと、ホストは ping に応答するのにアプリケーションは決して接続しない、というよくある不満が生まれます。役割は同じではなく、その違いこそが設計作業の置かれる場所です。

ダイヤルインの向きはサービスの向きを何も語らない

クライアントがトンネルを開始すると、それが存在して以降は両方向が使える経路が開きます。ハブからそのクライアントへ新しい接続が入ってよいかはゲートウェイのポリシーの問題であり、ダイヤルした人の性質ではありません。たとえばルーティングされた OpenVPN ハブでは、サーバーはクライアントの内部アドレスへの経路と、ピア関係を許可する転送を必要とします。

ローミング中のノート PC のエージェントをポーリングする在庫管理システムや、自宅のワークステーションからテスト用 API を必要とする開発者を思い浮かべてください。どちらもオフィス側から会話を始めたいのであり、これは通常のクライアントからサーバーへのパターンの逆です。

ホステッド型のリモートアクセス製品はここで異なり、その違いは不具合ではありません。一部のマネージドサービス VPN は、モデルがクライアントからリソースへでありリソースからクライアントへではないため、接続中のクライアントへの一方的な接続を意図的に遮断します。同僚のノート PC がサーバーになれると約束する前に、製品の文書化されたアーキテクチャを読んでください。

ポートを開く前に戻り経路をたどる

経路は三つの部分からなります:ゲートウェイ上でクライアントの内部アドレスを指す経路、特定の呼び出し元を許可するポリシー、そしてターゲット上で待ち受けるサービスです。各部分は異なる仕方で失敗するので、「VPN は上がっている」だけではほとんど何も分かりません。

良い知らせは、内部経路にはクライアントの家庭用ルーターでのポートフォワーディングが不要だということです。サービスの公開先を家庭の WAN アドレスではなくトンネルのアドレスにする意味はここにあり、前者では露出も NAT の規則もまったく違ってしまいます。家庭用ルーターはオフィスから来る接続のヘアピンを拒否することもあり、その場合 WAN 経路は VPN とは無関係な理由で失敗します。トラフィックをトンネル内に保てば、両方の問題を同時に避けられます。

ターゲット側も確認してください。127.0.0.1 だけにバインドされたサービスは、ゲートウェイの経路がどれほど正しくても、トンネルインターフェースに届く接続を受け入れられません。ポートをローカルサブネットからのみ許可する ホストのファイアウォール規則もオフィスのトラフィックを落とし、その規則は上位の VPN ポリシーとは独立です。

名前とアドレスは設計上の判断である

トンネル内のアドレスは自動的に名前になるわけではありません。自分で管理するプライベート DNS レコードのほうが、リンクローカルなマルチキャスト名前解決はローカルセグメントにとどまりサブネット間の DNS にはならないため、検出プロトコルがトンネルを越えると期待するより明確です。

アドレスの安定性も同じくらい重要です。VPN クライアントが短いリースのプールから取得する場合、ノート PC の内部アドレスはセッションごとに変わり、それに基づくブックマーク、ファイアウォールの範囲、監視の確認が静かに壊れます。予約か、文書化された動的更新の経路を使ってください。

VPN の ID を所有する人と名前を合意し、レコード、アドレスの割り当て、アクセスポリシーが三つの別々のチケットではなく一緒に変わるようにしてください。

メンバーシップではなくサービスを試す

ターゲットから、何がどのアドレスで待ち受けているかを確認し、次にゲートウェイから見た戻り経路を確認します:

$ ss -ltnp | grep 8080
LISTEN 0 128 10.80.0.23:8080 0.0.0.0:*
$ ip -4 addr show tun0 | grep inet
inet 10.80.0.23/24 scope global tun0
$ ip route get 10.80.0.1
10.80.0.1 dev tun0 src 10.80.0.23

次にオフィス側から、エコーではなく実際のリクエストで試します。サービスに対する curl の成功は経路、ポリシー、待ち受けを一度に証明しますが、ping の成功は ICMP が許可されていることしか証明しません。リクエストが失敗したら、ファイアウォールを広げて望むのではなく、三つの部分を逆にたどってください。

可用性も同じ会話に属します。ノート PC はスリープし、ネットワーク間を移動し、一日の終わりに切断します。どの時間帯にも応答しなければならないサービスは常時稼働のホストに属し、ベストエフォートのサービスはその制約を書き留めたうえでクライアントに残せます。

名前、許可された呼び出し元の一覧、所有者を備えて意図的にリソースを公開すれば、リモート端末は偶発的なサーバーではなく、サポートされたサービスになります。

関連記事