aquadrops *

Technologies and Labs, Lifelog and more.

2008-09-13

10分でルーターを透過プロキシ化する方法

前回ご紹介した、CentOSで堅牢なPPPoEルーターを1時間で作る方法のおまけ。

ルーターにsquidを使った透過プロキシを設定して、ブラウジングをさらに加速させてみます。

10年ほど前は上位回線が今ほど太くなく(地方のISPだと1Mbps単位で増速とかざらにありました)、帯域節約の為に大手ISPでもプロキシサービスがあったりしたものです。

最近ではギガビットバックボーンが当たり前になっていますので、回線がネックになる事は殆どなくなりました。逆にサーバー側でネックになりつつありますね。

現在は画像を多用したコンテンツが当たり前ですが、毎度毎度同じ画像をサーバーに参照しにいくのも非効率なので、ある程度キャッシュする事でレンダリングを速くする事にします。

自宅や会社等に複数台マシンがある場合、同じサイトを見る事も多くあるかと思いますので、キャッシュする事で回線を有効活用できるかと思います。特にADSLのような10Mbps未満の場合に。

squidのインストール

例によってyumで行います。

# yum install squid

CentOS5の最新バージョンは2.6になります。

squidの設定

/etc/squid/squid.confが生成されるので、このファイルを編集します。

主な変更/追加点は3つ。

# http_postにtransparentオプションの追加

http_port 3128 transparent

# アクセス許可の追加(IPは適宜書き換え)

acl localnet src 10.xxx.xxx.0/255.255.255.0

http_access allow localnet

# ホスト名の追加

visible_hostname home.dknet.jp

iptablesのフィルタリングポリシーに追加

透過させる為に、ローカルネット側から外側に対するHTTPパケットは全てsquid経由にさせます。

# iptables -t nat -A PREROUTING  -p tcp -s 10.x.x.0/255.255.255.0 –dport 80 -j REDIRECT –to-port 3128

ルーターをスルーしていたパケットは、iptablesによって強制的にsquid経由になるので、クライアント側の設定を変えなくても自動的にプロキシを通るようになります。

squidを通っているか確認する

/var/log/squid/access.log にsquid経由でのアクセスログが残ります。

mixiを開いてみた場合…

通っていますね。

実際に使用してみると、proxyを通っているのをあまり感じないくらいサクサクと表示されます。

ここまでの設定だと環境変数「HTTP_X_FORWARDED_FOR」が入ってしまうので、無効にしておいた方がよいかと思います。

さらに工夫する事でURLフィルタリングも可能かと思います。

Macの場合、dolipoというローカルインストールタイプのクライアントもあります。こちらと併用してもよいかもしれません。また、dolipoのベースのpolipoをsquidの代わりに使用してもよいかと思います。

次回はpolipoを透過プロキシに使用してみますかね。