インターネットに繋がらないオフライン環境のサーバーと、その環境に接続する作業用のインターネットに繋がるPCがあるときに、PCをフォワードプロキシにしてオフライン環境のサーバーでapt-get
をする方法のメモ。
Nginxでフォワードプロキシ
(追記)
NginxはCONNECT
をサポートしておらず、HTTPSのプロキシができないっぽかったので、Squidに変更。後述。
HomebrewでNginxをインストールする。
brew install nginx
設定ファイルを編集して、3128
ポートをプロキシとしてListenさせる。
(省略)
server {
listen 3128;
resolver 8.8.8.8;
location / {
proxy_pass $scheme://$http_host$request_uri;
}
}
(省略)
Nginxを起動する。
# サービスとして起動する場合
brew services start nginx
# 普通に起動する場合
nginx
Squidでフォワードプロキシ
HomebrewでSquidをインストールする。
brew install squid
設定ファイルは/usr/local/etc/squid.conf
だがデフォルトのままでよい。
Squidを起動する。
# サービスとして起動する場合
brew services start squid
# 普通に起動する場合
squid
SSHポートフォワード
リモートサーバーに接続し、SSHポートフォワーディングでリモートの3128
ポートをローカルの3128
ポートに転送する。
ssh -R 3128:localhost:3128 user@remote
apt-get
の場合は、環境変数でプロキシを有効にできる。
export http_proxy="http://localhost:3128/"
export https_proxy=$http_proxy
以上でオフライン環境からプロキシを使ってapt-get
が可能。
# apt-get update
Hit:1 https://download.docker.com/linux/ubuntu xenial InRelease
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
Hit:3 http://archive.ubuntu.com/ubuntu xenial InRelease
Get:4 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
Get:5 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
Fetched 325 kB in 2s (150 kB/s)
Reading package lists... Done
#
補足
sudo
でapt-get
を実行する場合は環境変数が引き継がれないので、環境変数を引き継ぐようにsudo
のオプションで-E
を使う。
apt-get
ではなくapt
の場合は環境変数ではなく、/etc/apt/apt.conf
にプロキシ設定をする。
Acquire::http::Proxy "http://localhost:3128/";
Acquire::https::Proxy "http://localhost:3128/";