Еще один узелок на память.
Задача. Есть пул IP адресов на удаленном сервере, необходимо настроить прокси-сервер так что бы запрос уходил с того IP на который он поступил.
Мне известны три варианта - tinyproxy, 3proxy и squid.
В tinyproxy это реализуется всего одним параметром BindSame. Просто раскомментируем строку "BindSame yes" в конфигурационном файле tinyproxy.conf и рестартуем сам tinyproxy. Этот параметр свяжет исходящее соединение с IP-адресом входящего соединения.
Однако этот вариант мне не подошел. При использовании 800 IP и таком же количестве запросов в секунду производительность tinyproxy оставляет желать лучшего.
3proxy. Здесь все просто - в конфиге прописываем
proxy -n -a -pPORT -iIIP -eOIP, где PORT - входящий порт, IIP - входящий адрес, а OIP - исходящий адрес
Рассмотрим вариант с squid. Реализация немного сложней:
Добавляем свои правила в конфигурационный файл squid.conf -
после строки "# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS" добавляем
include /etc/squid3/myip.conf
Содержимое myip.conf :
#Перечисляем IP и сети которым разрешен доступ
acl inner_network src 10.0.0.1
...
acl inner_network src 10.1.0.0/24
#Привязка входящего IP к исходящему
acl ip1 myip 10.5.0.1
tcp_outgoing_address 10.5.0.1 ip1
...
acl ip100 myip 10.5.0.100
tcp_outgoing_address 10.5.0.100 ip100
И небольшой скрипт который поможет создать файл myip.conf:
#файл со списком IP-адресов, каждый адрес с новой строки
filename=all-ip.txt
declare -a a
a=( `cat "$filename" | tr '\n' ' '`)
for ((i=1; i<=${#a[*]}; i++)); do
printf 'acl ip'$i' myip '${a[$i]}'\n' >> myip.conf
printf 'tcp_outgoing_address '${a[$i]}' ip'$i'\n' >>myip.conf
done
После тестирования производительности я остался удовлетворен результатом.
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии