WSL(Windows Subsystem for Linux)のProxy設定方法

この記事は約10分で読めます。

Windows上でLinuxコマンドを使うためには、 MSYS2 などがありますよね。最近は別の選択肢として、MicrosftストアからLinuxをインストールできるようになりました。WSL(Windows Subsystem for Linux)という名前そうです。以前は Bash on Ubuntu on Windows と呼ばれていたように記憶しています。今は Ubuntuに限らず他のディストリビューションも使えるようです。

Proxy環境下では、WSL上からネットにアクセスしたりapt-getしたりするには、別途WSL側にもProxy設定が必要となります。今回はその設定方法を説明します。

Docker のプロキシ設定については下記の記事もご参照ください。

https://hangstuck.com/docker-proxy-setting/

スポンサーリンク

Proxy未設定時のエラー

Proxyを使っている環境でWSLでのProxy設定をしていない場合、例えばsudo apt updateを実行すると下記のようなエラーが出ます。ぱっとみ、DNS関係のエラーにも見えますが、Proxy未設定でもこのエラーが出ます。
(DNSの問題でもおそらく同じようなエラーが出ると思いますが、今回はProxyに絞って説明します)

username@hostname:~$ sudo apt update
Ign:1 http://archive.ubuntu.com/ubuntu xenial InRelease
Ign:2 http://security.ubuntu.com/ubuntu xenial-security InRelease
Ign:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease
Err:4 http://security.ubuntu.com/ubuntu xenial-security Release
  Something wicked happened resolving 'security.ubuntu.com:http' (-5 - No address associated with hostname)
Ign:5 http://archive.ubuntu.com/ubuntu xenial-backports InRelease
Err:6 http://archive.ubuntu.com/ubuntu xenial Release
  Something wicked happened resolving 'archive.ubuntu.com:http' (-5 - No address associated with hostname)
Err:7 http://archive.ubuntu.com/ubuntu xenial-updates Release
  Something wicked happened resolving 'archive.ubuntu.com:http' (-5 - No address associated with hostname)
Err:8 http://archive.ubuntu.com/ubuntu xenial-backports Release
  Something wicked happened resolving 'archive.ubuntu.com:http' (-5 - No address associated with hostname)
Reading package lists... Done
E: The repository 'http://security.ubuntu.com/ubuntu xenial-security Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: The repository 'http://archive.ubuntu.com/ubuntu xenial Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: The repository 'http://archive.ubuntu.com/ubuntu xenial-updates Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: The repository 'http://archive.ubuntu.com/ubuntu xenial-backports Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

スポンサーリンク

proxyの設定の確認

WSLのプロキシ設定は、基本的に現在Windows側にて設定されているものを使えばOKです。そこでまずは現状のプロキシ設定を確認します。

まずはじめに「コントロールパネル」を開きます。そのなかの「インターネットオプション」を選択します。

次に、「接続」タブを選択し「LANの設定」をクリックします。そうするとProxyなどの設定をするウィンドウが開きます。そこにProxyのアドレスとポート番号が書いてありますのでそれをメモします。

これでプロキシ設定の確認は終わりです。

PAC を使っている場合

基本的に上記の方法でいいのですがもしPACを使っている場合はひと手間いります。もし上記の右の設定画面にて「自動構成スクリプトを使用する」にチェックが入っていればPACをつかっています。その場合は書きを参考にして見てください。

WSLやGit for WindowsでのProxy設定方法|PACファイルでも
Windows上でLinuxライクな環境を使うにはWSLやMSYS2(もしくはGit for Windows、Cygwin など)がありますね。その際、職場で使うときは、Proxyの設定が必要になることが多いと思います。Windows側の設...
スポンサーリンク

http_proxy変数の設定

http_proxyとhttps_proxyという環境変数を設定する必要があります。これはMSYS2と同じですね。

ホームディレクトリ直下の.bashrcに下記のように設定を書いておけば良いと思います。これでログイン時に自動で設定されます。
「proxy-host」「proxy-port」には、先ほど確認したプロキシのアドレスとポート番号を入れて下さい。
「username」と「passward」は、WSLのではなくProxyのユーザ名とパスワードです。


export ftp_proxy=http://username:password@proxy-host:proxy-port
export http_proxy=http://username:password@proxy-host:proxy-port
export https_proxy=http://username:password@proxy-host:proxy-port

export FTP_PROXY=http://username:password@proxy-host:proxy-port
export HTTP_PROXY=http://username:password@proxy-host:proxy-port
export HTTPS_PROXY=http://username:password@proxy-host:proxy-port

スポンサーリンク

apt.confの設定

次にapt.confファイルの設定です。/etc/apt/apt.confにて下記を設定して下さい。もし/etc/apt/apt.confがなければ新規に作成して下さい。行末の「;」を忘れないようにご注意ください。


Acquire::ftp::proxy "http://username:password@proxy-host:proxy-port";
Acquire::http::proxy "http://username:password@proxy-host:proxy-port";
Acquire::https::proxy "http://username:password@proxy-host:proxy-port";

これで設定は終わりです。WSLターミナルを一旦終了して、再度起動してみて下さい。sudo apt updateが成功すればOKです。

OK時は下記のような感じになります。

$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu xenial InRelease
Get:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
Get:3 http://security.ubuntu.com/ubuntu xenial-security InRelease [107 kB]
Get:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
Fetched 323 kB in 1s (181 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
スポンサーリンク

curl の設定

.bashrc にプロキシ設定を書いておけばこれは不要かと思いますが、参考までに書いておきます。
下記のような感じで .curlrc に設定をかけばOKです。


echo 'proxy="http://username:password@proxy-host:proxy-port"' >> ~/.curlrc

スポンサーリンク

/etc/environment

これも無くても大丈夫かと思いますが、参考までに書いておきます。/etc/environment の設定です。下記のように追記すればOKです。

$ sudo bash -c 'echo "http_proxy=http://username:password@proxy-host:proxy-port"  >> /etc/environment'
$ sudo bash -c 'echo "https_proxy=https://username:password@proxy-host:proxy-port" >> /etc/environment'
$ sudo bash -c 'echo "ftp_proxy=ftp://username:password@proxy-host:proxy-port"   >> /etc/environment'
$ sudo bash -c 'echo "HTTP_PROXY=http://username:password@proxy-host:proxy-port" >> /etc/environment'
$ sudo bash -c 'echo "HTTPS_PROXY=https://username:password@proxy-host:proxy-port" >> /etc/environment'
$ sudo bash -c 'echo "FTP_PROXY=ftp://username:password@proxy-host:proxy-port"   >> /etc/environment'
スポンサーリンク

まとめ

今回はWSL(Windows Subsystem for Linux)のProxy設定の方法を説明しました。~/.bashrcと/etc/apt/apt.confに設定を追加すればOKです。ご参考になれば幸いです。

Docker のプロキシ設定については下記の記事もご参照ください。

https://hangstuck.com/docker-proxy-setting/

コメント

  1. masa@TP より:

    Docker内のプロキシ設定で詰まってる最中、
    他のどのページを見ても解決できなかったのですが、
    偶然辿り着いたこのページに従って設定したところ解決しました。

    丁寧な解説でとても助かりました。ありがとうございました。

    • hangstuck より:

      Dockerでも同じような感じでいけるんですね。私はDockerほとんど使ったことないのですが、なるほど。
      お役に立てなら幸いです!