1

Я пытаюсь изменить настройку прозрачности Squid с использования универсального NAT, который ограничен только IPv4, и переключаю его на TPROXY для поддержки IPv6. У меня возникают проблемы с получением прозрачных клиентов для работы в новой настройке, однако все запросы выполняются с помощью squid, выдающего следующую ошибку для всех запросов:

"Запрашиваемый адрес недоступен"

Казалось бы, есть проблема маршрутизации где-то, но я не уверен, что не так.

Я использую iptables и ip6tables на моем маршрутизаторе DD-WRT и Squid Proxy вместе с iproute2 для выполнения маршрутизации с обеих сторон.

По умолчанию кажется, что модуль ip6table_mangle не загружен по умолчанию в DD-WRT, но был скомпилирован в сборку, запущенную на моем маршрутизаторе:

find /lib/modules -name "*.ko" | grep -i mangle
/lib/modules/3.10.89/ip6table_mangle.ko

Загрузил модуль и добавил в скрипт запуска для будущих загрузок:

insmod ip6table_mangle

Информация о маршрутизации DD-WRT:

# Squid transparent proxy
PROXY_IPV4="192.168.x.x"
PROXY_IPV6="xxxx:xxxx:xxxx:xxxx::x"
CLIENTIFACE=br0
FWMARK=3

iptables -t mangle -A PREROUTING -i $CLIENTIFACE -p tcp --dport 80 -s $PROXY_IPV4 -j ACCEPT
ip6tables -t mangle -A PREROUTING -i $CLIENTIFACE -p tcp --dport 80 -s $PROXY_IPV6 -j ACCEPT

iptables -t mangle -A PREROUTING -i $CLIENTIFACE -p tcp --dport 80 -j MARK --set-mark $FWMARK
iptables -t mangle -A PREROUTING -m mark --mark $FWMARK -j ACCEPT
ip6tables -t mangle -A PREROUTING -i $CLIENTIFACE -p tcp --dport 80 -j MARK --set-mark $FWMARK
ip6tables -t mangle -A PREROUTING -m mark --mark $FWMARK -j ACCEPT

iptables -t filter -A FORWARD -i $CLIENTIFACE -o $CLIENTIFACE -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A FORWARD -i $CLIENTIFACE -o $CLIENTIFACE -p tcp --dport 80 -j ACCEPT

ip rule add fwmark $FWMARK table 2
ip -6 rule add fwmark $FWMARK table 2
ip route add default via $PROXY_IPV4 table 2
ip -6 route add default via $PROXY_IPV6 table 2

# End Squid intercept proxy config

Маршрутизация Squid Proxy (на самом сервере):

iptables -F -t mangle
iptables -X -t mangle
ip6tables -F -t mangle
ip6tables -X -t mangle
iptables -t mangle -N DIVERT
ip6tables -t mangle -N DIVERT

iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129

ip6tables -t mangle -A DIVERT -j MARK --set-mark 1
ip6tables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
ip6tables -t mangle -A DIVERT -j ACCEPT
ip6tables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129

ip -f inet rule add fwmark 1 lookup 100
ip -f inet route add local default dev eno1 table 100

ip -f inet6 rule add fwmark 1 lookup 100
ip -f inet6 route add local default dev eno1 table 100

Squid Conf:

http_port 3129 tproxy

Конфигурация sysctl:

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.eno1.rp_filter = 0

eno1 - это основной интерфейс Ethernet, который я также безуспешно пытался использовать с помощью lo .

Трафик передается в Squid, поэтому кажется, что маршрутизатор выполняет свою работу. Это когда трафик заканчивается в Squid box, где он, кажется, идет не так. Все запросы регистрируются, но возвращаются 500 ошибок.

Насколько я знаю, моя установка поддерживает TPROXY:

  • CentOS 7
  • Кальмар 3.3.8 (EPEL)
  • iptables/ip6tables 1.4.21
  • Ядро Linux 3.10
  • libcap 2.22

Я использовал эти источники в качестве руководства, но не могу получить рабочую настройку.

Любой совет, в чем может быть проблема или отладить дальше?

1 ответ1

1

Оказывается, все было правильно настроено. На самом деле проблема была в моей директиве cache_peer для Privoxy. На самом деле выдается ошибка: Squid говорит, что не может передать трафик Privoxy. Это потому, что настройка tproxy сбивает его с толку.

Чтобы избежать этого, вы должны добавить no-tproxy в строку cache_peer

cache_peer hostname parent 8118 7 no-tproxy ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .