Привет. Бьюсь со Squid, скоро сойду с ума.
Имеется примерно такая сеть: http://goo.gl/8DxUqR (ничего необычного).
В качестве шлюза в интернет роутер на OpenWrt, в локальной сети установлен компьютер со Squid (на Fedora, если важно). Сеть: 192.168.5.0/24. Нужно прозрачно проксировать веб-трафик через Squid.
Для тестов пока использую вместо 80 другой порт — 8873.
Многострадальный конфиг /etc/squid.conf
: http://pastebin.com/ERXJ8DEy
Часть /etc/config/firewall
на OpenWrt:
config redirect
option src lan
option proto tcp
option src_ip !192.168.5.20
option src_dport 8873
option dest_ip 192.168.5.20
option dest_port 3129
option target DNAT
config redirect
option dest lan
option proto tcp
option src_dip 192.168.5.1
option dest_ip 192.168.5.20
option dest_port 3129
option target SNAT
iptables -t nat -A PREROUTING -i br-lan ! -s 192.168.5.20 -p tcp --dport 8873 -j DNAT --to 192.168.5.20:3129
iptables -t nat -A POSTROUTING -o br-lan -s 192.168.5.0/24 -d 192.168.5.20 -j SNAT --to 192.168.5.1
iptables -A FORWARD -s 192.168.5.0/24 -d 192.168.5.20 -i br-lan -o br-lan -p tcp --dport 3129 -j ACCEPT
По логике все правильно, но не работает. Пытаюсь из локальной сети открыть URL http://example.com:8873/ и получаю «Доступ запрещён»:
$ curl -X HEAD -i example.com:8873
HTTP/1.1 403 Forbidden
Server: squid/3.3.13
Mime-Version: 1.0
Date: Wed, 26 Nov 2014 00:24:49 GMT
Content-Type: text/html
Content-Length: 3280
X-Squid-Error: ERR_ACCESS_DENIED 0
Vary: Accept-Language
Content-Language: en
X-Cache: MISS from anon
X-Cache-Lookup: MISS from anon:3128
X-Cache: MISS from amurdep
X-Cache-Lookup: MISS from anon:3128
Via: 1.1 anon (squid/3.3.13), 1.1 anon (squid/3.3.13)
Connection: keep-alive
В cache.log:
2014/11/26 09:55:35 kid1| WARNING: Forwarding loop detected for:
В access.log:
1416963429.856 0 192.168.5.20 TCP_MISS/403 357 HEAD http://example.com:8873/ - HIER_NONE/- text/html
1416963429.856 1 192.168.5.1 TCP_MISS/403 453 HEAD http://example.com:8873/ - HIER_DIRECT/192.168.5.20 text/html
С хоста со сквидом (192.168.5.20) я могу без проблем открыть нужный URL, т.е. роутер не отправляет трафик обратно. На другой сети с похожей конфигурацией абсолютно все так же не работает.
При этом Tinyproxy работает! Но Squid упорно не пускает и говорит о кольце, хотя его нет. Если в Squid отключить Via и X-Forwaded-For, то Squid не может определить кольцо и зависает. Т.е. у Squid кольцо есть, а у Tinyproxy кольца нет. В непрозрачном режиме через 3128 все работает.
Помогите пожалуйста.
P.S. Tinyproxy + Squid не предлагать :)