ルーターとインターセプトHTTPsquidプロキシを別のマシンにセットアップしました。クライアントは、次の方法で(知識なしで)プロキシを使用する必要があります。
クライアント->ルーター(プロキシサーバーへのDNATing)->プロキシサーバー->ルーター->インターネット
プロキシサーバーに到着するリクエストには、次の属性があります。
残念ながら、squidはパケットをリクエストの宛先アドレス(プロキシサーバー自体)に転送しようとしており、無限ループを作成しているようです。 cache.log
から取得:
2015/12/18 14:11:50 kid1| WARNING: Forwarding loop detected for:
代わりにDNS経由でHTTPリクエストのホスト名を解決し、デフォルトのHTTPポート80で解決されたIPアドレスにリクエストを転送するようにsquidを構成するにはどうすればよいですか?
追加情報:
DNATは、ルーター上のiptablesによって、次のルールで実行されます:iptables -t nat -A PRE_VS_PROXY -p tcp --dport 80 -j DNAT --to-destination 192.168.4.50:3380
access.log
のエントリ例:
1450444309.741 0 192.168.4.50 TCP_MISS/403 4277 POST http://ocsp.digicert.com/ - HIER_NONE/- text/html
1450444309.742 46 192.168.4.46 TCP_MISS/403 4341 POST http://ocsp.digicert.com/ - ORIGINAL_DST/192.168.4.50 text/html
イカの効果的な構成:
http_access allow localhost manager
http_access deny manager
http_access deny to_localhost
cache deny all
http_access allow all
http_access deny all
http_port 3128
http_port 3380 intercept
http_port 3443 intercept
coredump_dir /var/squid/cache/squid
shutdown_lifetime 1 seconds
Tcpdumpを使用してDNSトラフィックを見ると、squidがHTTPリクエストを処理しているときに、実際には2つのDNSリクエストが行われていることがわかります。1つはHTTPリクエストのホスト名を解決するためのもので、もう1つはリクエストの宛先IPアドレスの逆ルックアップです。
今日も同様の要件を満たしました。少し掘り下げてみると、これは脆弱性を防ぐためのSquidの機能のようです http://www.squid-cache.org/Advisories/SQUID-2011_1.txt 。
https://github.com/squid-cache/squid/blob/master/src/peer_select.cc#L287 からコードを読み取ります。インターセプトモードでのホストのDNSルックアップを意図的に回避します。
http://lartc.org/lartc.html#LARTC.COOKBOOK.SQUID が出発点として適しています。
DNATをプロキシに送信せず、パケットをマークしてトラフィックをプロキシにルーティングします。プロキシからのトラフィックは別のインターフェースを使用します。このルーティングポリシーは適用されていません。