ネットワークスペシャリスト試験 令和6年度 春期 午後1 問3
【出典:ネットワークスペシャリスト試験 令和6年度 春期 午後1 問3(一部、加工あり)】
問3 ローカルブレイクアウトによる負荷軽減に関する次の記述を読んで、設問に答えよ。
A社は、従業員300人の建築デザイン会社である。東京本社のほか、大阪、名古屋、仙台、福岡の4か所の支社を構えている。本社には100名、各支社には50名の従業員が勤務している。
A社は、インターネット上のC社のSaaS(以下、C社SaaSという)を積極的に利用する方針にしている。A社情報システム部ネットワーク担当のBさんは、C社SaaS宛ての通信がHTTPSであることから、ネットワークの負荷軽減を目的に、各支社のPCからC社SaaS宛ての通信を、本社のプロキシサーバを利用せず直接インターネット経由で接続して利用できるようにする、ローカルブレイクアウトについて検討することにした。
[現在のA社のネットワーク構成]
現在のA社のネットワーク構成を図1に示す。
現在のA社のネットワーク構成の概要を次に示す。
- 本社及び各支社はIPsec VPN機能をもつUTMでインターネットに接続している。
- プロキシサーバは、従業員が利用するPCのHTTP通信、HTTPS通信をそれぞれ中継する。プロキシサーバではセキュリティ対策として各種ログを取得している。
- DMZや内部ネットワークではプライベートIPアドレスを利用している。
- PCには、DHCPを利用してIPアドレスの割当てを行っている。
- PCが利用するサーバは、全て本社のDMZに設置されている。
- A社からインターネット向けの通信については、本社のUTMでNAPTによるIPアドレスとポート番号の変換をしている。
[現在のA社のVPN構成]
A社は、UTMのIPsec VPN機能を利用して、本社をハブ、各支社をスポークとする(ア)型のVPNを構成している。本社と各支社との間のVPNは、IP in IPトンネリング(以下、IP-IPという)でカプセル化し、さらにIPsecを利用して暗号化することでIP-IP over IPsecインタフェースを構成し、2拠点間をトンネル接続している。①本社のUTMと支社のUTMのペアではIPsecで暗号化するために同じ鍵を共有している。②この鍵はペアごとに異なる値が設定されている。
③IPsecの通信モードには、トランスポートモードとトンネルモードがあるが、A社のVPNではトランスポートモードを利用している。
A社のVPNを構成するIPパケット構造を図2に示す。
VPNを構成するために、本社と各支社のUTMには固定のグローバルIPアドレスを割り当てている。④IP-IP over IPsecインタフェースでは、IP Unnumbered設定が行われている。また、⑤IP-IP over IPsecインタフェースでは、中継するTCPパケットのIPフラグメントを防止するための設定が行われている。
[プロキシサーバを利用した制御]
BさんがUTMについて調べたところ、追加ライセンスを購入することでプロキシサーバ(以下、UTMプロキシサーバという)として利用できることが分かった。
Bさんは、ネットワークの負荷軽減のために、各支社のPCからC社SaaS宛ての通信は、各支社のUTMプロキシサーバをプロキシサーバとして指定することで直接インターネットに向けることを考えた。また、各支社のPCからその他インターネット宛ての通信は、通信相手を特定できないことから、各種ログを取得するために、これまでどおり本社のプロキシサーバをプロキシサーバとして指定することを考えた。各社のPCから、C社SaaS宛てとその他インターネット宛ての通信の流れを図3に示す。
Bさんは、各支社のPCが利用するプロキシサーバを制御するためにプロキシ自動設定(以下、PACという)ファイルとWebプロキシ自動検出(以下、WPADという)の導入を検討することにした。
[PACファイル導入検討]
BさんはPACファイルの作成方法について調査した。PACファイルはJavaScriptで記述する。PACファイルに記述するFindProxyForURL関数の第1引数であるurlにはアクセス先のURLが、第2引数であるhostにはアクセス先のURLから取得したホスト名が渡される。これらの引数に渡された値を様々な関数を用いて条件分けし、利用するプロキシサーバを決定する。FindProxyForURL関数の戻り値が”DIRECT”ならば、プロキシサーバを利用せず直接通信を行う。戻り値が”PROXY host:port”ならば、指定されたプロキシサーバ(host)のポート番号(port)を利用する。
テスト用に大阪支社のUTMを想定したPACファイルを作成した。Bさんが作成した大阪支社のUTMのPACファイルを図4に示す。
Bさんは、テスト用のPCとテスト用のUTMプロキシサーバを用意し、作成したPACファイルを利用することで、テスト用のPCからC社SaaS宛ての通信が、期待どおりに本社のプロキシサーバを利用せずに、テスト用のUTMプロキシサーバを利用することを確認した。⑥Bさんは各支社のPACファイルを作成した。
[WPAD導入検討]
WPADは、(イ)や(ウ)の機能を利用して、PACファイルの場所を配布するプロトコルである。PCやWebブラウザのWebプロキシ自動検出が有効になっていると、(イ)サーバや(ウ)サーバと通信を行い、アプリケーションレイヤープロトコルの一つである(エ)を利用して(エ)サーバからPACファイルのダウンロードを試みる。
WPADの利用には、PCやWebブラウザのWebプロキシ自動検出を有効にするだけでよく、簡便である一方、悪意のある(イ)サーバや(ウ)サーバがあると⑦PCやWebブラウザが脅威にさらされる可能性も指摘されている。Bさんは、WPADは利用しないことにし、PCやWebブラウザのWebプロキシ自動検出を無効にすることにした。PCやWebブラウザにはPACファイルの(オ)を直接設定する。
Bさんが検討した対応案が承認され、情報システム部はプロジェクトを開始した。
前回の記事では、【設問1】で問われたIPsec VPNの基礎知識について解説しました。今回はその続編として、【設問2】のテーマである「PACファイル」に焦点を当てて、詳しく解説していきます!
SaaS利用の最適化(ローカルブレイクアウト)を実現するための要となるのが、このPACファイルによるプロキシ制御です。出題趣旨にもある通り、HTTPS通信が主流の現代において、プロキシサーバの制御はネットワーク担当者の必須スキルと言えます。
採点講評では、特にIPアドレス空間の理解度で差がついたようです 。この記事でPACファイルの仕組みと読み解き方をマスターし、確実な得点源にしましょう!
PACファイル導入の目的を再確認
まず、A社のネットワーク担当Bさんが、なぜPACファイルを導入しようとしているのか、その目的を整理しましょう。
- 現状の課題: 全てのインターネット通信が東京本社のプロキシサーバを経由するため、SaaS利用が増えるにつれて本社側の負荷が増大している 。
- 実現したいこと:
- C社SaaS宛て: 各支社のPCからは、それぞれの支社にあるUTMをプロキシとして使い、直接インターネットへ出す(ローカルブレイクアウト) 。
- その他インターネット宛て: 従来通り、東京本社のプロキシサーバを経由させる(ログ取得のため) 。
- 社内ネットワーク宛て: プロキシサーバを介さず、直接通信させる。
このように、アクセス先のURLに応じてプロキシサーバを賢く使い分けるために、JavaScriptで条件分岐を記述できるPACファイルが採用されました。
【設問2】PACファイル導入検討
それでは、Bさんが作成した大阪支社用のPACファイル(図4)を読み解きながら、設問に答えていきましょう。
まずは、このPACファイルの処理の流れを大まかにつかむことが重要です。
function FindProxyForURL(url, host) {
// (a) ホスト名をIPアドレスに変換
var ip = dnsResolve(host);// (b) 社内やローカルアクセスか? -> YESなら直接通信(DIRECT)
if (isLocalHostOrDomainIs(host, “localhost”) ||
isInNet(ip, … ) || // プライベートIPなら
dnsDomainIs(host, ” a-sha.jp”)) { // 社内ドメインなら
return “DIRECT”;
}// (c) C社SaaSへのアクセスか? -> YESなら大阪支社のプロキシ
if (dnsDomainIs(host, “image.cdn.example”) ||
shExpMatch(host, “*.c-saas.example”)) {
return “PROXY proxy.osaka.a-sha.jp:8080”;
}// (d) 上記以外(その他インターネット) -> 本社のプロキシ
return “PROXY proxy.a-sha.jp:8080”;
}
上から順番に条件を評価し、一致したものがあればその指示(return)に従って処理を終了する、という流れです。
(1) DMZのWebサーバにアクセスする際のプロキシは?
【解答】 利用しない
- アクセス先を特定: DMZにあるWebサーバは、A社の社内サーバです 。
- ホスト名を推測: 社内サーバなので、ホスト名(FQDN)は A社の社内利用ドメイン名である
a-sha.jp
を含むはずです(例:web.a-sha.jp
) 。 - PACファイルの判定: 図4のPACファイルを見ると、処理(b)に
dnsDomainIs(host, " a-sha.jp")
という条件があります 。これは「アクセス先のホスト名がa-sha.jp
ドメインに属する場合」に真となります。 - 結果: この条件に一致するため、
return "DIRECT";
が実行されます 。「DIRECT」はプロキシを利用せず直接通信することを意味します。したがって、解答は「利用しない」となります。
(2) https://www.example.com/...
にアクセスする際のプロキシは?
【解答】 proxy.a-sha.jp
- アクセス先を特定:
https://www.example.com/foo/index.html
です。FindProxyForURL
関数の引数host
にはwww.example.com
が渡されます 。 - PACファイルの判定:
- 処理(b):
www.example.com
は社内ドメインではないので、条件に一致しません。 - 処理(c):
www.example.com
はC社SaaS利用ドメイン名 (image.cdn.example
や*.c-saas.example
) ではありません 。これも一致しません。 - 処理(d): (b)と(c)のどちらにも該当しなかったため、最後の
return "PROXY proxy.a-sha.jp:8080";
が実行されます 。
- 処理(b):
- 結果:
proxy.a-sha.jp:8080
、つまり本社のプロキシサーバを利用することになります 。解答としてプロキシサーバ名を問われているので、「proxy.a-sha.jp」となります。
(3) islnNet
のアドレス空間はどこからどこまで?
【解答】 最初: 172.16.0.0、最後: 172.31.255.255
この問題が、今回の最大のポイントかもしれません!ネットワークの基礎であるIPアドレスとサブネットマスクの知識が問われています。
対象は isInNet(ip, "172.16.0.0", "255.240.0.0")
です 。これは、IPアドレス ip
が、ネットワーク 172.16.0.0
、サブネットマスク 255.240.0.0
の範囲に含まれるかを判定する関数です。
- サブネットマスクを2進数に変換:
255.240.0.0
11111111.11110000.00000000.00000000
先頭から1が12個並んでいるので、これはCIDR表記で/12
と同じ意味です。 - ネットワークアドレスの範囲を計算: IPアドレス
172.16.0.0
を2進数で考えます。10101100.00010000.00000000.00000000
/12
なので、先頭12ビット10101100.0001
がネットワーク部となり、この部分は固定です。残りの20ビットがホスト部となり、この部分が変化します。- 最初のIPアドレス: ホスト部がすべて0の場合
10101100.0001
0000.00000000.00000000
->172.16.0.0
- 最後のIPアドレス: ホスト部がすべて1の場合
10101100.0001
1111.11111111.11111111
->172.31.255.255
- 最初のIPアドレス: ホスト部がすべて0の場合
採点講評でも「172.16.0.0や172.31.255.255はIPアドレスとして利用可能であるが、これらを含めない誤った解答が散見された」と指摘されています 。これはプライベートIPアドレスとして予約された「範囲」を問われているため、ネットワークアドレスやブロードキャストアドレスという特別な意味合いを持つアドレスも含めて、その空間の最初と最後を答える必要があります。
(4) プライベートIPアドレスを”DIRECT”にする効果は?
【解答】 本社のプロキシサーバの負荷軽減
処理(b)では、isInNet
関数を使って、アクセス先のIPアドレスがプライベートIPアドレス(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)の場合に return "DIRECT";
としています 。
- プライベートIPアドレスへのアクセスとは?: これは、同じ社内ネットワークにある他のPCやサーバへの通信を意味します。
- “DIRECT”にしないとどうなる?: もしこの設定がないと、社内サーバへのアクセスも、一度本社のプロキシサーバ(
proxy.a-sha.jp
)を経由してしまいます。これは全くの無駄な通信であり、プロキシサーバに不要な負荷をかけます。 - 効果: “DIRECT”にすることで、社内通信はプロキシを経由しなくなるため、「本社のプロキシサーバの負荷軽減」に繋がります。簡潔ですが、的確な解答です。
(5) PACファイルを支社ごとに用意する必要がある理由は?
【解答】 UTMプロキシサーバのFQDNが異なるから
図4は、あくまで「大阪支社」用のPACファイルです 。
処理(c)を見てください。C社SaaS宛ての通信は return "PROXY proxy.osaka.a-sha.jp:8080";
となっています 。proxy.osaka.a-sha.jp
は大阪支社のUTMプロキシサーバのFQDNです 。
では、もしこれが名古屋支社用のPACファイルなら、どうなるでしょうか? おそらく、ローカルブレイクアウト先のプロキシサーバは proxy.nagoya.a-sha.jp:8080
のように、支社固有のFQDNになるはずです。
このように、プロキシとして指定するローカルブレイクアウト先のFQDNが支社ごとに異なるため、PACファイルも支社ごとに用意する必要があるのです。
まとめ
【設問2】では、PACファイルという具体的なスクリプトを読み解く力が試されました。ポイントは以下の通りです。
- 処理の順序: スクリプトは上から順に評価されることを理解する。
- 関数の意味:
dnsDomainIs
やisInNet
といったPAC特有の関数の役割を把握する。 - ネットワーク基礎知識: 特にIPアドレスとサブネットマスクの計算は、正確に行えるようにしておく。
- 設定の意図: なぜこの設定が必要なのか(負荷軽減、適切な経路制御など)を常に考える。
ローカルブレイクアウトは、現代の企業ネットワークにおいて非常に重要な技術です。その実現方法の核となるPACファイルの扱いは、ネットワーク技術者としてぜひ身につけておきたいスキルです。
次回は最終回、【設問3】で問われたWPADとそのセキュリティについて解説します。お楽しみに!