Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

tproxy [2012-01-10 10:35 UTC]
rm
tproxy [2012-01-11 05:29 UTC] (текущий)
rm
Строка 1: Строка 1:
====== Настройка прозрачного HTTP-прокси с поддержкой IPv4 и IPv6 ====== ====== Настройка прозрачного HTTP-прокси с поддержкой IPv4 и IPv6 ======
-===== Системные требования ===== +//Впервые опубликовано 2012-01-10.// 
-  * ядро Linux 2.6.37+ + 
-  * iptables 1.4.10+ +Установка в локальной сети прокси-сервера позволяет: 
-  * Squid 3.1++  * ускорить доступ в Интернет благодаря локальному сохранению и последующей раздаче из кэша часто запрашиваемых ресурсов (страниц, картинок, CSS); 
 +  * настроить [[http://www.instanceof.ru/upravlenie.serverami/squid.protiv.reklamy|блокировку рекламы]] (либо другого [[http://www.msav.ru/archives/200|нежелательного содержимого]]) в одном месте, сразу для всех пользователей локальной сети. 
 + 
 +**Прозрачный** HTTP-прокси называется так потому, что все клиенты, обращающиеся к внешним веб-серверам из внутренней сети, проходят через него автоматически, не внося никаких изменений в настройки на своей стороне (не указывая явно прокси во всех используемых программах, в части из которых может вовсё и не быть поддержки прокси). 
 + 
 +Давайте рассмотрим, как обеспечить эту весьма удобную прозрачность одновременно по IPv4 и по IPv6. 
 + 
 +В нижеследующих примерах подразумевается: 
 +  * вы используете маршрутизатор на базе GNU/Linux; 
 +  * на нём установлен прокси-сервер Squid **3.1+** (описание установки и настройки Squid выходит за рамки данной статьи); 
 +  * в ОС используется ядро Linux версии **2.6.37+** и пакет iptables **1.4.10+**; 
 +  * внутренний интерфейс маршрутизатора называется ''eth0''.
===== IPv4 ===== ===== IPv4 =====
 +IPv4-соединения перенаправляются на прокси с помощью механизма NAT. Выглядит достаточно просто:
 +
==== iptables ==== ==== iptables ====
<code>iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8084</code> <code>iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8084</code>
 +Добавьте данную строку в уже используемый вами скрипт iptables.
==== Squid ==== ==== Squid ====
-Добавить в ''/etc/squid3/squid.conf'':+Со стороны Squid необходимо добавить в ''/etc/squid3/squid.conf'':
<code>http_port 8084 transparent</code> <code>http_port 8084 transparent</code>
 +Порт можно использовать любой другой на ваш выбор, главное чтобы он не был занят ничем другим, и был одним и тем же как в правиле ''iptables'', так и в конфиге Squid.
===== IPv6 ===== ===== IPv6 =====
 +Поскольку NAT в ip6tables отсутствует, прозрачный прокси для IPv6 реализуется несколько другим способом. Настройка выглядит чуть сложнее, однако благодаря отсутствию необходимости в NAT, достигается важное преимущество: хотя соединения и проходят через прокси, удалённый веб-сервер в качестве адреса клиента видит IPv6 конечной машины, а не адрес прокси.
 +
==== iproute & ip6tables ==== ==== iproute & ip6tables ====
-Значения ''table 64'' и ''fwmark 0x6'' выбраны в данном примере произвольным образом; если у вас в системе уже используются множественные таблицы маршрутизации и использующие метки правила файрволла (к примеру, для обеспечения работы нескольких WAN-подключений), удостоверьтесь, чтобы данный скрипт не конфликтовал с уже имеющимися у вас настройками. 
<code>#!/bin/sh <code>#!/bin/sh
-# === Удаление прежней конфигурации ==============+# === Удаление прежних настроек (если были) ===========
ip -6 route flush table 64 ip -6 route flush table 64
Строка 25: Строка 41:
ip6tables -t mangle -X DIVERT ip6tables -t mangle -X DIVERT
-# === Внесение новой конфигурации ================+# === Внесение новой конфигурации =====================
ip -6 route add local default dev lo table 64 ip -6 route add local default dev lo table 64
Строка 36: Строка 52:
ip6tables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT ip6tables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
ip6tables -t mangle -A PREROUTING -p tcp -i eth0 --dport 80 -j TPROXY --tproxy-mark 0x6 --on-port 8086</code> ip6tables -t mangle -A PREROUTING -p tcp -i eth0 --dport 80 -j TPROXY --tproxy-mark 0x6 --on-port 8086</code>
 +Значения ''table 64'' и ''fwmark 0x6'' выбраны здесь произвольным образом; если у вас в системе уже используются множественные таблицы маршрутизации и использующие метки правила файрволла (к примеру, для обеспечения работы нескольких WAN-подключений), удостоверьтесь, чтобы данный скрипт не конфликтовал с уже имеющимися у вас настройками.
==== Squid ==== ==== Squid ====
-Добавить в ''/etc/squid3/squid.conf'':+В ''/etc/squid3/squid.conf'' нужно добавить:
<code>http_port 8086 tproxy</code> <code>http_port 8086 tproxy</code>
 +Как и в вышеописанном процессе настройки для IPv4, порт можно выбрать и какой-нибудь другой.
 +
 +===== Применение настроек =====
 +Чтобы применить внесённые в ''squid.conf'' изменения, достаточно указать Squid'у перечитать этот файл; к примеру, в Debian-based дистрибутивах для этого достаточно выполнить ''/etc/init.d/squid3 reload''.
 +
 +Настройки ip/iptables/ip6tables вступают в силу сразу после выполнения соответствующих команд. Для того, чтобы они применялись при каждой загрузке системы, добавьте их в ваш скрипт файрволла (в используемом мною [[pdo>arno-iptables-firewall]] пользовательские дополнения можно прописывать в ''/etc/arno-iptables-firewall/custom-rules''), либо просто добавьте в ''/etc/rc.local''.
 +
 +===== Проверка =====
 +С любой машины в локальной сети (но не с самого сервера) выполните:
 +<code>curl -I4 http://version6.ru/</code>
 +<code>curl -I6 http://version6.ru/</code>
 +В обоих случаях в выводе ''curl'' должны присутствовать строки:
 +<code>X-Cache: MISS from вашпрокси
 +X-Cache-Lookup: MISS from вашпрокси:порт</code>
 +Если их нет, либо соединение не устанавливается, значит что-то настроено не так. В случае, если настроить так и не получается, заходите [[irc#русскоязычные-irc-каналы-об-ipv6|к нам в IRC]], возможно кто-нибудь сможет помочь.
===== Ссылки ===== ===== Ссылки =====
  * http://wiki.squid-cache.org/Features/Tproxy4   * http://wiki.squid-cache.org/Features/Tproxy4
 +  * http://www.deckle.co.za/squid-users-guide/Transparent_Caching/Proxy

tproxy.1326191710.txt.gz · Последние изменения: 2012-01-10 10:35 UTC От rm
Personal Tools