squidのビルド&インストール

海外の出張先でネットワークの調子が悪く、Webがまともに使えないと言う事態に遭遇しています。orz 何かホテルのtransparent proxy側でDNSが引けてない模様でGoogleさえ「The requested URL could not be retrieved」といわれてしまいます。既にWebは一つのライフラインなので使えないと結構痛い。。。
Web以外はIPアドレスを直接指定すれば通信はでき、一応自宅のLS-GLにはSSH接続できるので、急遽squidを立ててSSH経由で中継させることにしました。セキュリティ上も良さそうだし…。

ビルド

ビルドは、全てLS-GL上で行います。

% cd /mnt/disk1/NeoCat   # そろそろ / の空きが少なくなってきたため…
% GET http://core.ring.gr.jp/archives/net/www/squid/squid-2/STABLE/
squid-2.6.STABLE11.tar.gz > squid-2.6.STABLE11.tar.gz

(GETはperlのLWPを入れた際に作られたコマンド)とかやって安定版のsquidをダウンロードし、

% tar xzf squid-2.6.STABLE11.tar.gz
% cd squid-2.6.STABLE11
% ./configure --prefix=/usr/local/squid --with-openssl=/usr/local/ssl   # 念のため失敗した際に備えて /usr/local/squid 以下に入れる
% make all
% su
% make install

makeは10分ほど掛かります。これでとりあえずビルド&インストールできました。

設定ファイルの編集

/usr/local/squid/etc/squid.conf をざーっと見て、以下の設定をしてみました。
まず、http_access deny all と書いてある前の行に

http_access allow localhost

を追加(デフォルトでは全ての接続が蹴られます)。デフォルトで acl localhost src 127.0.0.1/255.255.255.255 と定義されているようですので、これでローカルホストからのみの接続を受け付けます。あとは気分的に、

forwarded_for off # 中継先のIPアドレスをHTTPリクエストのヘッダ(X-Forwarded-For:)に含めない

としておきます。後は今回は別にキャッシュはして欲しくないので(ディスクの空きもないし)、

no_cache deny all

とでも"最後に"追記しておきます(allの定義の後に)。あと、自分のFQDNDNSで引けないと起動しないので、

visible_hostname ls-gl.****.**.net

などと追加。

起動

初回の起動前にキャッシュディレクトリを作る必要があります。実際には使わないはずだけどないと起動しませんので。squidはnobodyで動くので、

# chown -R nobody  /usr/local/squid/var
# /usr/local/squid/sbin/squid -z  # Create Cache Dir

とかやります。

そして、起動。

# /usr/local/squid/sbin/squid

フォワードとブラウザの設定

SSHのセッションで改行を押した後「~C」と打ち込むとコマンドラインが出ますので、

-L 3128:127.0.0.1:3128

と打ち込めば、SSH接続元:3128 ==> SSH接続先から見た127.0.0.1:3128 と SSH port fowardを開始できます。(もちろんsshの起動時に上記をオプションとしてつけてもOK。)

あとはブラウザのプロキシ設定をlocalhost:3128にすれば、目的達成です。さすがにスループットはちょっと遅い(ピークで100KB/s, 平均30KB/sくらい?)ですが、普通に使えてます。良かった、やれやれ。