Доброго времени суток, читатель!
Обращаюсь к тебе с проблемой в надежде обрести немного помощи. Суть такова:
Есть FreeBSD 10.1 с тремя интерфейсами, два из которых объединены в мост без адреса. Интерфейсы также без адресов. Третий - с адресом, для О&М нужд. Стоит сквид 3.5.4 в режиме TPROXY. Не получается направить на него HTTP-траффик. Правила ipfw использую такие:ipfw add 1100 fwd 127.0.0.1,8080 log ip from any to any 80 in recv bge0
ipfw add 1101 fwd 127.0.0.1 log ip from any 80 to any in recv bge1
В итоге счетчки растут:
01100 56 10370 fwd 127.0.0.1,8080 log logamount 50 ip from any to any dst-port 80 in recv bge0
01101 44 33438 fwd 127.0.0.1 log logamount 50 ip from any 80 to any in recv bge1
Логи пигшутся:
May 17 19:46:02 squid kernel: ipfw: 1100 Forward to 127.0.0.1:8080 TCP 192.168.1.10:13944 192.168.1.20:80 in via bge0
May 17 19:46:02 squid kernel: ipfw: 1101 Forward to 127.0.0.1 TCP 192.168.1.20:80 192.168.1.10:13944 in via bge1
А на сквиде - пусто. Если застопить сквид, то ничего не меняется, следовательно все идет мимо. В этом вся проблема.
В качестве предыстории расскажу, что сначала пробовал запустить intercept с использованием pf - все заработало, когда присвоил адрес мосту (интерфейсы без адресов), но, естественно, подменяло адрес источника, чего мне не надо. Поэтому перешел к режиму tproxy.
Итак, конфиг сквида:
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
acl manager url_regex -i ^cache_object:// /squid-internal-mgr/
http_access allow localhost manager
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128
http_port 127.0.0.1:8080 tproxy
refresh_pattern ^ftp: &n... 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
#refresh_pattern . 0 20% 43200 override-lastmod reload-into-ims
refresh_pattern . 0 20% 4320
debug_options ALL,1 0,9 5,9 11,9 17,9 73,9 76,9 89,9 22,3 3,3 28,9
logformat squid %{%Y.%m.%d %H:%M:%S %z}tl %6tr %>a %Ss/%03>Hs %<st %rm %ru %un %Sh/%<A %mt
access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
В кеш логе на старте:
2015/05/17 20:03:49.015 kid1| Accepting TPROXY intercepted HTTP Socket connections at local=127.0.0.1:8080 remote=[::] FD 17 flags=25
squid -v:
configure options: '--with-default-user=squid' '--bindir=/usr/local/sbin' '--sbindir=/usr/local/sbin' '--datadir=/usr/local/etc/squid' '--libexecdir=/usr/local/libexec/squid' '--localstatedir=/var' '--sysconfdir=/usr/local/etc/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/var/run/squid/squid.pid' '--with-swapdir=/var/squid/cache' '--without-gnutls' '--enable-auth' '--enable-build-info' '--enable-loadable-modules' '--enable-removal-policies=lru heap' '--disable-epoll' '--disable-linux-netfilter' '--disable-linux-tproxy' '--disable-translation' '--disable-arch-native' '--disable-eui' '--disable-cache-digests' '--disable-delay-pools' '--disable-ecap' '--disable-esi' '--disable-follow-x-forwarded-for' '--enable-htcp' '--disable-icap-client' '--disable-icmp' '--enable-ident-lookups' '--disable-ipv6' '--enable-kqueue' '--with-large-files' '--disable-http-violations' '--without-nettle' '--enable-snmp' '--disable-ssl' '--disable-ssl-crtd' '--disable-stacktraces' '--disable-ipf-transparent' '--enable-ipfw-transparent' '--disable-pf-transparent' '--with-nat-devpf' '--disable-forw-via-db' '--disable-wccp' '--disable-wccpv2' '--with-heimdal-krb5=/usr' 'CFLAGS=-I/usr/include -O2 -pipe -fstack-protector -fno-strict-aliasing' 'LDFLAGS=-L/usr/lib -pthread -fstack-protector' 'LIBS=-lkrb5 -lgssapi -lgssapi_krb5 ' '--enable-auth-basic=DB SMB_LM MSNT-multi-domain NCSA PAM POP3 RADIUS fake getpwnam' '--enable-auth-digest=file' '--enable-external-acl-helpers=file_userip time_quota unix_group' '--enable-auth-negotiate=kerberos wrapper' '--enable-auth-ntlm=fake smb_lm' '--enable-storeio=ufs aufs diskd' '--enable-disk-io=AIO Blocking IpcIo Mmapped DiskThreads DiskDaemon' '--enable-log-daemon-helpers=file' '--enable-url-rewrite-helpers=fake' '--enable-storeid-rewrite-helpers=file' '--prefix=/usr/local' '--mandir=/usr/local/man' '--infodir=/usr/local/info/' '--build=amd64-portbld-freebsd10.1' 'build_alias=amd64-portbld-freebsd10.1' 'CC=cc' 'CPPFLAGS=' 'CXX=c++' 'CXXFLAGS=-O2 -pipe -fstack-protector -fno-strict-aliasing ' 'CPP=cpp' '--enable-ltdl-convenience'
В /etc/rc.conf лежит следующее:
hostname="squid"
sshd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
zfs_enable="YES"
background_fsck="NO"
defaultrouter="10.16.0.1"
ifconfig_bge3="inet 10.16.2.165/22"
cloned_interfaces="bridge0"
ifconfig_bridge0="addm bge0 addm bge1 up"
ifconfig_bge0="up"
ifconfig_bge1="up"
firewall_enable="YES"
firewall_type="open"
firewall_logging="YES"
squid_enable="YES"
squid_user="root"
В процессе тестов правила ipfw добавляю вручную. Получается так:
00100 0 0 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
00400 0 0 deny ip from any to ::1
00500 0 0 deny ip from ::1 to any
00600 0 0 allow ipv6-icmp from :: to ff02::/16
00700 0 0 allow ipv6-icmp from fe80::/10 to fe80::/10
00800 0 0 allow ipv6-icmp from fe80::/10 to ff02::/16
00900 0 0 allow ipv6-icmp from any to any ip6 icmp6types 1
01000 0 0 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136
01100 82 8498 fwd 127.0.0.1,8080 log logamount 50 ip from any to any dst-port 80 in recv bge0
01101 56 30724 fwd 127.0.0.1 log logamount 50 ip from any 80 to any in recv bge1
65000 17790 1820248 allow ip from any to any
65535 0 0 deny ip from any to any
Ну и sysctl -a | grep forward:
kern.smp.forward_signal_enabled: 1
net.inet.ip.forwarding: 1
net.inet.ip.fastforwarding: 0
net.inet6.ip6.forwarding: 0
kldstat:
Id Refs Address Size Name
1 16 0xffffffff80200000 17627c8 kernel
2 1 0xffffffff81963000 2f94a0 zfs.ko
3 2 0xffffffff81c5d000 6040 opensolaris.ko
4 1 0xffffffff81e11000 939c if_bridge.ko
5 1 0xffffffff81e1b000 53f8 bridgestp.ko
6 1 0xffffffff81e21000 11460 ipfw.ko
Гуглил очень долго, ориентировался в первую очередь на: http://www.opennet.dev/openforum/vsluhforumID12/7113.html
Подскажите, пожалуйста, что я делаю не так? Использование ipfw мне не принципиально, остальное важно.