> Доброго времени суток, читатель!
> Обращаюсь к тебе с проблемой в надежде обрести немного помощи. Суть такова:
> Есть FreeBSD 10.1 с тремя интерфейсами, два из которых объединены в мост
> без адреса. Интерфейсы также без адресов. Третий - с адресом, для
> О&М нужд. Стоит сквид 3.5.4 в режиме TPROXY. Не получается направить
> на него HTTP-траффик.
> Гуглил очень долго, ориентировался в первую очередь на: https://www.opennet.ru/openforum/vsluhforumID12/7113.html
> Подскажите, пожалуйста, что я делаю не так? Использование ipfw мне не принципиально,
> остальное важно.Попробовал другой подход. Использовал Нетграф:
#!/bin/sh
kldload -v ng_ether
kldload -v ng_bpf
kldload -v ng_eiface
ngctl mkpeer bge0: bpf lower bge0-lower
ngctl name bge0:lower br-bpf
ngctl connect bge0: br-bpf: upper bge0-upper
ngctl connect bge1: br-bpf: lower bge1-lower
ngctl connect bge1: br-bpf: upper bge1-upper
ngctl mkpeer br-bpf: eiface squid ether
PATTERN="tcp dst port 80"
INHOOK="bge0-lower"
MATCHHOOK="squid"
NOTMATCHHOOK="bge1-lower"
BPFPROG=$( tcpdump -s 8192 -ddd ${PATTERN} | grep -v WARNING | \
( read len ; \
echo -n "bpf_prog_len=$len" ; \
echo -n " bpf_prog=[" ; \
while read code jt jf k ; do \
echo -n " { code=$code jt=$jt jf=$jf k=$k }" ; \
done ; \
echo " ]" ) )
ngctl -d msg br-bpf: setprogram { thisHook=\"${INHOOK}\" \
ifMatch=\"${MATCHHOOK}\" \
ifNotMatch=\"${NOTMATCHHOOK}\" \
${BPFPROG} }
PATTERN="tcp src port 80"
INHOOK="bge1-lower"
MATCHHOOK="squid"
NOTMATCHHOOK="bge0-lower"
BPFPROG=$( tcpdump -s 8192 -ddd ${PATTERN} | \
( read len ; \
echo -n "bpf_prog_len=$len" ; \
echo -n " bpf_prog=[" ; \
while read code jt jf k ; do \
echo -n " { code=$code jt=$jt jf=$jf k=$k }" ; \
done ; \
echo " ]" ) )
ngctl msg br-bpf: setprogram { thisHook=\"${INHOOK}\" \
ifMatch=\"${MATCHHOOK}\" \
ifNotMatch=\"${NOTMATCHHOOK}\" \
${BPFPROG} }
ngctl msg bge0: setpromisc 1
ngctl msg bge1: setpromisc 1
ngctl msg bge0: setautosrc 0
ngctl msg bge1: setautosrc 0
Сквид перенастроил на 80 порт.
2015/05/26 16:19:04.349 kid1| Accepting TPROXY intercepted HTTP Socket connections at local=0.0.0.0:80 remote=[::] FD 17 flags=25
В итоге:
tcpdump -i ngeth0 -vvv -s0 tcp dst port 80
tcpdump: listening on ngeth0, link-type EN10MB (Ethernet), capture size 65535 bytes
17:17:09.767118 IP (tos 0x0, ttl 128, id 921, offset 0, flags [DF], proto TCP (6), length 52)
192.168.1.10.25055 > 192.168.1.20.http: Flags [S], cksum 0x8521 (correct), seq 2363512694, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
17:17:12.231562 IP (tos 0x0, ttl 128, id 924, offset 0, flags [DF], proto TCP (6), length 52)
192.168.1.10.25055 > 192.168.1.20.http: Flags [S], cksum 0x8521 (correct), seq 2363512694, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
А в кеш.логе пусто. Ситуация повторяется. Что-то не так с самим сквидом?