# ランナーでのプロキシサーバの使用

GitHubとのセキュリティで保護された通信にプロキシ サーバーを使用するように、分離環境のランナーを構成できます。

> \[!NOTE]
> GitHub Enterprise Server ホステッド ランナーは、現在 GitHub ではサポートされていません。

## Linux および Windows ランナー用のプロキシの構成

ランナーがプロキシ サーバー経由で通信する必要がある場合は、環境変数またはシステム レベルの構成を使用してプロキシ設定を構成できます。

| Variable      | Description                                                                               | Example                                                                                     |
| ------------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| `https_proxy` | HTTPS トラフィックのプロキシ URL。 必要に応じて基本認証を含めることができます。                                             | `http://proxy.local`<br>`http://192.168.1.1:8080`<br>`http://username:password@proxy.local` |
| `http_proxy`  | HTTP トラフィックのプロキシ URL。 必要に応じて基本認証を含めることができます。                                              | `http://proxy.local`<br>`http://192.168.1.1:8080`<br>`http://username:password@proxy.local` |
| `no_proxy`    | プロキシをバイパスするホストまたは IP アドレスのコンマ区切りの一覧。 一部のクライアントでは、ホスト名ではなく IP に直接接続する場合にのみ IP アドレスが優先されます。 | `example.com`<br>`example.com,myserver.local:443,example.org`                               |

プロキシ環境変数はランナー アプリケーションの起動時に読み取られます。そのため、ランナー アプリケーションを構成または開始する前に環境変数を設定する必要があります。 プロキシ構成が変更された場合は、ランナー アプリケーションを再起動する必要があります。

Windows マシンでは、プロキシ環境変数の名前では大文字と小文字が区別されません。 Linux及びmacOSマシンで、環境変数はすべて小文字にすることをおすすめします。 Linux または macOS 上で、`https_proxy` と `HTTPS_PROXY` のように、小文字と大文字の両方の環境変数がある場合、セルフホステッド ランナー アプリケーションには小文字の環境変数が使用されます。

セルフホステッド ランナーと GitHub 間の接続は、 HTTP (ポート 80) または HTTPS (ポート 443) 経由です。
HTTPS 経由の接続を確保するには、 GitHub Enterprise Serverの TLS を構成します。 詳細については、 [AUTOTITLE を](/ja/enterprise-server@3.22/admin/configuring-settings/hardening-security-for-your-enterprise/configuring-tls)参照してください。

> \[!WARNING]
> セルフホステッド ランナーは、 `no_proxy` 環境変数での IP アドレスと CIDR 範囲の使用をサポートしていません。
> GitHub Enterprise Server インスタンスが IP アドレスを使用し、そのアドレスのプロキシをバイパスするように`no_proxy`を構成した場合、ランナーは引き続き接続に失敗します。

GitHub Enterprise Server インスタンスに IP アドレスを使用してアクセスし、接続でプロキシをバイパスする必要がある場合、その IP アドレスが `no_proxy` に表示されている場合でも、ランナーは接続に失敗します。

### 構成例

> \[!NOTE]
> 問題を避けるには、使っているオペレーティング システムとシェルの動作に関係なく、環境変数を大文字と小文字を区別するものとして扱うことをお勧めします。

#### Linux と macOS

ランナーのプロキシ環境変数を設定します。

```shell copy
export https_proxy=http://proxy.local:8080
export http_proxy=http://proxy.local:8080
export no_proxy=example.com,localhost,127.0.0.1
```

#### ウィンドウズ

Windows では、環境変数を設定するか [、netsh コマンド](https://learn.microsoft.com/en-us/windows/win32/winhttp/netsh-exe-commands#set-advproxy)を使用してプロキシ設定を構成できます。
netsh アプローチは、WinHTTP API に依存するアプリケーションとサービスに適用されます。

プライベート ネットワークを使用するランナーには、環境変数を設定する必要があります。 netsh も構成する必要があるかどうかは、ワークフローで使用されるアプリケーションによって異なります。

```shell copy
netsh winhttp set advproxy setting-scope=machine settings={\"Proxy\":\"proxy.local:8080\",\"ProxyBypass\":\"168.63.129.16;169.254.169.254\",\"AutoconfigUrl\":\"\",\"AutoDetect\":false} 
```

カスタム イメージの生成中にこれを構成するときは、 `setting-scope=machine` を使用して、再起動後と VM イメージング中にプロキシ設定が保持されるようにします。

### プロキシ設定を永続的にする

カスタム イメージの生成中にこれらの環境変数を設定する場合は、再起動またはイメージの再構築の間に構成が保持されるようにします。

#### Linux と macOS

`/etc/environment`に変数を書き込みます。

```shell
 echo 'http_proxy=http://proxy.local' >> /etc/environment
```

#### ウィンドウズ

システム全体の環境変数を設定します。

```shell copy
[Environment]::SetEnvironmentVariable("http_proxy", "http://proxy.local", "Machine")
```

## Azure ランナー向けプロキシの設定

ランナーが Azure でホストされている場合(セルフホステッド ランナーまたはプライベート ネットワークでデプロイされた GitHub ホスト型の大規模ランナー)、ネットワーク分離を維持しながら GitHub サービスへの送信接続を許可するようにプロキシを構成することが必要になる場合があります。

ランナーが必要な Azure サービスにアクセスできるように、Azure メタデータと管理 IP を `no_proxy` リストに追加する必要があります。 これらのエンドポイントを使用すると、Azure VM は、適切な操作に必要な構成と ID 情報を取得できます。

2 つの Azure IP は次のとおりです。

* 168.63.129.16 ( [Azure IP アドレス 168.63.129.16 の概要](https://learn.microsoft.com/en-us/azure/virtual-network/what-is-ip-address-168-63-129-16?tabs=linux)を参照)
* 169.254.169.254 ( [Azure インスタンス メタデータ サービスを](https://learn.microsoft.com/en-us/azure/virtual-machines/instance-metadata-service?tabs=linux)参照)

## .envファイルを使用したプロキシ設定

> \[!NOTE]
> `.env` ファイルを使用してプロキシ構成を設定することは、GitHub でホストされているランナーでは実行できません。

セルフホステッド ランナーでは、セルフホステッド ランナー アプリケーション ディレクトリ (ランナー ソフトウェアをダウンロードしてアンパックしたディレクトリ) の `.env` ファイルに変数を追加することで、プロキシ設定を構成できます。 この方法は、ランナーがシステム アカウントでサービスとして実行するように構成されている場合に便利です。 ランナーが起動すると、プロキシ構成の `.env` に設定された変数が読み取られます。

### 例 `.env`プロキシ構成

```shell copy
https_proxy=http://proxy.local:8080
no_proxy=example.com,myserver.local:443
```

## Dockerコンテナのプロキシ設定を行う

ワークフロー中でDockerコンテナアクションやサービスコンテナを使うなら、上記の環境変数の設定に加えて、プロキシサーバーを使うようDockerも設定しなければならないかもしれません。

必要な Docker 構成の詳細については、Docker ドキュメントの「[Configure Docker to use a proxy server](https://docs.docker.com/network/proxy/)」(プロキシ サーバーを使うように Docker を構成する) を参照してください。