Jump to content
Калькуляторы

проблема со squid tproxy

Всем доброго времени суток! Необходимо запустить прозрачный прокси на отдельном сервере. Настроил схему согласно этой статье - http://habrahabr.ru/post/219435/ , но при попытке выйти в мир через прокси в логах сквида вижу следующее - 2015/11/28 03:10:15 kid1| ERROR: NAT/TPROXY lookup failed to locate original IPs on local=81.19.77.5:80 remote=x.x.x.x:4966 FD 20 flags=17

2015/11/28 03:10:20 kid1| ERROR: NAT/TPROXY lookup failed to locate original IPs on local=81.19.77.5:80 remote=x.x.x.x:4970 FD 20 flags=17

2015/11/28 03:10:29 kid1| ERROR: NAT/TPROXY lookup failed to locate original IPs on local=217.69.139.58:80 remote=x.x.x.x:4976 FD 20 flags=17

2015/11/28 03:10:29 kid1| ERROR: NAT/TPROXY lookup failed to locate original IPs on local=193.0.170.53:80 remote=x.x.x.x:4978 FD 20 flags=17

2015/11/28 03:11:29 kid1| ERROR: NAT/TPROXY lookup failed to locate original IPs on local=94.100.180.59:80 remote=x.x.x.x:4980 FD 20 flags=17

2015/11/28 03:11:29 kid1| ERROR: NAT/TPROXY lookup failed to locate original IPs on local=193.0.170.54:80 remote=x.x.x.x:4982 FD 20 flags=17

 

Где x.x.x.x - это ip за который делается nat.

 

Вот некоторая дополнительная инфармация:

Gateway:

Linux border 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux

 

Squid:

Linux squid 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u3 (2015-08-04) x86_64 GNU/Linux

 

squid -v

Squid Cache: Version 3.5.11-20151120-r13955

Service Name: squid

configure options: '--enable-linux-netfilter' '--prefix=/usr' '--localstatedir=/var' '--libexecdir=/lib/squid' '--datadir=/share/squid' '--sysconfdir=/etc/squid' '--with-default-user=proxy' '--with-logdir=/var/log/squid' '--with-pidfile=/var/run/squid.pid' '--enable-removal-policies=lru heap' --enable-ltdl-convenience

 

Подскажите пожалуйста куда копать, заранее благодарю за помощь.

Share this post


Link to post
Share on other sites

а разве squid у вас собран с tproxy ?

 

Да, за это отвечает опция --enable-linux-netfilter. Вот кусок лога сквида при старте:

2015/11/28 21:08:35 kid1| Accepting HTTP Socket connections at local=[::]:3128 remote=[::] FD 35 flags=9

2015/11/28 21:08:35 kid1| Accepting TPROXY intercepted HTTP Socket connections at local=[::]:3129 remote=[::] FD 36 flags=25

2015/11/28 21:08:35 kid1| Done reading /cache/hdd1/squid swaplog (0 entries)

2015/11/28 21:08:35 kid1| Store rebuilding is 0.00% complete

 

И вывод ./configure --help

--enable-linux-netfilter

Enable Transparent Proxy support for Linux

(Netfilter)

Edited by conrad

Share this post


Link to post
Share on other sites

Вот еще информация:

 

Gateway:

 

eth0 - 10.17.0.2/24

eth0.3128 - 192.168.20.1/24

 

iptables -t mangle -I DIVERT ! -i eth0.3128 -s x.x.x.x -p tcp --dport 80 -j MARK --set-mark 4 где x.x.x.x белый ip (что бы гнать на прокси пока только одного пользователя)

iptables -t mangle -I DIVERT ! -i eth0.3128 -d x.x.x.x -p tcp --sport 80 -j MARK --set-mark 4 тот же белый ip

 

iptables -t mangle -I PREROUTING ! -i eth0.3128 -p tcp -m set ! --match-set tas-ix dst -m tcp --dport 80 -j DIVERT

iptables -t mangle -I PREROUTING ! -i eth0.3128 -p tcp -m set ! --match-set tas-ix src -m tcp --sport 80 -j DIVERT

 

 

ip rule add fwmark 4 lookup cache

 

root@border:~# ip ru list

0: from all lookup local

32763: from all fwmark 0x4 lookup cache -- гнать трафик с меткой 4 в талицу cache

32764: from all fwmark 0xa lookup cron

32765: from 10.20.0.0/24 lookup cron

32766: from all lookup main

32767: from all lookup default

 

root@border:~# ip ro sh table cache

default via 10.17.0.3 dev eth0 -- гоню трафик на сквид.

 

SQUID:

 

eth0 - 10.17.0.3/24

eth0.3128 - 192.168.20.2/24

 

*mangle

:PREROUTING ACCEPT [237869:76104852]

:INPUT ACCEPT [325134:79872902]

:FORWARD ACCEPT [7595:7198871]

:OUTPUT ACCEPT [104270:7197275]

:POSTROUTING ACCEPT [111865:14396146]

:DIVERT - [0:0]

-A PREROUTING -p tcp -m socket -j DIVERT

-A PREROUTING -p tcp -m tcp --dport 80 -j TPROXY --on-port 3129 --on-ip 0.0.0.0 --tproxy-mark 0x1/0x1

-A DIVERT -j MARK --set-xmark 0x1/0xffffffff

-A DIVERT -j ACCEPT

 

root@squid:~# ip ru list

0: from all lookup local

32765: from all fwmark 0x1 lookup border

32766: from all lookup main

32767: from all lookup default

 

root@squid:~# ip ro sh table border

local default dev eth0 scope host

 

 

P.S.: Прикрепляю схемку.

post-121088-066870000 1448787801_thumb.png

Share this post


Link to post
Share on other sites

Не могу вам ничем помочь к сожалению, но хотел бы спросить - а зачем вся эти пляски с ip rule, iptables divert etc, нельзя ли просто поставить squid на тот же сервер где шлюз\nat и блокировать там так же по acl regex ? Или слишком нагрузочка будет высокой и лишней для шлюза ? У нас самописное решение, но хотелось бы попробовать вариант со squid сделать.

Share this post


Link to post
Share on other sites

Ну во первых нагрузка, во вторых основная цель прокси - это кеш(для которого выделено 5 дисков), а не блокировка сайтов.

Share this post


Link to post
Share on other sites

прокси - это кеш(для которого выделено 5 дисков),э

Не будет оно кэшировать, сейчас уже большинство трафика - https, оно не кэшируется, если не подменять сертификаты.

А если подменять, то вы уже упадете в глазах очень многих абонентов (да и всякие клиент-банки не будут работать).

Share this post


Link to post
Share on other sites

Проблема решилась установкой libcap2-dev и пересборкой сквида, только теперь клиенты получают connection timed out от сквида...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.