出社時と在宅時で、プロキシの接続情報を変更する必要がある。 手で切り替えるのを忘れて社内システムにつながらない…ということがよく発生するので、自動化することにした。
切り替えたい対象
- プロキシ設定
- git proxyの設定を環境に応じて変更
実現方法
- proxy.pac をローカルのhttpサーバーで配布
- Macのネットワーク設定 > Location で自宅と職場でproxy.pacのURLをそれぞれ設定
- git proxyをset,unsetするコマンドを実行
- wifiのSSIDが家か職場を判定して分岐する
- トリガーはスリープからの復帰時
プロキシ設定について
プロキシの設定はproxy.pacを使って行う。 職場では社内で配布されるproxy.pacのURLを入力すればいいが、 自宅では、自前のproxy.pacを作って設定したい。
しかし、Mojaveからローカルのproxy.pacを file://
で設定することができなくなった
macOS 10.14 Mojave 以降で pac ファイルを使って proxy の設定を行いたいけど出来なかった話 - Qiita
Deprecations
The
ftp://
andfile://
URL schemes for Proxy Automatic Configuration (PAC) are deprecated. HTTP and HTTPS are the only supported URL schemes for PAC. This affects all PAC configurations including, but not limited to, configurations set via Settings, System Preferences, profiles, andURLSession
APIs such asconnectionProxyDictionary
, andCFNetworkExecuteProxyAutoConfigurationURL(_:_:_:_:)
. (37811761)
そのため、ローカルにhttpサーバーを立てて http://localhost
を設定する方法をとる
proxy.pacをローカルのhttpサーバーで配布
httpdをインストール、自動起動
proxy.pacを配置
/opt/homebrew/var/www/
にproxy.pacを置く
http://localhost/proxy.pac で取得できるようになる
Macのネットワーク設定 > Location で自宅と職場でproxy.pacのURLをそれぞれ設定
それぞれのLocationで、proxy.pacのURLを入力する
自宅: http://localhost/proxy.pac
職場: 社内のproxy.pacのURL
ネットワーク切り替え時に実行するスクリプトを作成
sleep復帰時にスクリプトを実行する
sleepwatcherをインストール
スリープ前や復帰時にスクリプトを実行できるようになる
plistファイルを作成する
~/Library/LaunchAgents
以下にファイルを作成
-w
スリープ復帰(Wake Up)時に実行するコマンド-s
スリープ(Sleep)時に実行するコマンド
launchdに登録
参考
Mac のスリープ/復帰時にスクリプトを実行する - Qiita Macの起動/スリープ復帰時に自動でVPNに接続する / LOG Mac でネットワーク環境を使う方法 - Apple サポート (日本) macOS 10.14 Mojave 以降で pac ファイルを使って proxy の設定を行いたいけど出来なかった話 - Qiita