|
|
|
Начало Сетевая часть 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
|