|
||
|
二つ以上のプロキシールーティングをする(直接アクセス)他のパターンはプロキシーサーバを構築する(解説)を参照してください。宛先により別のプロキシーへルーティングするのと変わりませんが、想定したように動かないことがあります。 ちょっとしたテクニックが必要です。 コンフィグは整理して書きましょう。あとでややこしくなります。 ・インストール ・コンフィグの編集 ・動作試験 インストールインストールは特に苦労することはありません。比較的大人しい部類に入ります。 GUIからのインストール 「ソフトウェアの追加と削除」からインストールする場合 コマンドからのインストール #yum install squid インストールしたら、GUIかコマンドにてファイアウォールを解放します。 ここでは80ポートか8080ポートを使用するので、ポートを解放します。 コマンドの場合は/etc/sysconfig/iptablesを編集し、 -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 8080 -j ACCEPT という行を最終の「Reject」行の前に挿入します。 その後、iptablesサービスを再起動します。 コンフィグの編集/etc/squid/squid.confを編集します。コンフィグは前方参照の性質があるので、呼び出される情報は先に宣言されていなくてはなりません。 それぞれの設定項目は例が示してあるセクションに記述するのが無難です。 squid.confは非常に長いのですが、面倒でもそのセクションまで移動しましょう。 「TAG: cache_peer」などとすると検索しやすいです。 下位プロキシー(図中proxyA) cache_peer 上位プロキシーを指定します。コンフィグの末尾に追加したりせず、ちゃんとcache_peerセクションに記述するとトラブルが少ないでしょう。 上位プロキシーの待ち受けポート番号を指定します。以下のパラメータでは8080。 二つ指定しますが、これだけでは「どちらを使っても良い」という意味にしかなりません。 cache_peer proxyB.example.local parent 8080 0 no-query cache_peer proxyC.example.local parent 8080 0 no-query http_port まっさきに編集すべきはプロキシーとして待ち受けるポートです。 覚えにくい3128なんてデフォルトポートを使ってる状況はまずないでしょう。 80や8080がメジャーです。 http_port 8080 icp_port ICPのポートなんてのも、兄弟プロキシを使わないので要りません。 デフォルトの icp_port 0 visible_hostname エラー画面を表示したとき、どこのサーバかを示します。複数のプロキシサーバを組む場合、どこでエラーが発生しているかを判断できます。 visible_hostname squidA.example.local http_access デフォルトではプロキシへアクセスできるセグメントはローカルホストに限定されています。 とりあえず全てのクライアントを許可します。「http_access deny all」行よりも前に追加します。 http_access allow all もしプロキシー接続できるクライアントを制限したいのなら、「http_access allow all」の代わりに以下のACLを追加します。 Ver2.0以前 acl CLIENTS src 192.168.1.0/255.255.255.0 http_access allow CLIENTS Ver3.0以降 acl CLIENTS src 192.168.1.0/255.255.255.0 http_access allow CLIENTS acl 指定ドメインのプロキシールーティングで使用するACLです。 その他のインターネットアクセスを直接取得に設定します。 ドメイン名の指定は、ドメインの前にドットを忘れないよう「.yahoo.co.jp」という指定をします。 acl yahoo dstdomain .yahoo.co.jp .yimg.jp acl goo dstdomain .goo.ne.jp cache_peer_access 特定のドメインはサイドプロキシを使用するように指定します。 これがないと全てのインターネット閲覧がサイドプロキシへ転送されます。 この場合は、yahoo.co.jpで終わるドメイン全てを、(ProxyCへの転送を禁止して)proxyBへ転送。 gooで終わるドメイン全てを(ProxyBへの転送を禁止して)ProxyCへ転送します。 直接取得の禁止はこの後に設定します。 cache_peer_access proxyB.example.local deny goo cache_peer_access proxyC.example.local deny yahoo never_direct 指定ドメインは明示的に直接取得を禁止します。これで、サイドプロキシがダウンした場合、「無事」に閲覧できなくなります。 cache_peer_accessでドメインが指定してあっても、そちらのプロキシがダウンしていたりすると、インターネット側へリクエストを流してしまいます。 never_direct allow yahoo never_direct allow goo always_direct 指定されたドメイン以外は直接取得にしたいので、明示的にインターネット接続は直接取得を許可します。 さもないとcache_peerで設定されているプロキシーのどちらかへリクエストを投げてしまいます。 always_direct allow !yahoo always_direct allow !goo 設定を保存したらサービスを再起動します。 #service squid restart サイドプロキシ(図中proxyB、ProxyC) http_access 通常、下位プロキシーをバイパスしてクライアントたちが直接上位プロキシーを指定しないよう、下位プロキシー以外は拒否するのが普通です。デフォルトで「http_access deny all」が指定されているので、許可端末を指定します。 Ver2.0以前 acl proxyserver src 192.168.1.100/255.255.255.255 http_access allow proxyserver Ver3.0以降 acl proxyserver src 192.168.1.100/255.255.255.255 http_access allow proxyserver http_port 待ち受けポートです。下位プロキシーのcache_peerで指定されるポートに記述します。 ファイアウォールでポート閉じてるとか、初歩的なミスに注意しましょう。 http_port 8080 visible_hostname エラー画面を表示したとき、どこのサーバかを示します。複数のプロキシサーバを組む場合、どこでエラーが発生しているかを判断できます。それぞれのホスト名を記述します。 visible_hostname proxyB.example.local 設定を保存したらサービスを再起動します。 #service squid restart 動作試験squidのアクセスログを監視します。上位プロキシ、下位プロキシBCの全てで以下のコマンドを実行して、ログを監視します。 #tail -f /var/log/squid/access.log YAHOOドメインを閲覧した場合はProxyBのログも流れ、その他のインターネットドメインを閲覧した場合はProxyAのみログが流れれば成功です。 すでにProxyAにキャッシュが溜まっていると、サイドプロキシを使うはずのドメインでもキャッシュで解決してしまいProxyBへアクセス形跡がないことがありますので、ときどきキャッシュをクリアします。 #service squid stop #rm -rf /var/spool/squid/* #squid -z #service squid start なお、アクセス拒否のキャッシュがされているとそれを返されるので、いろいろなURLでアクセステストをしてみましょう。 あまりコンフィグをあちこちイジっていると、always_directのアクセスを拒否とか、http_accessで下位サーバを拒否しているとか、許可されてクライアントでブラウジングはできるものの意図しない動作まで許可しているとか、チェック項目が増えます。 サーバが二台に増えたのでコンフィグの見通しも悪く、トラブルも複合要因になり、複雑化しやすいです。 コンフィグはその都度どこを編集したかこまめにメモを取るなどしないと、同じ設定を再現できなくなりますのでご注意を。 |
|