Наш провайдер rinet
UnixFAQ.ru
   :: Поиск  
   :: Самые новые ::

   :: Самые читаемые ::
   :: Реклама ::

Начало
Сетевая часть
HTTP Proxy
Squid

Как сделать, чтобы пользователи браузеров пользовались кешем без их настройки?

 Можно сделать прозрачное кеширование на Linux, Solaris, и BSD версиях. Смысл в том, что операционная система перенаправляет некоторые IP пакеты приложению. Этот документ на данный момент содержит инструкции по настройке прозрачного кеширования на Linux и Solaris. Прозрачный прокси для Solaris, SunOS, и BSD систем Ищите здесь http://cheops.anu.edu.au/~avalon/ip-filter.html Прозрачный прокси для Linux [Contributed by Rodney van den Oever ]

Warning: this technique has several significant shortcomings!

В файле access.log не отображаются имена хостов в URL.
Вместо этого печатаются исходные IP адреса. Это из-за того, что адрес назначения определяется системным вызовом getsockname(2). Это значит, что родительский или братский кеш работают не корректно. Сами эти кеши пишут в URL'е имена, а не IP адреса. Эти URL'ы разные и не происходит попадания в кеш при повторном запросе. Это значит, что Вы теряете преимущество от иерархического прокси, если используете прозрачное кеширование.
Данный метод поддерживает только HTTP протокол, и не поддерживает gopher или FTP
Так как в браузере не установлена поддержка прокси, то он использует FTP протокол (с 21 портом назначения), а не требуемый HTTP. Нельзя задать правила перенаправления на прокси, так как браузер использует другой протокол. Та же ситуация и с gopher. Обычно все запросы к прокси транслируются клиентом в HTTP протокол, но раз клиент ничего не знает о перенаправлении, то ничего не происходит.
Если Вас такая ситуация устраивает, вперед к компиляции ядра с поддержкой брандмауэра и перенаправления. Здесь приведены важные параметры из /usr/src/linux/.config:
    #
    # Code maturity level options
    #
    CONFIG_EXPERIMENTAL=y
    #
    # Networking options
    #
    CONFIG_FIREWALL=y
    # CONFIG_NET_ALIAS is not set
    CONFIG_INET=y
    CONFIG_IP_FORWARD=y
    # CONFIG_IP_MULTICAST is not set
    CONFIG_IP_FIREWALL=y
    # CONFIG_IP_FIREWALL_VERBOSE is not set
    CONFIG_IP_MASQUERADE=y
    CONFIG_IP_TRANSPARENT_PROXY=y
    CONFIG_IP_ALWAYS_DEFRAG=y
    # CONFIG_IP_ACCT is not set
    CONFIG_IP_ROUTER=y
Здесь http://www.xos.nl/linux/ipfwadm/ возьмите исходники ipfwadm и установите его. Ipfwadm понадобится для задания правил перенаправления. Я добавил эти правила в скрипт запускаемый из /etc/rc.d/rc.inet1 (Slackware) который устанавливает интерфейс в момент загрузки. Перенаправление должно быть завершено до задания любых входных правил. Чтобы убедиться, что это работает я отключил forwarding (masquerading).

/etc/rc.d/rc.firewall:

#!/bin/sh
# rc.firewall Linux kernel firewalling rules
FW=/sbin/ipfwadm

# Flush rules, for testing purposes
for i in I O F # A # If we enabled accouting too
do
${FW} -$i -f
done

# Default policies:
${FW} -I -p rej # Incoming policy: reject (quick error)
${FW} -O -p acc # Output policy: accept
${FW} -F -p den # Forwarding policy: deny

# Input Rules:

# Loopback-interface (local access, eg, to local nameserver):
${FW} -I -a acc -S localhost/32 -D localhost/32

# Local Ethernet-interface:

# Redirect to Squid proxy server:
${FW} -I -a acc -P tcp -D default/0 80 -r 80

# Accept packets from local network:
${FW} -I -a acc -P all -S localnet/8 -D default/0 -W eth0

# Only required for other types of traffic (FTP, Telnet):

# Forward localnet with masquerading (udp and tcp, no icmp!):
${FW} -F -a m -P tcp -S localnet/8 -D default/0
${FW} -F -a m -P udp -S localnet/8 -D default/0


Весь траффик локальной сети с любым адресом назначения перенаправляется на локальный 80 порт. Правила можно посмотреть и они будут выглядеть как-то так:
    IP firewall input rules, default policy: reject
    type  prot source               destination          ports
    acc   all? 127.0.0.1            127.0.0.1            n/a
    acc/r tcp? 10.0.0.0/8           0.0.0.0/0            * -> 80 => 80
    acc   all? 10.0.0.0/8           0.0.0.0/0            n/a
    acc   tcp? 0.0.0.0/0            0.0.0.0/0            * -> *
Здесь важные установки в squid.conf:
    http_port            80
    icp_port                3130
    httpd_accel             virtual 80
    httpd_accel_with_proxy? on
Внимание, virtual это магическое слово здесь!

Я протестировал на Windows 95 как с Microsoft Internet Explorer 3.01 так и Netscape Communicator и это работает с обоими с отключенными установками прокси.

Один раз squid кажется зациклился когда я указал браузеру на локальный 80 порт. Но этого можно избежать добавив строку:

??? ${FW} -I -a rej -P tcp -S localnet/8 -D dec/32 80


    IP firewall input rules, default policy: reject
    type  prot source               destination          ports
    acc   all  127.0.0.1            127.0.0.1            n/a
    rej   tcp  10.0.0.0/8           10.0.0.1             * -> 80
    acc/r tcp  10.0.0.0/8           0.0.0.0/0            * -> 80 => 80
    acc   all  10.0.0.0/8           0.0.0.0/0            n/a
    acc   tcp  0.0.0.0/0            0.0.0.0/0            * -> *
Замечание о преобразовании имен: Вместо того, чтобы просто передать URL прокси, браузер сам преобразовывает их. Удостоверьтесь, что на рабочих станциях прописаны локальные DNS сервера.

Если на брандмауэре или прокси сервере работает DNS сервер (что является хорошей идеей IMHO) пусть рабочие станции используют его.


Создано: Gleb Smirnoff

   :: Новости ::

Сайт снова оживлен на новой площадке.

sem, 22.11.2008

Новый участник проекта - Сергей Матвейчук

glebius, 30.01.2005

Новый участник проекта - Владимир Савкин

glebius, 24.01.2004

Сайт переехал на новую площадку. Теперь услуги co-location предоставляются компанией Best Telecommunications, за что им огромное спасибо.

glebius, 05.09.2003

Новый участник проекта - Андрей Павлов

glebius, 29.07.2002

Сайт вернулся к жизни. Два месяца назад отказал жесткий диск, до этого работавший безотказно и не подавая никаких признаков скорой смерти. Тк я по жизни разгильдяй, то бэкапа не было. Однако нашлись добрые люди, которые подкинули свои мирроры и кэши, и как видите, мы снова живем. Огромное человеческое спасибо Константину Елапину, Дмитрию Тейблюму и Александру Дилевскому из Яндекса, а также vasilich@softhome.net и kx@usp.ru.
Новый дизайн сайта сделал Андрей Селиванов.

glebius, 20.07.2002