/var/log/Sawada.log

SAINO中毒患者の備忘録。

プロキシの設定をいい感じに管理する

はじめに

お久しぶりです,梅雨で憂鬱なさわだです.

UECでは,学内から学外のネットワークへ接続する際にproxyの設定が必要でした.
ラボマシンのみならITCのドキュメントを参照すれば良いですが,
自宅と大学を行き来するMBPやThinkpadはちょっと不便です.そこでちょっと楽になるスクリプトを書きました.

方針

proxyに阻まれてできないと困ることは主にパーケージ管理とgitです.あとは作業GBMを聴くためにネットが使えれば◎

  • パッケージ管理 brew/apt 対応
  • Git対応
  • ProxyのON/OFF

スクリプト

#!/usr/bin/env bash

# Author: takuzoo3868
# Last Modified: 10 May 2019.

HTTP_PROXY_HOST=proxy.uec.ac.jp
HTTP_PROXY_PORT=8080
HTTPS_PROXY_HOST=proxy.uec.ac.jp
HTTPS_PROXY_PORT=8080

SHELL_RC=$HOME/.bashrc_local
GIT_CONFIG_FILE=$HOME/.gitconfig.local
CURL_RC=$HOME/.curlrc

environment_on(){
  sudo sed -i.bak "/all_proxy/Id" /etc/environment
  sudo sed -i.bak "/ALL_PROXY/Id" /etc/environment
  sudo sed -i.bak "/http_proxy/Id" /etc/environment
  sudo sed -i.bak "/HTTP_PROXY/Id" /etc/environment
  sudo sed -i.bak "/https_proxy/Id" /etc/environment
  sudo sed -i.bak "/HTTPS_PROXY/Id" /etc/environment
  sudo sed -i.bak "/ftp_proxy/Id" /etc/environment
  sudo sed -i.bak "/FTP_PROXY/Id" /etc/environment
  sudo tee -a /etc/environment <<EOF
all_proxy="socks://$HTTP_PROXY_HOST:$HTTPS_PROXY_PORT/"
ALL_PROXY="socks://$HTTP_PROXY_HOST:$HTTPS_PROXY_PORT/"
http_proxy="http://$HTTP_PROXY_HOST:$HTTP_PROXY_PORT"
HTTP_PROXY="http://$HTTP_PROXY_HOST:$HTTP_PROXY_PORT"
https_proxy="http://$HTTPS_PROXY_HOST:$HTTPS_PROXY_PORT"
HTTPS_PROXY="http://$HTTPS_PROXY_HOST:$HTTPS_PROXY_PORT"
ftp_proxy="ftp://$HTTP_PROXY_HOST:$HTTPS_PROXY_PORT"
FTP_PROXY="ftp://$HTTP_PROXY_HOST:$HTTPS_PROXY_PORT"
EOF
  echo "set UEC proxy environment for Linux!!!"
}

environment_off(){
  sudo sed -i.bak "/all_proxy/Id" /etc/environment
  sudo sed -i.bak "/ALL_PROXY/Id" /etc/environment
  sudo sed -i.bak "/http_proxy/Id" /etc/environment
  sudo sed -i.bak "/HTTP_PROXY/Id" /etc/environment
  sudo sed -i.bak "/https_proxy/Id" /etc/environment
  sudo sed -i.bak "/HTTPS_PROXY/Id" /etc/environment
  sudo sed -i.bak "/ftp_proxy/Id" /etc/environment
  sudo sed -i.bak "/FTP_PROXY/Id" /etc/environment
  echo "See you UEC, welcome my home!!!"
}

proxy_on(){
  export http_proxy=http://proxy.uec.ac.jp:8080/
  export https_proxy=https://proxy.uec.ac.jp:8080/
  export ALL_PROXY=http://proxy.uec.ac.jp:8080/
  git config --file $GIT_CONFIG_FILE http.proxy $http_proxy
  git config --file $GIT_CONFIG_FILE https.proxy $https_proxy
  git config --file $GIT_CONFIG_FILE url."https://".insteadOf git://
  echo "set UEC proxy!!!"
}

proxy_off(){
  unset http_proxy
  unset https_proxy
  unset ALL_PROXY
  git config --file $GIT_CONFIG_FILE --unset http.proxy
  git config --file $GIT_CONFIG_FILE --unset https.proxy
  git config --file $GIT_CONFIG_FILE --unset url."https://".insteadOf
  echo "unset UEC proxy!!!"
}

## on/off proxy
if [ ! -f "$SHELL_RC" ]; then
  touch $SHELL_RC
fi

if [ ! -f "$GIT_CONFIG_FILE" ]; then
  touch $GIT_CONFIG_FILE
fi

if [ ! -f "$CURL_RC" ]; then
  touch $CURL_RC
fi

if [[ $(uname) = "Linux" ]]; then

  if [[ $(iwgetid -r) == "UECWireless" ]] || [[ $(iwgetid -r) == "LAB-SSID" ]] || [[ $(uname -n) == "LAB-UNAME" ]]; then
    proxy_on
    environment_on
  else
    proxy_off
    environment_off
  fi

elif [[ $(uname) = "Darwin" ]]; then
  AIRPORT="/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport"

  if test "` ${AIRPORT} -I |grep [^B]SSID|awk '{print $2}'`" = "UECWireless" || test "` ${AIRPORT} -I |grep [^B]SSID|awk '{print $2}'`" = "LAB-SSID"; then
    proxy_on
    export ALL_PROXY=http://proxy.uec.ac.jp:8080/
    export http_proxy=http://proxy.uec.ac.jp:8080/
    export https_proxy=https://proxy.uec.ac.jp:8080/
  else
    proxy_off
    unset ALL_PROXY
    unset http_proxy
    unset https_proxy
  fi
fi 

運用

複数ある端末(ハッキングラボも含めて)の作業環境を統一するためにdotfilesを使っている事は以前の記事で紹介しました.

takuzoo3868.hatenablog.com

takuzoo3868.hatenablog.com

あれから色々更新していますが,基本的にこれらを使用することに変わりありません.

今回のproxyスクリプトもPATHの通っている.local/binへ配置します.

gitで管理しているbashrcとgitconfigを弄るのは避けたいので共にlocalrcを使うことで回避します.

おわりに

これでターミナル上でset_proxyと打つだけで繋いでるネットワークを識別してproxyの設定を切り替えてくれるようになりました.今の所,これで事足りていますがまた阻まれる案件があれば修正すると思います.スクリプト含め設定ファイルはいつもの場所に.ではまた.

github.com