3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linux/WSL/Macでproxy環境と非proxy環境のネットワーク設定をよりスマートに切り替える

Last updated at Posted at 2019-08-01

1年前に書いた記事がわりと見られているようですが,もっとスマートな方法があったので書いておきます.

ちなみに筆者はfishユーザですが,本記事ではbash, zshユーザ向けにもスクリプト置いておきます.

どうやるの?

proxy環境下のDNSサーバアドレスが/etc/resolv.conf に書かれているかどうかで判断します.前記事ではSSIDを元に判断していたため,有線で繋いだ場合に対応していませんでしたが,この方法なら大丈夫です.

ちなみに,必ずしもDNSサーバアドレスである必要はなくて,proxy環境下において /etc/resolv.conf に必ず書かれているものを指定しても当然構いません.

スクリプト

bash, zsh

~/.switch_proxy
#!/bin/sh

proxy=hogehoge.com:XXX # プロキシアドレス
_dns="XXX.XXX.XXX.XXX" # プロキシ環境下でのDNSサーバアドレス(cat /etc/resolv.conf で確認してください)

function set_proxy() {
  export http_proxy="http://$proxy"
  export https_proxy="http://$proxy"
  export ftp_proxy="http://$proxy"
  export all_proxy="http://$proxy"
  export no_proxy="127.0.0.1,localhost"

  export HTTP_PROXY="http://$proxy"
  export HTTPS_PROXY="http://$proxy"
  export FTP_PROXY="http://$proxy"
  export ALL_PROXY="http://$proxy"
  export NO_PROXY="127.0.0.1,localhost"

  git config --global http.proxy "http://$proxy"
  git config --global https.proxy "https://$proxy"
  git config --global url."https://".insteadOf git://
}

function unset_proxy() {
  unset http_proxy
  unset https_proxy
  unset ftp_proxy
  unset all_proxy
  unset no_proxy
  unset HTTP_PROXY
  unset HTTPS_PROXY
  unset FTP_PROXY
  unset ALL_PROXY
  unset NO_PROXY

  git config --global --unset http.proxy
  git config --global --unset https.proxy
  git config --global --unset url."https://".insteadOf
}

_dns_state=""

if test -e /etc/resolv.conf; then
  _dns_state=$(grep $_dns /etc/resolv.conf)
fi

if test -n "$_dns_state"; then
  echo -e '\e[31mSet proxy settings\e[m' 1>&2
  set_proxy
else
  echo -e '\e[36mUnset proxy settings\e[m' 1>&2
  unset_proxy
fi
~/.bashrc(.zshrc)
source ~/.switch_proxy

fish

~/.config/fish/switch_proxy.fish
set proxy 'hogehoge.com:XXXX' # プロキシアドレス
set _dns 'XXX.XXX.XXX.XXX' # プロキシ環境下でのDNSサーバアドレス(cat /etc/resolv.conf で確認してください)

set -x http_proxy ''
set -x https_proxy ''
set -x ftp_proxy ''
set -x all_proxy ''
set -x no_proxy ''

function set_proxy
  set -x http_proxy "http://$proxy"
  set -x https_proxy "http://$proxy"
  set -x ftp_proxy "http://$proxy"
  set -x all_proxy "http://$proxy"
  set -x no_proxy '127.0.0.1,localhost'

  set -x HTTP_PROXY "http://$proxy"
  set -x HTTPS_PROXY "http://$proxy"
  set -x FTP_PROXY "http://$proxy"
  set -x ALL_PROXY "http://$proxy"
  set -x NO_PROXY '127.0.0.1,localhost'

  git config --global http.proxy "http://$proxy"
  git config --global https.proxy "https://$proxy"
  git config --global url."https://".insteadOf git://
end

function unset_proxy
  set -e http_proxy
  set -e https_proxy
  set -e ftp_proxy
  set -e all_proxy
  set -e no_proxy
  set -e HTTP_PROXY
  set -e HTTPS_PROXY
  set -e FTP_PROXY
  set -e ALL_PROXY
  set -e NO_PROXY

  git config --global --unset http.proxy
  git config --global --unset https.proxy
  git config --global --unset url."https://".insteadOf
end

if test -e /etc/resolv.conf
  grep $_dns /etc/resolv.conf | read _dns_state
end

if test -n "$_dns_state"
  echo -e '\e[31mSet proxy settings\e[m' 1>&2
  set_proxy
else
  echo -e '\e[36mUnset proxy settings\e[m' 1>&2
  unset_proxy
end
~/.config/fish/config.fish
source ~/.config/fish/switch_proxy.fish
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?