Вы находитесь здесь: version6.ru » Настройка прозрачного HTTP-прокси с поддержкой IPv4 и IPv6
Настройка прозрачного HTTP-прокси с поддержкой IPv4 и IPv6
Впервые опубликовано 2012-01-10.
Установка в локальной сети прокси-сервера позволяет:
- ускорить доступ в Интернет благодаря локальному сохранению и последующей раздаче из кэша часто запрашиваемых ресурсов (страниц, картинок, CSS);
- настроить блокировку рекламы (либо другого нежелательного содержимого) в одном месте, сразу для всех пользователей локальной сети.
Прозрачный HTTP-прокси называется так потому, что все клиенты, обращающиеся к внешним веб-серверам из внутренней сети, проходят через него автоматически, не внося никаких изменений в настройки на своей стороне (не указывая явно прокси во всех используемых программах, в части из которых может вовсё и не быть поддержки прокси).
Давайте рассмотрим, как обеспечить эту весьма удобную прозрачность одновременно по IPv4 и по IPv6.
В нижеследующих примерах подразумевается:
- вы используете маршрутизатор на базе GNU/Linux;
- на нём установлен прокси-сервер Squid 3.1+ (описание установки и настройки Squid выходит за рамки данной статьи);
- в ОС используется ядро Linux версии 2.6.37+ и пакет iptables 1.4.10+;
- внутренний интерфейс маршрутизатора называется
eth0
.
IPv4
IPv4-соединения перенаправляются на прокси с помощью механизма NAT. Выглядит достаточно просто:
iptables
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8084
Добавьте данную строку в уже используемый вами скрипт iptables.
Squid
Со стороны Squid необходимо добавить в /etc/squid3/squid.conf
:
http_port 8084 transparent
Порт можно использовать любой другой на ваш выбор, главное чтобы он не был занят ничем другим, и был одним и тем же как в правиле iptables
, так и в конфиге Squid.
IPv6
Поскольку NAT в ip6tables отсутствует, прозрачный прокси для IPv6 реализуется несколько другим способом. Настройка выглядит чуть сложнее, однако благодаря отсутствию необходимости в NAT, достигается важное преимущество: хотя соединения и проходят через прокси, удалённый веб-сервер в качестве адреса клиента видит IPv6 конечной машины, а не адрес прокси.
iproute & ip6tables
#!/bin/sh # === Удаление прежних настроек (если были) =========== ip -6 route flush table 64 ip -6 rule del from all fwmark 0x6 ip6tables -t mangle -F ip6tables -t mangle -X DIVERT # === Внесение новой конфигурации ===================== ip -6 route add local default dev lo table 64 ip -6 rule add from all fwmark 0x6 lookup 64 ip6tables -t mangle -N DIVERT ip6tables -t mangle -A DIVERT -j MARK --set-mark 6 ip6tables -t mangle -A DIVERT -j ACCEPT 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
Значения table 64
и fwmark 0x6
выбраны здесь произвольным образом; если у вас в системе уже используются множественные таблицы маршрутизации и использующие метки правила файрволла (к примеру, для обеспечения работы нескольких WAN-подключений), удостоверьтесь, чтобы данный скрипт не конфликтовал с уже имеющимися у вас настройками.
Squid
В /etc/squid3/squid.conf
нужно добавить:
http_port 8086 tproxy
Как и в вышеописанном процессе настройки для IPv4, порт можно выбрать и какой-нибудь другой.
Применение настроек
Чтобы применить внесённые в squid.conf
изменения, достаточно указать Squid'у перечитать этот файл; к примеру, в Debian-based дистрибутивах для этого достаточно выполнить /etc/init.d/squid3 reload
.
Настройки ip/iptables/ip6tables вступают в силу сразу после выполнения соответствующих команд. Для того, чтобы они применялись при каждой загрузке системы, добавьте их в ваш скрипт файрволла (в используемом мною arno-iptables-firewall пользовательские дополнения можно прописывать в /etc/arno-iptables-firewall/custom-rules
), либо просто добавьте в /etc/rc.local
.
Проверка
С любой машины в локальной сети (но не с самого сервера) выполните:
curl -I4 http://version6.ru/
curl -I6 http://version6.ru/
В обоих случаях в выводе curl
должны присутствовать строки:
X-Cache: MISS from вашпрокси X-Cache-Lookup: MISS from вашпрокси:порт
Если их нет, либо соединение не устанавливается, значит что-то настроено не так. В случае, если настроить так и не получается, заходите к нам в IRC, возможно кто-нибудь сможет помочь.