中野智文

中野智文(VOYAGE GROUP)のコンピュータなどのメモ

squidの複数親proxyの設定

2014-05-09 17:35:27 | unix

背景

サイト毎に使うproxyを切り替えないと行けない場合がある。通常ブラウザの設定では、ダイレクトに接続するドメインなどを記述出来るのみで、ドメイン毎に複数の親proxyを指定することは出来ない(chromeやfirefoxなどのブラウザでは、拡張にて切り替えができるものものあるようではある)。 そこでこのページでは、プロクシであるsquidをクライアントマシンに立て、ここから親proxyを設定することで解決する試みるものである。

squidのインストール

私はWindowsに次のページの2.7をインストールした。 Squid for Windows それ以外インストールに関しては、特にコメントはない。多くのページがあるのでそこを検索して参考にして欲しい。 以降はsquidの設定(squid.conf)に関してである。

順序があるcache_peer

cache_peerディレクティブの本来の使い方は、複数のsquidのホストがある場合の設定のようである。しかし我々が興味が有るのは、親proxyの設定だけである。おそらくは、
cache_peer proxy1.aaa.com parenet 8080 0 no-query
cache_peer proxy2.aaa.com parenet 8080 0 no-query
のような形で記述すると思う。ここで注意しなくてはいけないのは、上記には順序があるということである。 上から順番に接続しに行く模様で、接続できなければ、別の親proxyを選ぶということはないので注意が必要である。 参考までに、Squid/複数親プロキシでは、「特殊性がありますので、最初に記述します」と書かれている。

cache_peer_accessは一つのドメインしか書いてはいけない

acl domain1 dstdomain .aaa.com
acl domain2 dstdomain .bbb.com
cache_peer_access proxy1.aaa.com allow domain1 domain2
みたいなことは出来ない。(domain1かつdomain2となるらしい)よって、
acl domain1 dstdomain .aaa.com
acl domain2 dstdomain .bbb.com
cache_peer_access proxy1.aaa.com allow domain1
cache_peer_access proxy1.aaa.com allow domain2
と書くべき、らしい。またはdomain1をまとめて、
acl domain1 dstdomain .aaa.com
acl domain1 dstdomain .bbb.com
cache_peer_access proxy1.aaa.com allow domain1
とする。参考までに、10. アクセスコントロール(ACL)というページの「10.8 よくあるミス」にも説明が書かれている。

cache_peer_accessの設定

allowやdenyについて意味は理解できるが、親proxyが設定されていた時にcache_peer_accessを設定しない場合の振る舞いなどについてはっきりわからない。 参考までに(その点が全くわからない不親切な)公式のページである。 Squid configuration directive cache_peer_access

直接接続

ブラウザのproxyの設定でも書けるが、
acl my-local dst 10.0.0.0/8
never_direct allow all
always_direct allow my-local
とすると、my-localは親proxyを通さずアクセスされる。これらは親proxyの設定に対し完全に優先して書けるので便利。 (親proxyのルール側でmy-localへの否定ルールを作成する必要はない。)

まとめ(おすすめの設定)

親プロクシはproxy2がデフォルトで、特定のドメイン.aaa.comと.bbb.comの時のみproxy1を使いたい場合で、 プライペートアドレス(例えば10.0.0.0/8)と.ccc.comへはダイレクトに接続したい場合は次のように書く。
cache_peer proxy1.aaa.com parenet 8080 0 no-query
cache_peer proxy2.aaa.com parenet 8080 0 no-query # the default proxy is here

acl proxy1-domain dstdomain .aaa.com
acl proxy1-domain dstdomain .bbb.com
cache_peer_access proxy1.aaa.com allow proxy1-domain
# no rules for the default proxy

acl my-local dst 10.0.0.0/8
acl my-local dst 172.166.0.0/12
acl my-local dst 192.168.0.0/16
acl direct-domain dstdomain .ccc.com
acl direct-domain dstdomain .ddd.com
never_direct allow all
always_direct allow my-local
always_direct allow direct-domain
    ヒント:
  • cache_peerは最後にデフォルトproxyが来るようにすること。
  • 親proxyとドメインの組のみcache_peer_access allowする。
  • cache_peer_access deny allは一切書かない。次のサイトの例は書かれているが、書くとうまく動かない。Squid/複数親プロキシ
  • デフォルト親proxyのルールは一切書かない。

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。