Я использую прозрачный прокси-сервер squid для кеширования, и у меня также есть кеширование YouTube, выполненное с помощью url_rewrite и скрипта apache, запущенного на той же машине, что и squid.
Все работало нормально, пока я не решил использовать TPROXY, так как у него много преимуществ. Когда я реализовал правила tproxy в iptables, все продолжало работать, кроме воспроизведения видео на YouTube, где в игру вступают url_rewriter и скрипт apache. Url_rewriter перенаправляет запросы youtube на локальный сценарий .php, работающий на Apache (на той же машине).
Я думаю, что это как-то связано с тем, как squid взаимодействует с локальным процессом apache (где работает программное обеспечение для кеширования youtube), и каким-то образом tproxy портит это, потому что после реализации tproxy запросы к Apache отправляются с USER- IP (предыдущий без tproxy, это было с SQUID-IP), и ответ от сценария apache, вероятно, идет напрямую пользователю, а не возвращается через процесс squid.
Также скрипт apache должен иметь возможность свободно связываться с реальными серверами YouTube, чтобы получать оттуда видео.
Вот мои правила для tproxy, но я думаю, что они довольно стандартные:
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 8081
echo 1 > /proc/sys/net/ipv4/ip_forward
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
Система - UBUNTU 12.04 с версией squid 3.1.19.
Кто-нибудь испытывал ту же проблему и, в конечном итоге, какое-то обходное решение с параметрами Squid или с правилами iptables?