背景
サイト毎に使う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のルールは一切書かない。