proxy が存在するネットワークから、インターネット上の何かにアクセスする

この記事は、[富士通ソーシアルサイエンスラボラトリ Advent Calendar 2018](http://qiita.com/advent-calendar/2018/ssl) の 8 日目の記事です。

# はじめに

@GORO_Neko です。ご存知の方ご無沙汰してます。初めての方お初にお目にかかります。

えーっと、先にお断りをば一言。

自分、別段ネットワーク関係のスペシャリストでも何でもありません（そう言えば、その手の取得済み資格の中に、ネットワーク絡みの資格って一切なかったな（^^;　）。

以下は、自分が所属する会社の意向を反映したものでもスタンスを示すものでもなく、単なる一個人の趣味の活動から産まれた記述です。

# proxy が存在するネットワークから、インターネット上の何かにアクセスする

特にユーザ認証（ユーザ名とパスワードを proxy に伝えないと、お外に出させてくれないアレ！）がいる設定の proxy が存在するネットワークからお外のネットワーク（所謂インターネット）へ出ていくための方法の例をいくつか解説します。

実はこの情報を Advent Calendar に発信するのは 2 回目だったりして。
初出はここ Qiita ではなくて、某閉じた世界にひっそり開設されたカレンダ上でした。
たしか「当時」は 2015 年だったはずなのでもう 3 年も前の話。情報を書いたテキストを、そのままべたっとカレンダのページに張ったような覚えが … 

しかし今でも身の回りの IT 屋さん達（新人さんどころか結構トシいった人も）来る日も来る日も「このコマンドがネットワーク乗り越えられなくて、インターネットからモノを取ってこれない（あたふた）」「ググっても対処方法が見つからない（しくしく）」言い続けてらっしゃるようなので、情報をちょっと追加してもう一回書いてみようと思います。

# 対象にするツールやコマンド

このドキュメントでは、以下のツールやコマンド（一部プロトコル）で、インターネットの情報にアクセスしたりアーカイブファイル等何かの資源を取得したりする方法を解説します。

[対象]
1. HTTP/HTTPS/FTP プロトコル（ブラウザで外部ページを参照する以外に、apt-get コマンドもこれで使えるようになります）
2. yum コマンド
3. curl コマンド
4. wget コマンド
5. git コマンド
6. Apache Maven
7. Docker-CE（ docker pull とかする場合必要になるはずです）

# やり方

## HTTP/HTTPS/FTP プロトコル

以下の環境変数を設定します。

```

http_proxy=http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]
https_proxy=http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]
ftp_proxy=http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]
HTTP_PROXY=http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]
HTTPS_PROXY=http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]
FTP_PROXY=http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]

```

コマンド/ツールにより環境変数が大文字のものしか認識しないもの、小文字しか認識しないものがあることに注意が必要です。

Proxy アクセス用ユーザ名/パスワード等にパラメタの区切り文字（'@'等）を含む場合、エスケープ文字表記に書き換える必要があります。

例えはユーザ名が "username@example.com" だった場合は "username%40example.com" と記述する必要があります。
ここに限らず、以降説明する方法でうまく proxy を乗り越えられない場合は、"@" を含む文字列をユーザ名/パスワードとして記述していないかチェックしてみてください。

## yum コマンド

'/etc/yum.conf'の末尾に、以下の情報を追記してください。

```

proxy=http://[ProxyのURL]:[Proxyのポート番号]
proxy_username=[Proxyアクセス用ユーザ名]
proxy_password=[Proxyアクセス用パスワード]

```

## curl コマンド

コマンドを利用するユーザのホームディレクトリ（'/root'、'/home/xxx'等）直下に以下の内容の '.curlrc' ファイルを作成してください。

```

proxy-user = "[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]"
proxy = "http://[ProxyのURL]:[Proxyのポート番号]"

```

## wget コマンド

コマンドを利用するユーザのホームディレクトリ（'/root'、'/home/xxx'等）直下に以下の内容の '.wgetrc' ファイルを作成してください。

```

http_proxy=[ProxyのURL]:[Proxyのポート番号]
https_proxy=[ProxyのURL]:[Proxyのポート番号]
ftp_proxy=[ProxyのURL]:[Proxyのポート番号]
proxy_user=[Proxyアクセス用ユーザ名]
proxy_password=[Proxyアクセス用パスワード]

```

## git コマンド

以下のコマンドを実行してください。

```

git config --global http.proxy http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]
git config --global https.proxy http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]

```

または、コマンドを利用するユーザのホームディレクトリ（'/root'、'/home/xxx'等）直下に以下の内容の '.gitconfig' ファイルを作成してください。

```

[http]
        proxy = http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]
[https]
        proxy = http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]

```

## Apache Maven

'<Mavenをインストールしたディレクトリ>/conf/settings.xml' の '<proxies>～</proxies>' に以下を追記してください。

```

<proxy>
  <id>optional</id>
  <active>true</active>
  <protocol>http</protocol>
  <username>[Proxyアクセス用ユーザ名]</username>
  <password>[Proxyアクセス用パスワード]</password>
  <host>[ProxyのURL]</host>
  <port>[Proxyのポート番号]</port>
</proxy>

```

## Docker-CE

設定ファイル "http-proxy.conf"（*1)に、以下の形式で Proxy 情報を追記してください。

*1: CentOS → /etc/systemd/system/docker.service.d/http-proxy.conf

```

[Service]
Environment="FTP_PROXY=http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]" "HTTP_PROXY=http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]" "HTTPS_PROXY=http://[Proxyアクセス用ユーザ名]:[Proxyアクセス用パスワード]@[ProxyのURL]:[Proxyのポート番号]" "NO_PROXY=localhost,127.0.0.1,[稼働環境に割り当てられたIP（ ex. 10.0.0.1 ）]"

```

Docker サービスを再起動しないと、修正した設定が反映されないことに注意してください。

proxy が存在するネットワーク下で作業をされている方々の苦労が少しでも減ることを願いつつ。
それでは、また。