Это — старая версия документа!


Настройка прозрачного HTTP-прокси с поддержкой IPv4 и IPv6

Установка в локальной сети прокси-сервера позволяет:

  • ускорить доступ в Интернет благодаря локальному сохранению и последующей раздаче из кэша часто запрашиваемых с разных компьютеров локальной сети ресурсов (страниц, картинок, 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

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

Ссылки


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