Posted at

Macbookでproxy環境と非proxy環境のネットワーク設定をスマートに切り替えるメモ

More than 3 years have passed since last update.

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_*の部分は自分の環境に合わせて書き換える。


.switch_proxy

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コマンド一発で呼び出せるように、以下を追記。


.bash_profile

# Proxy

alias nswitch="source ~/.switch_proxy"

ターミナルを起動した時に呼ばれるように以下も追記。


.bash_profile

nswitch


ネットワークを手動で変更した時はターミナルから、以下のコマンドを発行して、proxy設定を行う。

$ nswitch

これで環境にあったproxy設定になるはず。


参考