Итак по порядку.
Все делалось давно и я собственно уже успел подзабыть все тонкости с которыми пришлось столкнуться.
1. Первое что я запомнил и зарубил себе - не работать с исходниками ядра, идущими в комплекте с дистрибутивом или скачиваемым "установленной" осью с репозитария. Граблей я поймал не мало, возможно для профи это были бы во-все и не грабли, но мне хватило.
исходники ядра скачал тут: http://www.kernel.org/pub/linux/kernel/v2.6/. Скачал 2.6.27.
Далее я скомпилил как уже говорил ранее с включенными в ядро GRE и еще кое-какими параметрами:.......
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_ASK_IP_FIB_HASH=y
# CONFIG_IP_FIB_TRIE is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
# CONFIG_IP_PNP is not set
CONFIG_NET_IPIP=y
CONFIG_NET_IPGRE=y
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
.....................
CONFIG_NETLABEL=y
CONFIG_NETWORK_SECMARK=y
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=y
....................
оригинал файла config здесь: http://narod.ru/disk/4559821000/config.html
2. далее, модуль ip_wccp использовать не стал вообще, так как сквиду 2.6 он не нужен.
В принципе после компиляции ядра все практически сразу стало на свои места. Итак конфиг линукса:
/etc/sysconfig/network-scripts/ifcfg-gre0
# Interface GRE for WCCP
DEVICE=gre0
BOOTPROTO=none
IPADDR=175.175.175.254
NETMASK=255.255.255.255
ONBOOT=yes
IPV6INIT=no
MTU=1476
TYPE=Ethernet
NM_CONTROLLED=no
USERCTL=no
PEERDNS=yes
копия файла ifcfg-gre0 сюда
/etc/sysconfig/networking/devices/
и сюда
/etc/sysconfig/networking/profiles/default
далее в rc.local добавляем:
/sbin/ip link set dev gre0 up
далее идем в iptables
Я на сквид завел два интерфейса - на одном сквид поднимает GRE тонель с циской и по нему слушает "запросы" (его адрес 192.168.254.2), а по второму сам ходит в инет и "достает" оттуда запрошенные страницы.
-A PREROUTING -s 213.xx.xx.0/255.255.255.0 -d 192.168.254.2 -p tcp -m tcp --dport 80 -j ACCEPT
-A PREROUTING -s 213.xx.xx.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A INPUT -s 213.xx.xx.0/255.255.255.0 -d 192.168.254.2 -p tcp -m tcp --dport 80 -j ACCEPT
на CISCO:
ip wccp web-cache redirect-list 133
interface FastEthernet0/0.10
description CONNECT TO WCCP-SQUID
encapsulation dot1Q 10
ip address 79.xx.xx.249 255.255.255.248
no ip redirects
no ip unreachables
no ip proxy-arp
ip nat inside
no ip mroute-cache
no cdp enable
interface FastEthernet0/0.11
description GRE TO SQUID
encapsulation dot1Q 11
ip address 192.168.254.1 255.255.255.252
no ip redirects
no ip unreachables
no ip proxy-arp
no ip mroute-cache
no cdp enable
interface FastEthernet0/1.553
description CONNECT TO PROVAIDER
encapsulation dot1Q 53
ip address 87.xx.xx.66 255.255.255.252
no ip redirects
no ip proxy-arp
ip wccp web-cache redirect out
ip nat outside
no ip mroute-cache
ip policy route-map NAT_NETFLOW
no cdp enable
access-list 133 remark #--------------ZAVOROT-NA-CASHE---------------#
access-list 133 deny ip host 79.xx.xx.253 any
access-list 133 deny ip host 79.xx.xx.254 any
access-list 133 permit tcp any any eq www
3. Конфиг самого squid:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
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
icp_access allow all
http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
cache_mem 64 MB
cache_dir ufs /var/spool/squid 512 16 256
maximum_object_size 512 KB
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
logfile_rotate 1
strip_query_terms off
redirector_bypass on
redirect_program /usr/local/bin/squidGuard (это по вкусу)
refresh_pattern ^ftp: &n... 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
acl SNMP_T snmp_community snmp123xx (это для снятия статы MRTG)
acl snmphost13 src 213.xx.xx.20/255.255.255.255
acl snmphost13 src localhost
snmp_access allow SNMP_T snmphost13
snmp_access deny all
dns_nameservers 213.xx.xx.20
coredump_dir /var/spool/squid
acl User_net_1 src 79.xx.xx.0/24
acl User_net_2 src 92.Xx.xx.0/24
acl User_unlim_1 src 192.168.136.0/24
acl User_unlim_2 src 192.168.154.0/24
http_access allow User_net_1
http_access allow User_net_2
http_access allow User_unlim_1
http_access allow User_unlim_2
http_access deny all
tcp_outgoing_address 79.xx.xx.254 User_net_1
tcp_outgoing_address 79.xx.xx.254 User_net_2
tcp_outgoing_address 79.xx.xx.253 User_unlim_1
tcp_outgoing_address 79.xx.xx.253 User_unlim_2
----------
тут нужно пояснение. Дело в том, что у меня два вида клиентов - с оплатой по трафу и безлимитчики. И тех и тех нужно зарулить на сквид, но проблема в том, что далее их нужно зарулить на разных операторов, а так как после "прохода" юзера через сквид, определить "ху-из-ху" не вариант, я на "выходном" интерфейсе сервера поставил "secondary" адрес, а сквиду сказал, что юзеров из такой то сетки "выплевывать" с адресом 79.xx.xx.254, а юзеров из другой сетки с адресом 79.xx.xx.253. В итоге, когда это все приходит на маршрутизатор, по SRC адресу он знает кого в какой канал рулить.
----------
visible_hostname localhost.localhost
http_port 3128 transparent
wccp2_router 192.168.254.1 (вот тут мы получаем, что тонель будет организовываться по второму интерфейсу, выделенному чисто под GRE)
это полный конфиг моего сквида. Все что указано - активировано, все остальное - закоментировано и соответственно либо заблокировано, либо действуют параметры по умолчанию.
Вот в принципе и все.