Macbookで複数箇所のネットワーク環境を利用していて、そのうちの一つ以上がproxyな環境の場合、ネットワークを切り替える都度、proxyのON/OFFの設定が必要になる。その手間を最小化するためのメモ。
Macでのproxyの設定方法
そもそも、Macでのネットワークにおけるproxy設定は(多分)以下の2箇所あって、それぞれ設定が同期されないみたい。
- 非ターミナル系:システム>環境設定>ネットワーク
- 適用範囲はSafafi、 Chromeなどのブラウザなど
- ターミナル系:ターミナルからの環境変数の設定(http_proxy他)
- 適用範囲はターミナルなど
非ターミナル系
基本的にはネットワークを変更した時にproxy設定を切り替えられるようにする。
Macではネットワーク環境(Location)という設定があるので、proxy環境用のLocationを定義しておいてこれを利用する。
例えば、OfficeというLocationを定義(作成)して、Location:Officeだけproxyを設定した状態にする。非proxy環境からproxyをつかうネットワークに接続する環境へ切り替えるときはLocation:Officeにすると同時にproxy設定が適用される。
Locationの変更だけだとアクセスポイントまでは連動しないようなので、Locationとアクセスポイントはセットで切り替えるようにする。
ターミナル系
基本的には新規ターミナルを起動した時と、ネットワークを変更した時にproxy設定を切り替えられるようにする。
ターミナル系におけるproxyの設定はコマンドによっても読む環境変数が異なるのでhttp_proxyだけ設定すればいいというわけでもないのでその点は気をつける。
プロキシを切り替えるためのスクリプトを用意する。スクリプトはこちらを参考にした。***YOUR_****の部分は自分の環境に合わせて書き換える。
proxy=YOUR_PROXY_HOST:YOUR_PROXY_PORT
switch_trigger_location=YOUR_LOCATION
switch_trigger_network=YOUR_ACCESS_POINT
function set_proxy() {
export http_proxy=$proxy
export ftp_proxy=$proxy
export all_proxy=$proxy
export https_proxy=$proxy
git config --global http.proxy $proxy
git config --global https.proxy $proxy
git config --global url."https://".insteadOf git://
}
function unset_proxy() {
unset http_proxy
unset ftp_proxy
unset all_proxy
unset https_proxy
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global --unset url."https://".insteadOf
}
if [ "`networksetup -getcurrentlocation`" = "$switch_trigger_location" -a "`networksetup -getairportnetwork en0 | awk '{print $4}'`" = "$switch_trigger_network" ]; then
echo "Switch to proxy for office network"
set_proxy
else
echo "Unset proxy settings"
unset_proxy
fi
いつでもnswitch
コマンド一発で呼び出せるように、以下を追記。
# Proxy
alias nswitch="source ~/.switch_proxy"
ターミナルを起動した時に呼ばれるように以下も追記。
nswitch
ネットワークを手動で変更した時はターミナルから、以下のコマンドを発行して、proxy設定を行う。
$ nswitch
これで環境にあったproxy設定になるはず。