WindowsでWPAD(Webプロキシ自動検出プロトコル)を使用する方法

WPAD(Web Proxy Auto-Discovery)の設定は、その仕組みをよく知らないと非常に面倒な作業になることがあります。ブラウザやシステムがPAC(Proxy Auto-Configuration)ファイルを正しく認識してくれなかったり、ネットワークがPACファイルを正しく認識してくれなかったりするケースがあります。特にDNSやDHCPの設定が適切でない場合、このような問題が発生します。「動作するはずなのに、なぜか動作しない」という、よくあるトラブルの一つです。そこで、私が実際にWPADの設定を組み立て、実際のネットワークで動作させた方法に基づいて、WPADの設定と展開に必要な手順を、より分かりやすく解説します。

WPAD をセットアップする場合、主に次の 2 つの点に留意する必要があります。PAC ファイル (wpad.dat) を作成すること、そしてクライアントが DNS または DHCP 経由でそのファイルを見つけられるようにすることです。PAC ファイルを Web サーバーに配置し、DNS または DHCP レコードを正しく構成することが非常に重要です。そうしないと、ブラウザーは間違った場所を探し続けたり、まったく見つけられなかったりすることになります。これらが完了したら、ブラウザー (またはシステムのプロキシ設定) を自動検出するように構成することで、PAC ファイルが自動的に使用されるようになり、各デバイスを手動で操作する必要がなくなります。もちろん、セットアップによっては、DNS エントリが正しく解決されない、サーバーが wpad.dat へのアクセスを許可しないなど、最初の試みではうまくいかないこともありますが、一度設定すれば通常は問題なく動作します。うまくいかない場合は、DNS 名前解決や、PAC ファイルへのアクセスをブロックしているファイアウォール ルールを調べた方がよいでしょう。

ネットワークにおけるWPADの認識と展開を修正する方法

適切なルールでPACファイル(wpad.dat)を作成する

いよいよ本題です。wpad.datファイルをアクセス可能な場所(できれば適切な MIME タイプを持つ社内 Web サーバー)にホストする必要があります。PAC ファイルはFindProxyForURLという JavaScript 関数で、クライアントにプロキシを使用するか直接接続するかを指示します。以下に、調整可能な簡単な例を示します。

function FindProxyForURL(url, host) { if (shExpMatch(host, "127.0.0.1") || shExpMatch(host, "localhost")) { return "DIRECT"; } if (isInNet(host, "192.168.0.0", "255.255.255.0")) { return "DIRECT"; } if (dnsDomainIs(host, "*.internaldomain.com")) { return "DIRECT"; } if ( shExpMatch(url, "http://*.ads.com") || shExpMatch(url, "https://*.ads.com") ) { return "PROXY adblockproxy:8080"; } // Default proxy for everything else return "PROXY proxy.yournetwork.com:3128"; } 

なぜこんなことを気にする必要があるのでしょうか?それはトラフィックを誘導するロジックだからです。サイトによっては直接アクセスするサイトもあれば、プロキシを経由するサイトもあれば、ルールに基づいてブロックされるサイトもあります。実際、PACファイルがWindowsの1MBの制限を超えてしまうのを見たことがあります(もちろん、Windowsは必要以上に制限をかけているためです)。ですから、PACファイルは小さく保つべきです。

ファイルを入手したら、Webサーバーにアップロードします。WindowsのIIS、nginxやApacheを使ったLinuxマシン、あるいはシンプルなPowerShell HTTPサーバー(Start-HTTP-Serverなどが使える場合もあります)など、様々なサーバーが考えられます。サーバーのMIMEタイプが に設定されていることを確認してください。IISの場合は、 「MIMEタイプ」application/x-ns-proxy-autoconfigを開いて.datの新しいタイプを追加してください。

クライアントがPACを見つけられるようにDNSまたはDHCPを構成する

おそらく、これはしょっちゅう人々を困惑させるでしょう。「あれ、普通に動くはずじゃないの?」と。しかし、通常は、クライアントがwpad.datファイルをどのように検出するかをネットワークに明示的に指示する必要があります。

  • DHCP(Windows Serverなど)を使用している場合は、オプション252(WPAD)を設定できます。dhcpmgmt.msc開き、スコープを見つけて、以下の詳細を含む新しいオプションを追加します。
    • オプション名: WPAD
    • データ型:文字列
    • コード: 252

    値をwpad.datのURL(例:http://wpad.yourdomain.com/wpad.dat )に設定します。このDNS名がPACファイルをホストしている場所を指していることを確認してください。

  • DNS を使いたい場合は、 Web サーバーを指す「wpad」という A レコードを作成します。Active Directory DNS の場合は、次のコマンドを実行します。 Add-DnsServerResourceRecordA -Name wpad -IPv4Address 192.168.1.50 -ZoneName yourdomain.local

Windows DNSはデフォルトでwpadまたはisatap名をブロックする場合がありますのでご注意ください。以下のコマンドで確認し dnscmd yourdnsserver /info /globalqueryblocklist 、必要に応じて変更してください。

WPADを使用するようにブラウザを設定する

実は、ほとんどのブラウザはWindows/macOSでデフォルトで自動検出するように設定されていますが、念のため確認しておきましょう。Internet ExplorerまたはEdgeでは、 「ツール」>「インターネットオプション」>「接続」>「LANの設定」に移動し、「設定を自動的に検出する」にチェックを入れてください。Chromeやその他のChromiumブラウザも同様で、システムのプロキシ設定やDNS検出に依存しています。

Windowsでは、多数のデバイスを管理している場合、グループポリシーを使ってこれを一元的に設定できます。「ユーザーの構成」>「基本設定」>「コントロールパネルの設定」>「インターネットの設定」に移動し、「設定を自動的に検出する」を有効にしてください。

設定が完了すると、ブラウザはDNSまたはDHCPでwpadを検索します。見つかった場合は、wpad.datファイルを取得し、JavaScriptを実行してルールを適用します。

動作確認するには、Chrome または Edge で を開き、 「ディスクへのログ記録を開始」chrome://net-export/をクリックして、いろいろと見てから停止してください。JSON ログを確認し、または類似のログが表示されていれば完了です。設定によっては LLMNR や NetBIOS が干渉する可能性があるため、DNS が機能しない場合はこれらのプロトコルが有効になっていることを確認してください。"pac_url":"http://wpad/

何らかの理由で WPAD を無効にしたいですか? HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttpに、レジストリ DWORD DisableWpad を1で追加するだけです。

一般的に、WPADとPACファイルの設定は少々扱いにくいですが、一度設定してしまえばプロキシルールの管理が格段に楽になります。さらに、必要に応じてコンテンツフィルタリングやブロックルールを追加することも可能です。柔軟性が高く、クロスプラットフォームで動作し、手動でのプロキシ設定の手間を大幅に省くことができます。

まとめ

  • ネットワークに適したルールを備えたシンプルなwpad.datを構築
  • 正しいMIMEタイプでPACファイルをWebサーバー上に配置しました
  • PACの場所をアナウンスするためにDNSまたはDHCPを設定しました
  • PACファイルを取得するためにブラウザの自動検出設定を有効にしました
  • ネットエクスポートまたはブラウザログで接続をテストしました

まとめ

WPADを正しく動作させるには、特にDNSレコードとウェブサーバーの権限設定に関して、確かに試行錯誤が必要でした。正直なところ、DNSが正しく設定され、PACファイルにアクセスできるようになると、すべてがスムーズに進みました。これは「設定して放っておく」タイプのソリューションの一つですが、そこまでたどり着くまでには、少々手間がかかります。この記事が、誰かの頭を悩ませる問題を少しでも解決してくれるか、少なくともなぜ魔法のようにすぐに動作しないのかを説明することができれば幸いです。