晴耕雨読

working in the fields on fine days and reading books on rainy days

Linuxサーバからプロキシ経由でyum/aptインストールをする

リモートのLinux環境から直接インターネットに接続できない環境で、ローカルのプロキシ経由でインターネットに接続する方法について説明します。

     (internet)                 (internet)
         ^                          ^
         | :80                      X
         |                          |
    +----------+   ssh :22    +--------------+
    | local PC | ----------> | remote Linux |
    +----------+ <---------- +--------------+
                 proxy :8888

構成図は上の通りです。ローカルPCからリモートのLinuxにはSSH接続ができる状態です。

(1) ローカルでプロキシサーバを起動

Windowsの場合、ローカルでFiddlerを起動して、プロキシがローカルの8888番ポートで動作していることを確認します(ここではFiddlerを使用していますが、お好きなプロキシを使ってください)。 なお、Fiddlerのポート番号は「歯車アイコン」>「Settings」>「Connections」から確認できます。

MacOSの場合はプロキシサーバとして squid をインストールします。デフォルトポートは3128番です。

% brew install squid
% brew services run squid
% curl https://example.com -x http://localhost:3128

以下ではプロキシサーバが 8888 番で動作しているものとします。

(2) リモートプロキシフォーワード

ssh接続時に -R オプションを指定してリモートの8888番をローカルの8888番に転送します。

% ssh 接続先 -R 8888:127.0.0.1:8888

(3) リモートでプロキシ設定

リモートでプロキシ接続先の環境変数を設定します。

~]# PROXY='127.0.0.1:8888'
~]# export http_proxy=$PROXY
~]# export HTTP_PROXY=$PROXY
~]# export https_proxy=$PROXY
~]# export HTTPS_PROXY=$PROXY

もし、ログイン時に常にプロキシ環境変数を設定したい場合は、profile.d に以下スクリプトを配置します。

~]# cat <<'EOS' > /etc/profile.d/myproxy.sh
PROXY='127.0.0.1:8888'
export http_proxy=$PROXY
export HTTP_PROXY=$PROXY
export https_proxy=$PROXY
export HTTPS_PROXY=$PROXY
EOS

(4) リモートでインターネットとの接続確認

curlでインターネット接続を確認します。

~]# curl example.com

(4-1) RHEL, CentOSの場合

yumで接続先にプロキシのIPを指定します。

~]# echo 'proxy=http://127.0.0.1:3128' >> /etc/yum.conf
~]# cat /etc/yum.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
proxy=http://127.0.0.1:3128

さらに、yum update時の証明書チェックを無効化します。

~]# ls /etc/yum.repos.d
~]# sed -i 's/^sslverify=1/sslverify=0/g' /etc/yum.repos.d/*.repo

最後にyum/dnf updateを実行します。

~]# dnf update

(4-2) Ubuntuの場合

設定ファイル /etc/apt/apt.conf を以下の内容で新規作成してから、apt updateを実施します。

~]# cat <<'EOS' >> /etc/apt/apt.conf
Acquire::http::Proxy "http://127.0.0.1:8888";
Acquire::https::Proxy "http://127.0.0.1:8888";
EOS

~]# apt update

パッケージの update ができれば install も同様に実行できます。

以上です。