Windowsでのプロキシ設定方法

概要

Windowsでのプロキシ設定方法を、ユーザー単位(WinINET)システム全体(WinHTTP) に分けて解説します。
例: ProxyServer = http=<<PROXY_ADDRESS>>;https=<<PROXY_ADDRESS>> のように、環境依存の値は <<変数名>> で表記しています。


変数表記について

本記事では、環境依存の値を以下のように表記しています。実際の環境に合わせて読み替えてください。

変数名 設定例 備考
<<PROXY_ADDRESS>> proxy.example.com:8080 プロキシサーバのホスト名とポート番号
<<PROXY_BYPASS>> intranet.example.com;192.168.*;<local> プロキシを経由しないドメインやサブネット、ローカルアドレス指定。;で連結
<<ADVPROXY_SETTINGS_PATH>> C:\proxy-settings.json advproxy の設定ファイルを配置するパス

Step 1: プロキシ設定の種類を理解する

種類 対象 用途
ユーザー単位 (WinINET) ログオンユーザー ブラウザ、ユーザーアプリケーションの通信。ユーザーの IE/Edge 設定が反映される
システム単位 ((WinHTTP) サービスアカウント/OS全体 Windows Update、BITS、Defender の更新通信を含むシステム通信

BITS (Background Intelligent Transfer Service) は、Windows Update や Microsoft Defender の定義更新など、バックグラウンドでデータを効率的に転送するサービスです。
システムアカウント(LocalSystem)で動作するため、ユーザー単位のプロキシ設定(WinINET)は反映されません。


Step 2: PowerShellでユーザー単位のプロキシを設定

$proxy = "<<PROXY_ADDRESS>>"
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" `
  -Name ProxyEnable -Value 1
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" `
  -Name ProxyServer -Value "http=$proxy;https=$proxy"
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" `
  -Name ProxyOverride -Value "<<PROXY_BYPASS>>"

確認:

Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | Select ProxyEnable, ProxyServer, ProxyOverride

Step 3: システム全体のプロキシを設定(WinHTTP / BITS 用)

① 旧方式(Windows Server 2019以前)

netsh winhttp set proxy <<PROXY_ADDRESS>> "<<PROXY_BYPASS>>"
netsh winhttp show proxy

② 新方式(Windows Server 2022以降 推奨)

JSONファイルを作成:

@'
{
  "ProxyIsEnabled": true,
  "Proxy": "http=<<PROXY_ADDRESS>>;https=<<PROXY_ADDRESS>>",
  "ProxyBypass": "<<PROXY_BYPASS>>",
  "AutoConfigIsEnabled": false,
  "AutoDetect": false
}
'@ | Out-File "<<ADVPROXY_SETTINGS_PATH>>" -Encoding ascii

設定を適用:

netsh winhttp set advproxy setting-scope=machine settings-file="<<ADVPROXY_SETTINGS_PATH>>"

JSONファイルを使用しない場合は、以下のようにコマンドで直接指定します。

netsh winhttp set advproxy setting-scope=machine settings='{\"ProxyIsEnabled\":true,\"Proxy\":\"http=<<PROXY_ADDRESS>>;https=<<PROXY_ADDRESS>>\",\"ProxyBypass\":\"<<PROXY_BYPASS>>\",\"AutoConfigIsEnabled\":false,\"AutoDetect\":false}'

JSONファイルを管理する必要がないため、簡単なテストや一時的な環境構築時に便利です。


Step 4: BITSのプロキシ設定をローカルシステムに反映

bitsadmin /util /setieproxy localsystem MANUAL_PROXY <<PROXY_ADDRESS>> "<<PROXY_BYPASS>>"
bitsadmin /util /getieproxy localsystem

Step 5: 設定の確認・トラブルシューティング

netsh winhttp show proxy
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | Select ProxyEnable, ProxyServer, ProxyOverride

もし Windows Update がプロキシ経由で失敗する場合は、AutoDetect を無効化し、Server Core環境では advproxy コマンド形式を利用すること。


プロキシ設定をリセットする場合

不要になったプロキシ設定をリセットする場合は、以下のコマンドを使用します。

ユーザー単位(WinINET)の設定をリセット

Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyEnable -Value 0
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyServer -ErrorAction SilentlyContinue
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyOverride -ErrorAction SilentlyContinue

システム単位(WinHTTP / advproxy)の設定をリセット

netsh winhttp reset proxy

または、Server 2022以降の新形式を使用している場合は以下のように実行します。

netsh winhttp set advproxy setting-scope=machine settings='{\"Proxy\":\"\",\"ProxyBypass\":\"\",\"AutoconfigUrl\":\"\",\"AutoDetect\":false}'

まとめ

Windowsのプロキシ設定は、大きく分けて ユーザー単位(WinINET)システム単位(WinHTTP / advproxy) の2種類が存在します。

  • WinINET はユーザーのブラウザやアプリケーション通信に影響し、IEやEdgeの設定に対応します。
  • WinHTTP / advproxy はWindows UpdateやBITS、Defenderなどのシステム通信に影響します。

Windows Server 2022以降の環境では、advproxy コマンドによる設定が推奨されますが、従来の winhttp コマンドも互換性のため有効です。
また、bitsadmin を併用することで、LocalSystem アカウントに対しても正しくプロキシを反映できます。

運用上は以下の手順を意識するのがポイントです。

  1. 通信対象のレイヤーを把握する(ユーザー通信 or システム通信)
  2. 該当レイヤーに応じて WinINET / WinHTTP を正しく設定
  3. Server Coreでは advproxy を利用
  4. 不要になったら reset proxy / reset advproxy で初期化

これにより、Windows Update や Defender 更新、BITS 転送が安定して動作し、プロキシ経由環境でも通信エラーを回避できます。