概要
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 アカウントに対しても正しくプロキシを反映できます。
運用上は以下の手順を意識するのがポイントです。
- 通信対象のレイヤーを把握する(ユーザー通信 or システム通信)
- 該当レイヤーに応じて WinINET / WinHTTP を正しく設定
- Server Coreでは
advproxyを利用 - 不要になったら
reset proxy/reset advproxyで初期化
これにより、Windows Update や Defender 更新、BITS 転送が安定して動作し、プロキシ経由環境でも通信エラーを回避できます。
