web-dev-qa-db-ja.com

Vagrantボックスでプロキシを使用するように設定する

Vagrantを使用して、テスト用の仮想マシンをセットアップしています。仮想マシン内でaptを使用して、ホストマシンでプロキシを使用し、実行中の仮想マシンのインスタンス間ですべてのダウンロードのキャッシュを維持できるようにします。これにより、速度が向上するだけでなく、次の場合にvagrantインスタンスを開始できるようになります。インターネット接続がありません。

実行中のプロキシをセットアップしました。Vagrantスクリプトでこれを設定することで、プロキシを使用するように指示したと思います。

config.vm.provision :Shell, :inline => 'echo \'Acquire { Retries "0"; HTTP { Proxy "http://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf'
config.vm.provision :Shell, :inline => 'echo \'Acquire { Retries "0"; FTP { Proxy "ftp://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf'
config.vm.provision :Shell, :inline => 'echo \'Acquire { Retries "0"; HTTPS { Proxy "https://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf'

そして、それは部分的に機能しています。つまり、ソースの最初のリクエストはキャッシュにヒットし、wifi接続が無効になっているが、Squidが実行されていて、キャッシュにいくつかのエントリがある場合に機能します。また、SquidsログファイルからSquidにヒットするいくつかのリクエストを確認できます。

1367492453.816     34 127.0.0.1 TCP_REFRESH_MODIFIED/200 592 GET http://security.ubuntu.com/ubuntu/dists/precise-security/Release.gpg - DIRECT/91.189.92.181 -
1367492453.987    168 127.0.0.1 TCP_REFRESH_MODIFIED/200 49973 GET http://security.ubuntu.com/ubuntu/dists/precise-security/Release - DIRECT/91.189.92.181 -
1367492453.999    325 127.0.0.1 TCP_MISS/404 588 GET http://us.archive.ubuntu.com/ubuntu/dists/precise/InRelease - DIRECT/91.189.91.13 text/html
1367492454.113    114 127.0.0.1 TCP_MISS/404 596 GET http://us.archive.ubuntu.com/ubuntu/dists/precise-updates/InRelease - DIRECT/91.189.91.13 text/html

ただし、パッケージのダウンロードの大部分はキャッシュされておらず、Squidを経由していないように見えます。つまり、ダウンロードしたときにネットワークの使用量が多く、Squidアクセスログに表示されないことがわかります。

それで、私の質問は、すべての要求にプロキシを使用するようにAptを構成するにはどうすればよいですか?

ところで、環境変数http_proxyを設定して構成してみました。

 config.vm.provision :Shell, :inline => "echo 'export http_proxy=http://10.0.2.2:3128' >> /etc/profile.d/proxy.sh"

これには同じ効果があります。一部のリクエストはSquidにヒットしているように見えますが、すべてではなく、特に実際のパッケージにはヒットしていません。

5
Danack

Aptがすべてのリクエストにsquidを使用している可能性がありますが、squidは結果をキャッシュしていません。これは、トラフィックをスニッフィングするか、aptがパッケージをダウンロードしている間にsquidをシャットダウンして、失敗するかどうかを確認することで確認できます。 squid構成のmaximum_object_sizeはいくつですか?

2
sciurus

あなたの問題はsquid設定にあるかもしれませんが、トピックに答えるために、今 vagrant-proxyconf プラグインがあります。次の方法でインストールできます。

vagrant plugin install vagrant-proxyconf

これを使用すると、プロジェクト固有のすべてのVagrantfileでシェルプロビジョナーを使用しなくても、$HOME/.vagrant.d/VagrantfileでAptプロキシをグローバルに指定できます。

例:

Vagrant.configure("2") do |config|
  config.apt_proxy.http  = "http://10.0.2.2:3128"
  config.apt_proxy.https = "http://10.0.2.2:3128"
end

またはデフォルトのプロキシ構成:

Vagrant.configure("2") do |config|
  if Vagrant.has_plugin?("vagrant-proxyconf")
    config.proxy.http     = "http://192.168.0.2:3128"
    config.proxy.https    = "http://192.168.0.2:3128"
    config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"
  end
  # ... other stuff
end
8
tmatilai

タイトルの質問に続いて、プライベートネットワークを設定している場合は、次のようになります。

config.vm.network "private_network", ip: "192.168.22.22"
config.vm.provision "Shell", path: "scripts/provision.sh"

次のように、プロビジョニングスクリプトでhttp_proxyをエクスポートするだけで、プロキシを簡単に設定できることがわかりました。

# Detect proxy.
GW=$(netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10)
curl -s localhost:3128 > /dev/null && export http_proxy="http://localhost:3128"
curl -s $GW:3128       > /dev/null && export http_proxy="http://$GW:3128"

次に、通常どおりapt-getを実行します。

これにより、ローカルホスト上のsquidプロキシが検出されるか、ホスト自体が検出されます。

maximum_object_size値を増やすための例は、次のとおりです。

maximum_object_size 64 MB

これはcache_dir行の前に定義する必要があります。

0
kenorb