Squidの透過的な設定を一般的なNATこれはIPv4のみに制限されており、IPv6をサポートするためにTPROXYに切り替えています。透過的なクライアントをただし、新しいセットアップでは、すべてのリクエストにsquidが対応し、すべてのリクエストで次のエラーがスローされます。
"要求されたURLを取得できませんでした"
どこかにルーティングの問題があるように見えますが、何が問題なのかわかりません。
DD-WRTルーターとSquidProxyでiptables
とip6tables
を使用し、iproute2
を使用して両側のルーティング部分を実行しています。
デフォルトでは、ip6table_mangle
モジュールはDD-WRTにデフォルトでロードされていないようですが、ルーターで実行されているビルドにコンパイルされています。
find /lib/modules -name "*.ko" | grep -i mangle
/lib/modules/3.10.89/ip6table_mangle.ko
モジュールをロードし、将来の起動のために起動スクリプトに追加しました。
insmod ip6table_mangle
DD-WRTルーティング情報:
# Squid transparent proxy
PROXY_IPV4="192.168.x.x"
PROXY_IPV6="xxxx:xxxx:xxxx:xxxx::x"
CLIENTIFACE=br0
FWMARK=3
iptables -t mangle -A PREROUTING -i $CLIENTIFACE -p tcp --dport 80 -s $PROXY_IPV4 -j ACCEPT
ip6tables -t mangle -A PREROUTING -i $CLIENTIFACE -p tcp --dport 80 -s $PROXY_IPV6 -j ACCEPT
iptables -t mangle -A PREROUTING -i $CLIENTIFACE -p tcp --dport 80 -j MARK --set-mark $FWMARK
iptables -t mangle -A PREROUTING -m mark --mark $FWMARK -j ACCEPT
ip6tables -t mangle -A PREROUTING -i $CLIENTIFACE -p tcp --dport 80 -j MARK --set-mark $FWMARK
ip6tables -t mangle -A PREROUTING -m mark --mark $FWMARK -j ACCEPT
iptables -t filter -A FORWARD -i $CLIENTIFACE -o $CLIENTIFACE -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A FORWARD -i $CLIENTIFACE -o $CLIENTIFACE -p tcp --dport 80 -j ACCEPT
ip rule add fwmark $FWMARK table 2
ip -6 rule add fwmark $FWMARK table 2
ip route add default via $PROXY_IPV4 table 2
ip -6 route add default via $PROXY_IPV6 table 2
# End Squid intercept proxy config
Squidプロキシルーティング(サーバー自体):
iptables -F -t mangle
iptables -X -t mangle
ip6tables -F -t mangle
ip6tables -X -t mangle
iptables -t mangle -N DIVERT
ip6tables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129
ip6tables -t mangle -A DIVERT -j MARK --set-mark 1
ip6tables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
ip6tables -t mangle -A DIVERT -j ACCEPT
ip6tables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129
ip -f inet rule add fwmark 1 lookup 100
ip -f inet route add local default dev eno1 table 100
ip -f inet6 rule add fwmark 1 lookup 100
ip -f inet6 route add local default dev eno1 table 100
squid conf:
http_port 3129 tproxy
sysctl config:
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.eno1.rp_filter = 0
eno1
は、私もlo
を使用してみましたが成功しなかったメインのイーサネットインターフェイスです。
トラフィックはSquidボックスに渡されているため、ルーターがその役割を果たしているように見えます。トラフィックがSquidボックスに到達し、そこで問題が発生しているように見える場合です。すべてのリクエストはログに記録されていますが、500エラーが返されます。
私の知る限り、私のセットアップはTPROXYをサポートしています。
これらのソースをガイダンスとして使用しましたが、動作するセットアップを取得できません。
何が問題になるか、またはさらにデバッグするためのアドバイスはありますか?
すべてが正しく設定されていることがわかります。実際の問題は、Privoxyのcache_peerディレクティブです。スローされたエラーは、実際にはSquidがトラフィックをPrivoxyに渡すことができないと言っています。これは、tproxyの設定が混乱しているためです。
これを回避するには、cache_peer行にno-tproxy
を追加する必要があります
cache_peer hostname parent 8118 7 no-tproxy ...