LinuxForum.Fans
Тема

Редиректор в SQUID

Автор: Cruiser78 2 сообщений 2593 просмотров
#255872

Привет всем!

Хочу решить стандартными средствами не совсем стандартную задачу.
А именно:
1 Есть IPTV-вещание по unicast'у (через http).
2. Есть медиаплейер, который не хочет принимать URL, в формате этого IPTV-вещания (URL типа http://IP.IP.IP.IP:port/file, file - цифры без "расширения")
Иной формат ((URL типа http://IP.IP.IP.IP:port/1.mpeg)- берет. То есть умеет коннектиться непосредственно к нужному порту и качать из него данные в формате, заданном припиской 1.mpeg). Проверено на udpxy.

Задача понятна - записать плейеру URL, который он понимает, перехватить трафик в сторону IPTV-провайдера, и на этом перехватчике изменить запрос. То есть, нужен такой прокси. Что у нас хорошо работает в качестве прокси? Правильно, SQUID. Берем его, читаем маны, находим в них параметр url_rewrite_program. Записываем в конфиг сквида:

text
url_rewrite_program /usr/local/bin/redirector.sh
url_rewrite_children 1

И пишем простенький, для начала, скрпитик redirector.sh

text

#!/bin/sh
#
while : 
do
  read url ip ident method
  /usr/bin/logger -t IPTV url=$url ip=$ip ident=$ident method=$method
  echo $url $ip $ident $method
# проверка на необходимость завершения скрипта, когда URL пуст, сквид остановлен, надо самоубиться
  if [ "x$url" == "x" ]; then
    exit 0
  fi
done  

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

Показать

1338488550.006 24 192.168.0.102 TCP_MISS/200 557 GET http://googleads.g.doubleclick.net/pagead/drt/s? - DIRECT/173.194.32.26 text/html
1338488550.455 223 192.168.0.102 TCP_MISS/200 1510 POST http://ocsp.thawte.com/ - DIRECT/199.7.55.72 application/ocsp-response

Этап второй - задаю на плейере URL типа http://my_p.r.o.xy:3128/file.mpeg. То есть тот формат, который принимает плейер, но направляю это дело прямиком в порт сквида (там редиректор должен потом разобраться). И, ничего не вижу... Точнее, в лог сквида (access.log) идет запись вида (100-й это плейер):

text
1338491159.579      1 192.168.0.100 NONE/400 3503 GET /302.mpeg - NONE/- text/html

То есть:
1. Пропала адресная часть запроса. Ну и фиг с ней, все равно информации для восстановления правильного адреса достаточно. НО...
2. Редиректор не дергается совершенно.

Этап третий вырезания каменного цветка Данилой-мастером. Настраиваем сквид в прозрачный режим (PREROUTING в iptables), корректируем URL на плейере, приводим его в вид http://I.P.T.V/file.mpeg, то есть работать через 80-й порт прозрачного прокси . Ну, если редиректор и эту инфу получит, то разберется, составит нужный адрес... Однако, все равно фиг-вам. В access.log снова пишется

text
1338491159.579      1 192.168.0.100 NONE/400 3503 GET /303.mpeg - NONE/- text/html

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

Подскажите, коллеги, что я неправильно делаю? Где собаки зарылись?

#255889

Остальные правила iptables какие? Хотя... если

"Cruiser78" написал:
Стартую сквид, настраиваю на него firefox (на порт 3128), в логгере вижу, что все работает, по интернету хожу, редиректор вызывается, всё чики-пуки. В журналах самого сквида появляются нужные правильные записи куда ходил.
Войдите или зарегистрируйтесь, чтобы ответить.