Windows10の設定の手動プロキシ セットアップが正しく動いていない件とその対応
問題
Windows10の設定の手動プロキシ セットアップ (Manual proxy setup)が(条件によって?)正しく動いていない件
環境
Windows 10 (大分昔のバージョンから。もしかしたら最初からかも)
背景
以前のWindowsではプロキシの設定はInternetExprolerから設定するのがよくある方法だったと思う。
Internet Option -> Local Area Network (LAN) Settings の Proxy serverから
"User a proxy server for your LAN (These settings will not apply to dial-up or VPN connections)" をオンにする。
さらに、Socksプロキシなどを使っている場合は Advancedから 下記画像のような設定を行う。 sshのDynamic Proxyを使っているケースではこのような設定をすることになるだろう。 (なお、例ではSocksのプロキシサーバーをlocalhostの8080番ポートで動かしている)
Windows 10でも上記の方法は正しく動くのであるが、サポートが終わるIEを使い続けるのもよろしくない。
現象
上記のような場合、Windows 10 の標準機能で対応するものは 設定 -> ネットワークとインターネット -> プロキシ の画面である。
IEでの設定と同じもの設定の表記は図の様に、
- アドレス: http://socks=localhost
- ポート: 8080
となる。
これで問題なく動いているように思われる… が、実はここに大きな問題がある。
問題その①
設定を編集できない。
例えば、ポートを8080から8081に変更して保存しても、再度設定画面を開くと元に戻ってしまっているのだ。 保存ボタンが動いていないようだ。。。
問題その➁
トグルスイッチでプロキシをオフにはできるが、オンにはできない。
プロキシの設定をオン -> オフにすると無事に通信がプロキシ経由でなくなる。 一方、オフ -> オンにしても、再度設定画面を開くと元に戻ってしまっている。もちろんプロキシは有効になっていない。
解決策1
上記の設定は、
Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings
の
- ProxyServer (RED_SZ)
- ProxyEnable (REG_DWORD)
のキーに保存されている。
例の設定だと、"ProxyServer"は"socks=localhost:8080" となり、Proxyのオン/オフはProxyEnableの1/0の対応している。
なので、下記の二つのファイルを用意する。
ProxyEnable.reg
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings] "ProxyEnable"=dword:00000001
ProxyDisable.reg
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings] "ProxyEnable"=dword:00000000
上記のファイルをそのまま実行する場合、無意味に管理者権限を要求されるため(今回は管理者権限が不要な範囲の書き換えしか行っていないため)、次のコマンドでファイルを読み込む
プロキシを有効にしたいとき
ProxyEnable.bat
reg import ProxyEnable.reg
プロキシを無効にしたいとき
ProxyDisable.bat
reg import ProxyDisble.reg
解決策2
オシャレにPowershellで解決したい場合
ProxySetting.ps1
param( [switch] $Enable, [switch] $Disable ) if ($Enable -ne $Disable){ Set-ItemProperty -LiteralPath 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings' -Name 'ProxyEnable' -Value ([int]$Enable.IsPresent) }else{ Write-Output "Parameter Error" }
プロキシを有効にしたいとき
powershell -file .\ProxySetting.ps1 -Enable
プロキシを無効にしたいとき
powershell -file .\ProxySetting.ps1 -Disable
雑感
プロキシの設定に関するバリデーションが間違っているのだろうな。と推測。 プロキシ設定を有効にする際や設定の保存を行う際に、"設定"が入力された文字をチェックして、未対応の場合はエラーも出さずに処理を破棄してしまっているのかと。そのうち直してくれるといいなぁという気持ち。