Ubuntu Server(GUIなし環境)において、PACファイル(プロキシ自動設定ファイル)が導入されている環境でネットワーク通信(主にAPTパッケージ管理)を有効化するための作業メモです。

背景と注意点

割と頻出する状況だと思います。

  • 検証環境をローカルNWに立てたい
  • でも、社内ポリシーでプロキシーを通す必要がある
  • Windows端末等はGUIで操作できるが、Linuxはそうでない

Ubuntu ServerのCLI環境(apt コマンドなど)は、デフォルトではJavaScriptで記述されたPACファイルを直接解釈できません。

そのため、「PACファイルの内容を確認し、そこに記載されている実際のプロキシサーバーのIPとポートを直接設定する」方法が確実です。

手順1: PACファイルから実際のプロキシ情報を抽出する

まず、サーバー上で curl コマンドを使用してPACファイルの内容を読み込み、転送先となっているプロキシサーバーの「IPアドレス」と「ポート番号」を特定します。

curl -s http://192.168.1.10/proxy.pac

出力例の確認

表示例

function FindProxyForURL(url, host) {
        var clientIP = myIpAddress();
        if (
                isInNet(host, "10.0.0.0", "255.0.0.0") ||
                isInNet(host, "192.168.0.0", "255.255.0.0")
        ) {
                return "DIRECT"; // ローカル通信はプロキシを通さない
        }
        else { 
                // 外部インターネット通信用のプロキシサーバー情報
                return "PROXY 192.168.1.50:8080"; 
        }
}

確認ポイント:

return "PROXY ..." の部分に書かれている情報(上記例では 192.168.1.50:8080)を控えます。

手順2: APT(パッケージ管理)用プロキシの設定

特定したプロキシサーバー情報を、APTの設定ファイルに書き込みます。

設定ファイルの作成・編集

教義・信仰に沿ったエディタを用いて、以下のファイルを編集/作成します。

/etc/apt/apt.conf.d/99proxy

ファイル内に以下の2行を記述します(手順1で確認したIPとポートに置き換えてください)。

Acquire::http::Proxy "http://192.168.1.50:8080/";
Acquire::https::Proxy "http://192.168.1.50:8080/";

gsettingswpad+ などの不要な記述が残っている場合は、すべて削除して上記のみにします。

手順3: 接続テスト(設定の確認)

設定が正しく反映され、インターネット経由でパッケージ情報が取得できるかテストします。

sudo apt update

「無視(Ignored)」や「タイムアウト」のエラーが多発せず、ヒット(Hit)や取得(Get)が進み、最後に 読み込み完了(Reading package lists… Done)と表示されれば設定完了です。

(参考)一般コマンド用(環境変数)の一時設定

もし curlwget など、apt 以外の一般コマンドでもインターネット通信を行いたい場合は、現在のターミナルセッションに対して一時的に以下の環境変数を適用してください。

export http_proxy="http://192.168.1.50:8080"
export https_proxy="http://192.168.1.50:8080"
export no_proxy="localhost,127.0.0.1"