я пытаюсь изменить свою прозрачную настройку Squid от использования общего NAT, который ограничен только IPv4 и переключает его на TPROXY для поддержки IPv6. У меня возникают трудности с прозрачными клиентами для работы в новой настройке, однако все запросы выполняются squid, бросающим следующую ошибку на все запросы:
"запрошенный URL не может быть получен"
казалось бы, есть проблема маршрутизации где-то, но я не уверен, что это неправильный.
я использую iptables
и ip6tables
на моем маршрутизаторе DD-WRT и прокси Squid вместе с 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 info:
# 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 (на самом сервере):
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 ящик, где это, кажется, идет не так. Все запросы регистрируются, но возвращается 500 ошибок.
насколько мне известно, моя установка поддерживает TPROXY:
- CentOS 7
- Squid 3.3.8 (EPEL)
- iptables / ip6tables 1.4.21
- Ядро Linux 3.10
- libcap 2.22
я использовал эти источники в качестве руководства, но не может получить рабочую установка.
- http://wiki.squid-cache.org/ConfigExamples/Intercept/IptablesPolicyRoute
- http://wiki.squid-cache.org/Features/Tproxy4#Feature:_TPROXY_version_4.1.2B-_Support
любые советы о том, что может быть проблемой или для отладки дальше?