※ 2022 年 9 月 30 日現在の情報をもとに作成しています
1. はじめに
AnyConnect の VPN 機能と Umbrella Roaming Security Module を併用している環境において、VPN 側のグループポリシーで Tunnel All DNS を有効にしている場合の互換性の問題について説明します。
AnyConnect Roaming Security Module: Tunnel All DNS Compatibility
https://support.umbrella.com/hc/en-us/articles/360000715106-AnyConnect-Roaming-Security-Module-Tunnel-All-DNS-Compatibility
2. Tunnel All DNS について
Tunnel All DNS は、VPN 終端装置である Cisco ASA のグループポリシー内の設定項目の 1 つで、VPN クライアントである AnyConnect が VPN 接続を行った際にその設定情報を受け取り、AnyConnect が DNS 通信を処理する際に使用されます。
具体的には、Tunnel All DNS が有効になっていると、AnyConnect がインストールされた PC 上で行われる DNS の名前解決は、VPN 接続の間、VPN トンネル経由でのみ行われるようになります。
これをより厳密に言うと、VPN トンネル経由の DNS の名前解決が失敗した直後にフォールバックとして行われる「物理インターフェース経由の名前解決」を無効化し、結果として、VPN トンネル経由のみとなるわけです。
つまり、この設定は DNS 通信に使われるインターフェースを変化させるものではなく、 一部インターフェース (具体的には VPN トンネル以外) の DNS 通信にフィルタをかける主旨のものであることに注意してください。
以下の公開文書の split-tunnel-all-dns の項にも詳しい説明があります。
Cisco ASA シリーズ コマンド リファレンス、S コマンド
https://www.cisco.com/c/ja_jp/td/docs/security/asa/asa-command-reference/S/cmdref3/s16.html
3. Umbrella Roaming Security Module による DNS 通信
Umbrella Roaming Security Module は AnyConnect のモジュールの 1 つで、Umbrella が提供するスタンドアローン型ソフトウェアである Roaming Client を AnyConnect に移植したものです。
そのため、AnyConnect に Umbrella Roaming Security Module を追加すると、Roaming Client と同様に、PC 上で生成される DNS クエリーは暗号化され、Umbrella の DNS サーバー (208.67.222.222/208.67.220.220) に転送されるようになります。
この暗号化通信は UDP ポート番号 443 で行われますが、経路途中のファイアウォールでブロックされるなどの理由により暗号化通信に失敗した場合、代わりに UDP ポート番号 53 の非暗号化通信が行われます。
また、非暗号化通信にも失敗した場合は、DNS の名前解決そのものも失敗に終わります。
4. 互換性の問題
以下の条件を満たす場合、PC 上で外部のドメインの名前解決ができなくなります。
- Split-tunneling により内部ネットワークの通信が VPN トンネル経由で行われる
- Tunnel All DNS を有効にしている
- Umbrella Roaming Security Module を導入している
- 暗号化された UDP 443 の DNS 通信がブロックされる
具体的な動作について順を追って説明します。
まず、PC 上で DNS リクエストが生成された際、Umbrella Roaming Security Module によってパケットの暗号化と送信先の IP アドレスおよびポート番号の変更が行われます。
そして、Split-tunneling により、VPN 経由ではなく、物理インターフェースから DNS 通信が行われるように準備が整えられます。
この後に Tunnel All DNS の機能が動作しますが、前述のとおり、AnyConnect は VPN 経由ではない DNS の名前解決を無効にします。
ただし、この通信は UDP 443 に変更されているため、AnyConnect によって DNS 通信とはみなされず、実際には無効化されることなく、Umbrella の DNS サーバーに転送され、名前解決が行われます。
ここで、もし UDP 443 の DNS 暗号化通信が何らかの理由でブロックされた場合、代わりに UDP 53 の非暗号化通信が行われますが、こちらは Tunnel All DNS の無効化対象となってしまうため、結局のところ名前解決が行われません。
なお、この事象には回避策が用意されており、Umbrella の DNS サーバー (208.67.222.222/208.67.220.220) への通信が VPN 経由で行われるように Split-tunneling の Include 設定に追加することで回避可能です。
しかし、Umbrella としては、関連したトラブルが発生しないようにするため、Umbrella Roaming Security Module 使用時は Tunnel All DNS そのものを併用しないことを推奨しています。