Страница 1 из 1

Перенаправление http запросов на разные IP (squid)

Добавлено: 01 апр 2021 07:29
x-nikolas
Добрый день!
Имеется сервер с Ubuntu 20.04, у сервера 3 белых IP. На сервере запущен сервис, отправляющий http запросы на определённый сайт, условно "example.com".
Задача: перенаправлять http разные запросы от сервиса на "example.com" от разных IP нашего сервера в зависимости от настроенных правил. В качестве прокси-сервера выбран Squid (хотя это не принципиально).

Пробовал настроить опцию tcp_outgoing_address, но так и не понял, как нужно (и можно ли вообще) это сделать.
В опциях своих http запросов (на стороне сервиса) я могу указать дополнительно :username, :proxyhost и :proxyport. Задумка в том, чтобы Squid делал перераспределение в зависимости от содержимого этих опций.

Прошу подсказать, можно ли так сделать, и, если да, то на что обратить внимание, с чего начать? Уже несколько дней не получается разобраться...

Re: Перенаправление http запросов на разные IP (squid)

Добавлено: 01 апр 2021 10:13
Алексей Максимов
Здравствуйте, x-nikolas.

Не до конца понимаю смысла задачи. Если "сервис" на то же сервере, что и белые IP, то при чём тут squid ?

Re: Перенаправление http запросов на разные IP (squid)

Добавлено: 01 апр 2021 10:54
x-nikolas
Алексей Максимов писал(а): 01 апр 2021 10:13 Не до конца понимаю смысла задачи. Если "сервис" на то же сервере, что и белые IP, то при чём тут squid ?
Смысл задачи в том, что сайт, на который обращается сервис, отвечает быстро только на первый запрос (с данного IP), после чего включает таймер, и все последующие запросы ожидают ответа по 3 секунды, что недопустимо долго. А задумка в том, чтобы Squid перенаправлял запросы сервиса на разные IP нашего сервера, по очереди. А сервер, на который мы обращаемся, будет видеть запросы от разных IP и будет отвечать без задержек.

То, что я мог не верно выбрать инструмент (Squid) - это очень вероятно. В этом и есть мой вопрос: если выбрал верно - то как настроить? А если не верно - может кто-то сориентирует, что нужно применить вместо squid?

Re: Перенаправление http запросов на разные IP (squid)

Добавлено: 01 апр 2021 11:19
Алексей Максимов
А эти три белых IP - это разные подсети/провайдеры или это IP из одной подсети и адрес шлюза провайдерского везде один и тот же?

Re: Перенаправление http запросов на разные IP (squid)

Добавлено: 01 апр 2021 12:15
x-nikolas
Алексей Максимов писал(а): 01 апр 2021 11:19 А эти три белых IP - это разные подсети/провайдеры или это IP из одной подсети и адрес шлюза провайдерского везде один и тот же?
Привожу содержимое etc/network/interfaces для двух IP:
(xxx.yyy.zzz - соответственно везде одинаковые)

auto eth0
iface eth0 inet static
address xxx.yyy.zzz.73
netmask 255.255.255.0
broadcast xxx.yyy.zzz.255
network xxx.yyy.zzz.0
gateway xxx.yyy.zzz.1

auto eth0:1
iface eth0:1 inet static
address xxx.yyy.zzz.191
netmask 255.255.255.0
broadcast xxx.yyy.zzz.255
network xxx.yyy.zzz.0

post-up ip route add xxx.yyy.zzz.0/24 dev eth0:1 src xxx.yyy.zzz.191 table eth0:1_if
post-up ip route add default via xxx.yyy.zzz.1 table eth0:1_if
post-up ip rule add from xxx.yyy.zzz.191 table eth0:1_if
post-down ip rule del from xxx.yyy.zzz.191 table eth0:1_if

Re: Перенаправление http запросов на разные IP (squid)

Добавлено: 02 апр 2021 11:52
crux
если есть возможность запускать утилиту под разными пользователями, то добавьте правила для разных пользователей использовать разную таблицу маршрутизации

ip rule add uidrange 1001-1001 table eth0:1_if
ip rule add uidrange 1002-1002 table eth0:2_if

поддержка uidrange появилась в ядрах 4.10

Re: Перенаправление http запросов на разные IP (squid)

Добавлено: 03 апр 2021 06:06
Алексей Максимов
Ещё можно попробовать так (перенаправляем запросы на разные IP в зависимости от имени пользователя, который аутентифицировался в squid):

Код: Выделить всё

acl login1 proxy_auth username1
acl login2 proxy_auth username2
acl login3 proxy_auth username3
...
tcp_outgoing_address xxx.yyy.zzz.101 login1
tcp_outgoing_address xxx.yyy.zzz.102 login2
tcp_outgoing_address xxx.yyy.zzz.102 login3

Re: Перенаправление http запросов на разные IP (squid)

Добавлено: 05 апр 2021 06:11
x-nikolas
Всем спасибо! Буду пробовать.

Re: Перенаправление http запросов на разные IP (squid)

Добавлено: 09 апр 2021 10:32
x-nikolas
Свою задачу я в итоге решил при помощи Squid. Может кому пригодится:

# Чтобы не попасть в списки бесплатных прокси, разрешаем http_access только с localhost:
http_access allow localhost
http_access deny all


# Squid по умолчанию слушает порт 3128. Добавляем к нему ещё один (данный пример для двух белых IP):
http_port 3128
http_port 3129


# Создаём два списка контроля доступа с номерами портов в качестве элементов:
acl req1 myport 3128
acl req2 myport 3129


# Перенаправляем с каждого порта на разный IP.
tcp_outgoing_address xxx.yyy.zzz.nnn req1
tcp_outgoing_address xxx.yyy.zzz.mmm req2


Для описанных выше целей решение рабочее.

Хотелось, конечно, организовать работу через один порт 3128 и перенаправлять запросы по имени пользователя и паролю, что сходу что-то не вышло. Делал примерно так:

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
(задал два юзера и два пароля)

acl login1 proxy_auth user1
acl login2 proxy_auth user2

tcp_outgoing_address xxx.yyy.zzz.nnn login1
tcp_outgoing_address xxx.yyy.zzz.mmm login1

В итоге - просто любые запросы проходили насквозь. И с паролем, и без пароля...

Re: Перенаправление http запросов на разные IP (squid)

Добавлено: 10 апр 2021 07:31
Алексей Максимов
Запросы без аутентификации проходили по той причине, что не описаны правила http_access.
Сначала нужно объявить обязательную аутентификацию для нужного нам ACL с помощью proxy_auth REQUIRED, а затем с помощью правил http_access разрешить только прошедших аутентификацию.

Первый же пример из документации по аутентификации в squid это наглядно демонстрирует:

Код: Выделить всё

acl foo proxy_auth REQUIRED
http_access allow foo
http_access deny all