ラズパイをプロキシサーバー(キャッシュサーバー)として使う( Raspbian & Squid )
スポンサーリンク
大したネタではないですが備忘録。
複数の仮想マシンでapt
(あるいはyum
とかHomebrewも含めて)で同じパッケージをダウンロードをするケースが結構ある。
Ubuntu 16.04の仮想マシンが複数あるとして、どっちも同じようにapt upgrade
を実行すると、同じ修正パッケージを取得することになり、明らかに無駄。
ホスト側でプロキシサーバーを動かして、透過型プロキシもありかと思ったけど、ちょっと面倒だなってことでラズパイを活用してみる。
構成
仮想化ホストマシンと同じサブネット上に接続したラズパイをキャッシュサーバーとして使う。
スループットの面からすると激しくイマイチだけど、どのみち外向けの回線がWiMAX2+なので問題ない。
ラズパイのイーサネットポートは100MbpsなのでIEEE 802.11n のWifiの方が速度は出るかもしれない。
要件
- LAN内部に設置
- ローカルホストおよび仮想マシン(ゲスト)から接続できればOK
- ある程度大き目のファイル(100MB〜200MBぐらい)もキャッシュさせたい
- ラズパイの microSD の空き領域の有効活用(10GBぐらいはキャッシュに使って問題ない)
インストール
$ sudo apt update $ sudo apt upgrade $ sudo apt install squid $ sudo apt install squidclient
squidclient
は動作状態をチェックするためのツールです。なくても動作します。
設定
$ sudo vi /etc/squid/squid.conf
修正結果の差分は以下のとおり。
$ sudo diff -N /etc/squid/squid.conf.orig /etc/squid/squid.conf 609,611c609,611 < acl localnet src 10.0.0.0/8 # RFC1918 possible internal network < acl localnet src 172.16.0.0/12 # RFC1918 possible internal network < acl localnet src 192.168.0.0/16 # RFC1918 possible internal network --- > #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network > #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network > acl localnet src 192.168.0.0/24 # RFC1918 possible internal network 676c676 < #http_access allow localnet --- > http_access allow localnet 1738c1738 < # cache_mem 8 MB --- > cache_mem 16 MB 1747c1747 < # maximum_object_size_in_memory 8 KB --- > maximum_object_size_in_memory 16 KB 1945c1945 < # cache_dir ufs /var/spool/squid 100 16 256 --- > cache_dir ufs /var/spool/squid 8196 16 256 1988c1988 < # maximum_object_size 20480 KB --- > maximum_object_size 204800 KB 3392a3393 > visible_hostname unknown 4699c4700 < # forwarded_for on --- > forwarded_for off
要点は、
- ローカルネットワーク(192.168.0.0/24)からのアクセスを許可
- キャッシュするファイルのサイズを大きく(
maximum_object_size
) - 使用するディスク領域の上限を大きく(
cache_dir
) - プロキシ経由であることをアクセス先に通知しない(
forwarded_for
)
下記のコマンドで設定ファイルの書式のチェック。
$ sudo squid -k parse
エラーが出なければプロセスを起動。
$ sudo systemctl start squid
設定ファイルのリファレンス:squid : Optimising Web Delivery
有効化
問題なく動くようなら自動的にsquid
起動するようにする。
$ sudo systemctl enable squid
クライアント側の設定
ブラウザからは利用するようにしてもいいが、基本的にapt
やgit
で同じファイルをダウンロードするケースを高速化できればいいので環境変数のみセットする。
VirtualBox 上のゲスト
VirtualBoxの「環境設定」から「プロキシ」タブを選択して「手動設定」で設定する。ゲスト側は気にする必要がない。
コンソール系のツール
一度実行すればあとはコマンド履歴から再実行すればいい。ノートPCを持って外出する場合は環境変数の値を空にする。
export http_proxy=http://プロキシサーバーのIP:3128 export https_proxy=$http_proxy export ftp_proxy=$http_proxy export rsync_proxy=$http_proxy export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
ポート番号をデフォルトの"3128"から変更している場合はそれに合わせて修正する。
手作業で環境変数をセットするのが面倒ならArch Linuxにオンオフを切り替えるスクリプトの例が記載されているのでこれを参考にする。
sudo
経由で実行するコマンドは設定しない限り環境変数は引き継がないので注意する(Arch Linux のWikiを参照。
動作状態のチェック
悲しいことにsquidclient
コマンドを実行するとIPv6のポートへ接続しようとするのでエラーになる。
$ squidclient -h localhost mgr:mem client: ERROR: Cannot connect to [::1]:3128: Connection refused
対処法としては-h
でIPv4のアドレスを指定する。
$ squidclient -h 127.0.0.1 mgr:mem Sending HTTP request ... done. HTTP/1.0 200 OK Server: squid/2.7.STABLE9 Date: Thu, 09 Mar 2017 19:30:52 GMT Content-Type: text/plain Expires: Thu, 09 Mar 2017 19:30:52 GMT X-Cache: MISS from unknown X-Cache-Lookup: MISS from unknown:3128 Via: 1.0 unknown:3128 (squid/2.7.STABLE9) Connection: close Current memory usage: Pool Obj Size Allocated In Use Idle Allocations Saved Hit Rate (bytes) (#) (KB) high (KB) high (hrs) impact (%total)(#) (KB) high (KB) portion (%alloc) (#) (KB) high (KB) (number) (%num) (%vol) (%num) (number) 2K Buffer 2048 2 4 4 0.42 2 2 4 4 100 0 0 2 28 0.52 5.89 93.33 30 4K Buffer 4096 4 16 16 0.35 7 1 4 16 25 3 12 16 61 1.13 25.65 93.85 65 Store Client Buffer 4096 1 4 4 0.05 2 1 4 4 100 0 0 4 3 0.06 1.26 75.00 4 acl 48 11 1 1 0.42 0 11 1 1 100 0 0 0 0 0.00 0.00 0.00 11 acl_ip_data 16 5 1 1 0.42 0 5 1 1 100 0 0 0 0 0.00 0.00 0.00 5 acl_list 12 23 1 1 0.42 0 23 1 1 100 0 0 0 0 0.00 0.00 0.00 23 CacheDigest 24 1 1 1 0.42 0 1 1 1 100 0 0 0 0 0.00 0.00 0.00 1 <skip>
他にも確認できる項目の一覧を表示する場合は、squidclient -h 127.0.0.1 mgr:
を実行。
関連URL
- squid : Optimising Web Delivery
- FrontPage - Squid Web Proxy Wiki
- rasbianにSquidをインストール - Qiita
- プロキシ設定 - ArchWiki
- Squid - ArchWiki
今更な感じもしますが、ないよりマシでしょうってことで。
[2017/03/12 追記] よく考えたらgithub経由のダウンロードはHTTPS経由なんで(プロキシではキャッシュできないので)大した効果はない……。
それではまた。